ASCII Strings über GPIO COM-Port

2018-04-12
2019-07-03
  • McNugget2000 - 2018-04-12

    Hallo allerseits,

    ich steige gerade in die Programmierung des Raspberry Pi in Codesys ein.

    Die runtime ist auf dem Pi installiert. Demoprogramme von Codesys kann ich ausführen.

    Ich möchte gerne eine Platine einbinden, die direkt als HAt aufgesetzt wird.
    http://pthat.com/

    Noch habe ich die Platine nicht.

    Der HAT wird laut Hersteller über ASCII-Strings angesprochen.
    http://pthat.com/index.php/command-set/

    Die Befehle sehen dann beispielsweise so aus:
    I00CX125000.000429496729511110001001*

    Was ich bereits gemacht habe:
    1.
    Eintrag für die Serielle Schnittstelle im SPS Config file:
    /etc/CODESYSControl.cfg

    [SysCom]
    Linux.Devicefile=/dev/ttyAMA

    1. die Serielle Schnittstelle wurde in der Raspberry-Pi Config für die Login-Shell deaktiviert aber als Hardware aktiviert.

    Ich verstehe nur noch nicht, was ich nun in meinem Programm einbinden/definieren muss, um die Schnittstellenkonfiguration und die Steuerstrings zu übertragen.
    Das sollen die Schnittstellenpaprameter sein.
    Standard Speed High Speed
    BaudRate = 115200
    Parity = None
    StopBits = One
    DataBits = 8
    Handshake = None

    Wie/wo übergebe ich die?

    Wie steuere ich, wann ein String gesendet wird?

    Wie kann ich die Antwortstrings auswerten?

    Wie spreche ich zudem die der GPIO-Pins an, bzw. kann sie als Eingänge lesen?
    Ich verstehe die Adressierung noch nicht so ganz.

    Es wäre ganz toll, hier Unterstützung zu bekommen.

    Vielen lieben Dank

    Gruss

    McNugget

     
  • eschwellinger

    eschwellinger - 2018-04-12

    Hallo,

    seit 3.5SP11 musst solltest du das in /etc/CODESYSControl_User.cfg
    eintragen.
    also in CODESYSControl.cfg entfernen die Sektion und in CODESYSControl_User.cfg den vorhanden Eintrag anpassen.

    [SysCom]
    Linux.Devicefile=/dev/ttyAMA

    zu dem seriellen lesen es gibt ein Store Beispiel:
    https://store.codesys.com/serial-com.html
    Am besten direkt über das CODESYS Einkaufwagen Symbol installieren und dann enthält diese Applikation zwei Arten wie man es machen kann
    1. CAASerialCom
    2.Syscom
    je nach Gusto eines davon adaptieren an deine Applikation

    Grüße
    Edwin

    IMG: serial.jpg

     
  • eschwellinger

    eschwellinger - 2018-04-12

    dann noch GPIO's definieren und mappen hier:

    IMG: GPIOMappen.jpg

    IMG: GPIOdefinieren.jpg

     
  • McNugget2000 - 2018-04-12

    Hallo Edwin.

    Vielen Dank für die schnelle und gute Hilfe, die Screenshots helfen mir sehr.

    Kannst du mir sagen, warum das alles beim Ausführen so aussieht?

    Ich habe Deklaration und Anweisungsteil umkopiert in eine Funktion mit Boolscher Ausgabe.
    Diese rufe ich auch im PLC_PRG auf.

    Aber irgendwie scheint es keine Aktualwerte, sondern nur Fragezeichen zu geben...

    Vielen Dank auf jeden Fall schon mal bis hier.

    Gruss

    McNugget

    IMG: codesys.JPG

     
  • McNugget2000 - 2018-04-20

    Mittlerweile arbeite ich direkt auf der Hardware.

    An die GPIO-Pins ist ein Pegelwandler auf USB angeschlossen.

    Mit einem Terminalprogramm konnte ich bereits strings senden. Also sollte von der Hardwareseite alles stimmen.

    Was mit neu war, war die Info, dass sich die Portadressierung im Pi3 von den anderen Versionen unterscheidet.

    In die /etc/CODESYSControl_User.cfg

    ist jetzt folgendes eingestragen:

    [sysCom]
    Linux.Devicefile=dev/ttyS
    [CmpBlkDrvCom]
    Com.0.Name=MyCom
    Com.0.Baudrate=115200
    Com.0.Port=3
    Com.0.EnableAutoAdressing=1

    Wie und wo kann ich die Com-Porteinstellungen definieren?

    Wie sage ich in Codesys, dass sich die Ausgabe auf den ComPort MyCom bezieht?

    Gruss

    McNugget

     
  • eschwellinger

    eschwellinger - 2018-04-20

    Hallo,

    du brauchst nur:
    [sysCom]
    Linux.Devicefile=dev/ttyS

    das andere bitte nicht aktivieren.
    Baudrate usw wir ja alles im IEC Projekt angegeben.

    Grüße
    Edwin

    IMG: SysComExample.jpg

     
  • McNugget2000 - 2018-04-20

    Hallo Edwin.

    Vielen Dank. Jetzt läuft die Kommunikation.

    Ich habe das SysComLibExample einfach mal in mein Projekt einkopiert. Grundsätzlich läuft es.

    Allerdings bekomme ich es nicht hin, dass ich einen String nur einmal ereignisgesteuert über die COM-Schnittstelle übergebe.
    Der String wird immer endlos wiederholt.

    Habe es jetzt versucht, die "Str" Variable und "bWriteCom" global zu definieren und "bWriteCom" per R_trig zu triggern. da kommt der String immer noch etwa 50 Mal.

    Wie kann ich es hinbekommen, meinen String nur einmal ereignisgesteuert auszugeben?

    Vielen Dank schon mal.

    Gruß

    McNugget

     
  • McNugget2000 - 2018-04-24

    Kann mir irgendwer auf die Sprünge helfen?

    Vielen Dank

    gruss

    McNugget

     
  • McNugget2000 - 2018-05-08

    Leider habe ich das Problem immer noch. Kann mir jemand einen Wink mit dem Zaunpfahl geben?

    Wie kann ich SCII-Codes ereignisgesteuert ausgeben?

    Vielen Dank schon mal für die Hilfe.

    Gruss

    McNugget

     
  • McNugget2000 - 2018-07-16

    Könnte mir jemand helfen?

    Vielen Dank

    McNugget

     
  • skutsch - 2019-07-03

    Hallo McNugget,

    stand heute auch vor dem Thema das ich eine Serielle Kommunikation am RPI benötigte und habe mal das 3S Beispiel Projekt für meine Bedürfnisse angepasst.

    zu den Änderungen:
    - Externe Variablen hinzugefügt zum Steuern der Kommunikation
    - nach einem sende Befehl werden eine bestimmte Anzahl an Bytes gelesen ... danach wird der serial Port wieder geschlossen.

    im Anhang Bilder der Variablen und des modifizierten Programmes

    VG Stefan

    Edit : Jetzt erst gesehen das der letzte post schon etwas her ist ... aber anderen wird wohl helfen auf den richtigen weg zu kommen

    IMG: RS232Communication_2_2.png

    IMG: RS232Communication_1_2.png

     

Log in to post a comment.