Announcement

Collapse
No announcement yet.

Basic-Code in Delphi-Code - COM-Schnittstelle

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

  • Basic-Code in Delphi-Code - COM-Schnittstelle

    Moin,
    ich habe eine 8-Port-Relaiskarte gekauft, die per COM-Schnittstelle programmiert wird.
    Leider ist nur ein BASIC-Beispiel dabei, welches die Programmierung zeigt.

    Kann mir jemand diesen Code in Delphi umsetzen? Ich arbeite mit Delphi 7.

    Wäre eine super Sache, wenn mir da einer bei helfen könnte..

    Code wie folgt:

    Hinweis: Das Beispiel soll nur eine grobe Anleitung darstellen und zeigt nicht die Verwendung aller Kommandos.

    CLS : CLEAR
    DIM inbuf(800)
    DIM outbuf(8)
    OPEN "com2: 19200,n,8,1,bin,cs,ds" FOR RANDOM AS # 1

    ---INTERRUPT SE RIAL INTERFACE ON---
    COM(2) ON
    ON ERROR GOTO BADCOM
    ON COM(2) GOSUB GETFRAME
    ---INITIALIZE RELAIS BOARD---
    PRINT "INITIALIZE BOARD"
    outbuf(O) = 1: outbuf(1) = 1: outbuf(2) = 0: GOSUB sendframe
    FOR delay = 1 TO 1000000: NEXT: CLS

    ---SWITCH RELAIS---
    teststart:
    r = 1
    rt:
    outbuf(O) = 3: outbuf(1) = 1: outbuf(2) = r: GOSUB sendframe
    FOR delay = 1 TO 1000000: NEXT: CLS
    r = r * 2: IF r < 256 THEN GOTO rt
    GOTO teststart

    ---SERIAL COMMUNICATION---
    ---READ 4 BYTE DATAFRAME----

    GETFRAME:
    inbuf(bz) = ASC(lNPUT$(l, # 1))
    bz = bz + 1

    IF bz = 4 THEN GOTO checkframe
    RETURN
    ---CHECK VALIDllY---
    checkframe:
    ERROR$ = "ERROR"
    IF inbuf(O) XOR inbuf(1) XOR inbuf(2) = inbuf(3) THEN ERROR$ = "OK"
    bz = 0: PRINT"RECEIVED:";" ";inbuf(0);" ";inbuf(1);" "; inbuf(2);" "; inbuf(3); " "; ERROR$
    PRINT "-------------------------------------------': RETURN

    ---SEND 4 BYTE DATAFRAME---

    sendframe:
    outbuf(3) = outbuf(0) XOR outbuf(1) XOR outbuf(2) send$ = CHR$(outbuf(0)) + CHR$(outbuf(1)) + CHR$(outbuf(2)) + CHR$(outbuf(3))
    PRINT # 1, send$
    PRINT "TRANSMITTED: ";" "; outbuf(0);" "; outbuf(1);" "; outbuf(2);" "; outbuf(3)
    RETURN

    '****************** ERROR HANDLER *************
    BADCOM:
    PRINT "- DATA ERROR !"
    RESUME
    RETURN

    ende:
    END

    So, hoffe ich habe alles richtig eingescannt und korrigiert..
    RW

  • #2
    Schau dir mal <a href="http://sourceforge.net/projects/tpapro">AsyncPro</a> an. Mit hilfe dieser Komponenten wird der Zugriff auf Serielle-Schnittstellen in einer Komponente gekapselt

    Comment


    • #3
      Moin,
      die Kompo habe ich mir heruntergeladen, jedoch ist meine Frage eigentlich, wie ich den Basic-Code interpretieren soll. Was passiert denn in dem Code?

      In Delphi habe ich bereits mittels einer Komponente die COM-Schnittstelle von einem Renncomputer (Carrerabahn) ausgelesen - jedoch immer nur ausgelesen. Nun muss ich ja scheinbar was schreiben, damit eine der 8 Ports geöffnet/geschlossen wird.

      Hintergrund ist, dass ich per Chipkartenleser ein Guthaben auf einer Karte habe. Wenn dieses Guthaben erschöpft ist, dann muss die jeweilige Spur den Bahnstrom abschalten. Dies soll über die Relaisplatine erfolgen, welche eben 8 Anschlüsse besitzt. Und dies soll per COM-Schnittstelle / Befehl erfolgen.

      Das obige Basic-Beispiel soll dies am Beispiel zeigen.

      Kannst du oder jemand anders mir da helfen??

      Wäre super..
      Schorsc

      Comment


      • #4
        Hi Schorsch,
        also ich würde Dir abraten, im Sekundentakt die Chipcard zu beschreiben. Da solltest Du am Konzept was ändern.
        Bei der Anleitung der Relaiskarte müsste ausser den Basic Beispielen noch etwas über die grundsätzliche Programmierung stehen. Wird ein Byte gesendet, in welchem jedes Bit einen Kanal darstellt?
        Kannst du die Ausschnitte der Anleitung scannen und hier veröffentlichen oder sende mir mal eine mail.
        michael at koecherweb dot de

        cu Michae

        Comment


        • #5
          Also hier die entsprechenden Kapitel aus der Beschreibung:

          4. Funktionsweise und praktisches Arbeiten mit der Relaisplatine

          4.1 Ansteuerung der Relaisplatine - serielle Datenübertragung
          Die Datenübertragung vom übergeordneten Steuercomputer zur ersten Relaisplatine sowie zwischen den Relaisplatinen erfolgt gemäß RS232-Standard mit 19200 Baud, 8 Datenbits je Byte, ohne Paritätsbit, mit einem Stopbit und ohne Handshake.
          Auf jeder Relaisplatine arbeitet ein Mikrocontroller, welcher serielle Kommandodaten empfängt, auswertet und gegebenenfalls weiterleitet. Die Kommandos werden vom übergeordneten Steuercomputer (z.B. PC) erzeugt. Auf jedes ausgeführte Kommando gibt der RelaisplatinenController eine Antwort.
          Kommandos und Antworten bestehen jeweils aus einer Folge von 4 Bytes.

          Reloisplofine 8-foch seriell

          Deutsch

          Diese nennen wir nachfolgend auch Rahmen oder Frame.

          Rahmenaufbau:

          Byte 0 Kommando

          Byte 1 Platinenadresse

          Byte 2 Daten

          Kommando 0 - NOP
          Hinweis: Beachten Sie, daß dieses Kommando eine Fehlermeldung (CMD=255) als Antwort erzeugt.
          Das NOP-Kommando kann für Prüfzwecke verwendet werden.

          Byte 3 Prüfsumme (XOR)

          Jede Relaisplatine wird über eine Nummer adressiert. Die Nummer der Platine ergibt sich bei der Initialisierung (siehe unten) automatisch aus der Lage der platinen im seriellen Ring. (siehe Bild 1).

          Kommando 1 - Initialisierung
          Die Relaisplatine übemimmt die Adresse im Rahmen als die nun eigene. Im Antwortrahmen gibt der Info-Wert Auskunft über die Version der Mikrocontroller-Software.
          Nach Absenden des Antwortrahmens erzeugt der Controller ein Initialisierungskommando mit einer um 1 erhöhten Adresse und gibt dieses an das nachfolgende Board (bzw. zurück an den Steuercomputer im Einzelbetrieb). Der Steuercomputer erhält also bei N angeschlossenen Relaisboards N+ 1 Antwortrahmen. Der an die erste Relaisplatine übergebene Adreßwert muß immer 1 sein.

          Hinweis: Prinzipbedingt ergeben sich bei der Kaskadierung mehrerer Relaisplatinen Datenlaufzeiten und zeitliche Unterschiede in der Ausführung der Schaltvorgänge an den verketteten Platinen.

          4.2 Weiterleiten von Kommandos
          Der Controller einer Relaisplatine führt in der Regel nur Kommandos aus, die an ihn adressiert sind (Ausnahmen siehe Initialisierung und Broadcasting). Andere Kommandos sendet er nach der Prüfung auf Übertragungsfehler unverändert weite[

          Kommandos 2 und 3 - Ports setzen und lesen
          Diese Kommandos beziehen sich auf die Relais der Platine. Bit 0 im Datenwert korrespondiert mit Relais 1 (Klemme KL 1), Bit 1 mit Relais 2 (Klemme KL2) usw.

          4.3 Prüfung auf Übertragungsfehler
          Die Prüfsumme in Byte 3 ergibt sich jeweils aus der Exklusiv-Oder-Verknüpfung (XOR) von Byte 0, Byte 1 und Byte 2. Stellt der Relaisplatinenprozessor anhand der Prüfsumme einen Fehler im empfangenen Rahmen fest, sendet er eine 4 Byte lange Fehlermeldung:
          255 - eigene Adresse - x - neue Prüfsumme.
          Der fehlerhafte Rahmen gelangt nicht zur Ausführung bzw. Weiterleitung.

          Kommandos 4 und 5 - Optionen setzen und lesen
          Jeder Relaisplatinencontroller berücksichtigt bei der Ausführung von Broadcastkommandos folgende Optionen:

          Option "broadcast enabled" (Voreinstellung EIN). Ist diese Option ausgeschaltet, führt der Platinencontroller keine Broadcasts aus und gibt diese nur weiter an nachfolgende Platinen.

          4.4 Broadcasting
          Ein Kommandorahmen mit dem Adreßwert 0 gilt als Broadcast ("Rundfunk - an alle") und wird von jeder Relaisplatine ausgeführt. (Ausnahme siehe unten). Nach Ausführung sendet der . Platinencontroller zunächst die entsprechende Antwort. Anschließend regeneriert er das Broadcast Kommando für die nachfolgende Platine.

          Option "block broadcast" (Voreinstellung AUS). Ist diese Option eingeschaltet, sendet der Platinencontroller statt des Originalbroadcasts ein NOP-Kommando an die nachfolgende Platine. Für den Optionswert in den Kommandos 4 und 5 ergeben sich folgende Kombinationen:

          4.5 Kommandos
          Auf jedes ausgeführte Kommando sendet der Relaisplatinencontroller einen Antwortrahmen: invertierte Kommandokennung - eigene Adresse - Daten - neue Prüfsumme

          Wert Ausführen von Broadcasts Blockieren von Broadcasts
          0 nein nein
          1 (Voreinstellung) ja nein
          2 nein ja
          3 ja ja

          Kommandoliste
          Folgende Kommandos sind definiert (x steht jeweils für "ohne Bedeutung"):

          eMD Bedeutung
          0 NO OPERATION - keine Aktion (NOP) 1 SETUP - Initiolisierung
          2 GET PORT - Schaltzustände abfragen 3 SET PORT - Relais schalten
          4 GET OPTION - Optionen abfragen 5 SET OPTION - Optionen setzen

          Kommandorahmen
          0 - Adr. - x - XOR I - Adr. - x - XOR 2 - Adr. - x - XOR
          3 - Adr. - Daten - XOR 4 - Adr. - x - XOR
          5 - Adr. - Opt. - XOR

          Antwort
          255 - Adr. - x - XOR 254 - Adr. - Info - XOR 253 - Adr. - Daten - XOR 252 - Adr. - x - XOR 251 - Adr. - Opt. - XOR 250 - Adr. - x - XOR

          5. Programmierung

          Programmierung unter WINDOWS
          Im Lieferumfang der Relaisplatine befindet sich keine Software! Wenn Sie die Ansteuerung der Relaisplatine nicht selbst programmieren wollen oder können, empfehlen wir Ihnen die als Zubehör erhältliche Windows-Software Lee.

          Hoffe, sind keine Fehler drin, da ich per OCR gescannt habe.

          Michael, ich habe diese dir per E-Mail als rtf-Anhang nochmal gesendet.

          Also, hoffe könnt was mit anfangen.

          Schorsc

          Comment


          • #6
            schick mir mal eine mail ich hab da glaub ich eine DLL die sollte dir [email protected]
            PS.wo hast du die Karte denn her

            Comment

            Working...
            X