Announcement

Collapse
No announcement yet.

Serielle Relaiskarte mit C# Ansteuern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Serielle Relaiskarte mit C# Ansteuern

    hallo in einem Projekt soll ich Eine Relaiskarte die an der Seriellen Angeschlossen ist ansprechen und Relais schalten.

    Da es zur zeit ja noch etwas Problematisch ist direkt auf die Serielle zuzugreifen verwende ich die ActiveX MSComm.ocx

    ich hab ein kleines Programm geschreiben was den Port öffnet und Daten die in einer textBox Stehen an die Serielle Schickt 2Zeihler""g""

    das Funktioniert auch soweit hab es getestet indem ich das nullmodem kabel an meinen zweiten comport angeschlossen habe und mit Hyper Terminal Gehorcht habe was kommt.

    ist auch alles so gekommen wie sollte

    nun mal meine Frage hatt schonmal jemand eine solche Relaiskarte angesprochen oder weis was zu tuhn ist???

    Gruss André

  • #2
    Hallo André

    Es gibt viele verschiedene Relaiskarten.
    Hast Du vielleicht ein Schema oder so? Dann könnte man herausfinden wie diese funktioniert und wie man sie ansprechen muss.

    Grüsse
    Johan

    Comment


    • #3
      ich hab das Handbuch Online gefunden.
      vieleicht kann ja da jemand was mit anfangen.
      da ist auch eun CodeBeispiel in VB drinn.

      http://www.thomas-dohl.de/relaiskarte/docu/Handbuch.pdf

      Gruss Andr&#233

      Comment


      • #4
        Im Kapitel 4 ist recht gut beschrieben, wie Du das machen musst.
        Du musst einfach die 3 Bytes (Kommando, Daten) zusammenstellen gemäss Beschreibung/Deiner Hardware und dann die 3 Bytes per XOR-Verknüpfung verrechnen um die Checksumme generieren zu können. Dann schickst Du diese 4 Bytes per serieller Schnittstelle zu Deiner Relaiskarte.

        Mit dem Datenbyte ist es so gelöst, dass jedes Bit einem Relais entspricht.

        Bsp:<br>
        Datenbyte = 0 => Alles Relais aus<br>
        Datenbyte = 1 => Relais 0 ein<br>
        Datenbyte = 2 => Relais 1 ein<br>
        Datenbyte = 3 => Relais 0 und Relais 1 ein.<br>
        ...<br>
        Datenbyte = 255 => Alle Relais ein<br>

        Einfach das Byte binär betrachten und Du siehst wie das funktioniert.

        Hoffe Du kommst ein wenig weiter.

        Gruss
        Johan

        Comment


        • #5
          Hi danke nochma

          also mein gedanken gan sieht so aus.

          int outbuf1;<br>
          int outbuf2;<br>
          int outbuf3;<br>
          int outbufgesamt;<br>
          <br>
          outbuf1 = 1;<br>
          outbuf2 = 1;<br>
          outbuf3 = 0;<br>
          outbufgesamt = outbuf1 ^ outbuf2 ^ outbuf3;<br>
          <br>
          this.axMSComm1.PortOpen = true; //Öffnen des Festgelegten Comports<br>
          <br>
          axMSComm1.Output = outbuf1 + outbuf2 + outbuf3 + outbufgesamt; //Initalisierung der Ersten Relaikarte<br>
          <br>
          <br>
          Das bekomme ich bei der konstelation zurück
          <br><br>
          Eine nicht behandelte Ausnahme des Typs 'System.Runtime.InteropServices.COMException' ist in axinterop.mscommlib.dll aufgetreten.
          <br><br>
          Zusätzliche Informationen: Ausnahme von HRESULT: 0x800A017C (CTL_E_INVALIDPROPERTYVALUE).
          &#10

          Comment


          • #6
            Wahrscheinlich kannst Du die Integer's nicht direkt senden.
            In diesem Fall hilft ein cast auf byte oder char.
            Wenn Du einzelne Bytes senden kannst, würden folgende Anweisungen funktionieren (leider habe ich die axMSComm-Komponente nicht um es zu testen):
            <pre>
            //Initalisierung der Ersten Relaikarte
            axMSComm1.Output = (byte)outbuf1;
            axMSComm1.Output = (byte)outbuf2;
            axMSComm1.Output = (byte)outbuf3;
            axMSComm1.Output = (byte)outbufgesamt;
            </pre>
            Du könnest auch von Anfang an den Datentyp byte verwenden statt integer

            Comment

            Working...
            X