Serielle Kommunikation mit SysCom. Wie sende ich einen Byte Buffer Array?

Mazzen

Level-2
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
vielleicht kann mir als Anfänger hier jemand zum oben genanten Thema helfen. Ich habe eine Wago 8215 und benutze COM2, also die Serviceschnittstelle für eine serielle Verbindung zu einem ESP32. Ich initialisiere ein Buffer Array und schreibe das auf den Comport:
Code:
// PLC_PRG
xConnect : BOOL:= FALSE;
xStartWriteTest : BOOL:= FALSE;
sWriteByte : array[0..9] of BYTE := [0,1,2,3,4,5,6,7,8,9];

IF xConnect THEN
    hCom := SysComOpen(sPort:= SYS_COMPORT2 , pResult:= ADR(pResult));
    csComSettings.byParity := SYS_NOPARITY;
    csComSettings.byStopBits := SYS_ONESTOPBIT;
    csComSettings.sPort := SYS_COMPORT2;
    csComSettings.ulBaudrate := SYS_BR_19200;
    csComSettings.ulBufferSize := 0;
    csComSettings.ulTimeout := 10;
    cResult := SysComSetSettings(hCom:= hCom, pSettings:= ADR(csComSettings) , pSettingsEx:= 0);
    xConnect := FALSE;
END_IF

IF xStartWriteTest THEN
    dwWritten := SysComWrite(hCom:= hCom, pbyBuffer:= ADR(sWriteByte), ulSize:= SIZEOF(sWriteByte), ulTimeout:= 100, pResult:= ADR(wResult));
    xStartWriteTest := FALSE;
END_IF

Jetzt habe ich erwartet, das auf der anderen Seite (ESP32) das Array genau so geliefert bekomme ([0,1,2,3,4,5,6,7,8,9]), allerdings bekomme ich:
Code:
0xFD 0xFB 0xF9 0xF7 0xF5 0xF3 0xF1 0xEF 0xED 0x0
Auch wenn ich mir ein USB-FTDI Adapter an meinen PC hänge und einen Lauscher (hTerm) starte, sehe ich diesen Buffer. Mache ich hier in Codesys etwas falsch, oder verhält sich die WAGO anders als ich es von anderen seriellen Verbindungen gewohnt bin.
 
Da es sich um ein Wago Gerät handelt, hätte ich es mit den Wago Bibliotheken versucht.
Früher™ zu Zeiten der Firmware 09 hat es mit dieser Deklaration funktioniert
Code:
oServiceInterface    : FbSerialInterface_internal(1);

Dann hatte man eine Instanz für die Bausteine aus der WagoAppCom.
Wenn ich das mit einer aktuellen Firmware (27) teste funktioniert es aber nicht mehr.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Service Schnittstelle muss im WBM auch auf unassigned gestellt werden.
Trotzdem hat es bei mir nicht funktioniert.

Eventuell muss man auch in der CODESYS Konfigurationsdatei des Controllers etwas anpassen.

Aber scheinbar bekommst Du ja ein Austausch zu stande.
Die Daten sehen aus, als wenn nur noch der Pegel invertiert werden müsste.
Eventuell hat Dein ESP da ein Parameter für.
 
Hallo vielen Dank für die Antwort,
nach ein bisschen Suche, habe ich nun doch lieber die original Bibliothek von Wago genommen und eine 750-8212, die dann schon direkt den COM-Port als Gerät in Codesys listet. Ich habe nur noch nicht heraus gefunden, wie ich dann auch mit diesem die Instanz initialisiere. Hat jemand ggf. dazu ein Beispiel?

Code:
PROGRAM PLC_PRG
VAR
    connectionResult: WagoTypes.eResultCode;
    comInstance : WagoAppCom.FbSerialInterface;
    baud: UDINT := 9600;
    databits: USINT := 8;
    paritybits: WagoTypesCom.eTTYParity := 1;
    stopbitsb: WagoTypesCom.eTTYStopBits := 4;
    handle: WagoTypesCom.eTTYHandshake := 0;
    layer: WagoTypesCom.eTTYPhysicalLayer := 1;
END_VAR
-------------------------------------------------
connectionResult := comInstance.OpenAndConfigure(I_Port:=COM1 , udiBaudrate:= baud, usiDatabits:= databits, eParity:= paritybits, eStopbits:= stopbitsb, eHandshake:= handle, ePhysical:= layer);

b1.png
 
Hallo,

läuft bei mir einwandfrei durch (750-8218, Codesys 3.5.19.7, WagoAppCom 1.7.1.2)
1729599035156.png
Habe jetzt nur Deinen Code kopiert und übersetzen lassen. habe hier keinen Controller zum Testen.

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... läuft bei mir einwandfrei durch (750-8218, Codesys 3.5.19.7, WagoAppCom 1.7.1.2)

Habe jetzt nur Deinen Code kopiert und übersetzen lassen. habe hier keinen Controller zum Testen.
Klingt für mich sehr widersprüchlich. Was läuft bei Dir einwandfrei durch? Nur die Compilierung???
 
@Thruser Danke fürs testen. Habs jetzt nochmal in einem neuen Projekt ohne hochladen kompiliert. Auch dort kommen die ganzen (10) Fehlermeldungen.

Codesys V3.5 SP19 Patch 2 64bit
WagoAppCom 1.7.1.2
 
Der Fehler deutet darauf hin, dass RTS_IEC_HANDLE mehrfach im Projekt vorhanden ist.
hcom aus deinem ersten Code wird von Codesys zum Beispiel als RTS_IEC_HANDLE deklariert. Das ist eine STRUCT aus iSysTypes2

Lösche den Code und die Bibliotheken die du nicht verwendest.

Bei mir Läuft der Code auch
1729623414812.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Klingt für mich sehr widersprüchlich. Was läuft bei Dir einwandfrei durch? Nur die Compilierung???
Da der Fehler oben bereits bei der Kompilierung entsteht, habe ich mich auch nur darauf bezogen, daß das kompilieren durchläuft.

Funktion testen, wie von Babustino, konnte ich nicht.

Gruß
 
@Babustino Guten Morgen und danke fürs testen. Ich habe nochmals ein neues Projekt angelegt und nur die WagoAppCom hinzugefügt. Ich habe auch nichts anderes im Code als du... stehe echt auf dem Schlauch.

bib.png
 

Anhänge

OK, musste tatsächlich noch die neue Gerätebeschreibung herunterladen und dann die Version manuell mit Platzerhalterumleitung setzen. Das war ein steiniger Weg :D
Aber: Jetzt funktioniert alles! Vielen Dank an alle und natürlich insbesondere an @Babustino der sich das im Detail angeschaut hat.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

welche Firmware hast Du auf dem Controller.

Wenn ich Dein Projekt öffne bekomme ich die Frage zur Aktualisierung.

z.B. WagoTypesCom, auch ist als Compilerversion 3.5.19.2 eingestellt.

Gruß

Sehe gerade Du hast jetzt einiges aktualisiert.
 
Hallo @Thruser,
mein Controller hat die FW 04.04.03.(26)
Die Option WagoTypesCom kommt auch bei mir, beim Projekt öffnen, jedoch nicht für WagoSysComInterval. Grüße.
 
Zurück
Oben