Draco Malfoy
Well-known member
- Beiträge
- 1.168
- Punkte Reaktionen
- 80
-> Hier kostenlos registrieren
Hallo Forum!
Ich habe derzeit ein folgendes DICKES Problem, daß ich versuche den Aufbau von Modbus TCP/IP Verbindung aus folgendem Beckhoff Beispiel (Modbus Client, zum Download am Ende des Artikels) http://infosys.beckhoff.com/index.p...tcplccontrol/html/tcplcctrl_editorcfc.htm&id= zu entknobeln. Leider, absolut erfolglos, wobei mir scheint, daß die "coolen und lässigen" Beckhof-Programmierer dieses Ergebnis auch so beabsichtigt haben.
Ich verstehe in diesem Programmcode rein GAR NICHTS. Mangels IRGENDWELCHER Kommentare, muss man hier wohl jeden einzelnen Byte raten und back-ingeneeren. Mich kotzt das absolut an, daß diese besch* Beckhoff-Informatiker sich nicht einmal die Mühe gegeben haben, ihren Gekritzel wenigstens mit vernünftigen Kommentaren zu versehen. Ich raffe es nicht, was hier passiert. Kann mir das jemand erklären, wie der Aufbau einer Modbus TCP/IP Verbindung unter Beckhoff TwinCat funktioniert ?
Ein Koststück, aus dem Code:
IF NOT bBusy AND fb_Flanke.Q THEN
bBusy:=TRUE;
bError:=FALSE;
nErrId:=0;
cbRead:=0;
i:=10;
ReqBuf[0]:=nUnitID;
ReqBuf[1]:=23;
ReqBuf[3]:=WORD_TO_BYTE(nMBReadAddr AND 16#FF);
ReqBuf[2]:=WORD_TO_BYTE(ROR(nMBReadAddr,8) AND 16#FF);
ReqBuf[5]:=WORD_TO_BYTE(nReadQuantity AND 16#FF);
ReqBuf[4]:=WORD_TO_BYTE(ROR(nReadQuantity,8) AND 16#FF);
ReqBuf[7]:=WORD_TO_BYTE(nMBWriteAddr AND 16#FF);
ReqBuf[6]:=WORD_TO_BYTE(ROR(nMBWriteAddr,8) AND 16#FF);
ReqBuf[9]:=WORD_TO_BYTE(nWriteQuantity AND 16#FF);
ReqBuf[8]:=WORD_TO_BYTE(ROR(nWriteQuantity,8) AND 16#FF);
ReqBuf[10]:=WORD_TO_BYTE(nWriteQuantity*2);
Result:=MEMCPY(ADR(ReqBuf[11]),pSrcAddr, cbSrcLength);
IF SwapWORD THEN
FOR Swap:=0 TO ReqBuf[10]-1 BY 2 DO
Merker:=ReqBuf[11+Swap];
ReqBuf[11+Swap]:=ReqBuf[12+Swap];
ReqBuf[12+Swap]:=Merker;
END_FOR
END_IF
END_IF
Was machen diese verdammten schleifen hier ? Welchen Sinn hat es, was die tun ??
WARUM schreibe ich in den Request Buffer irgendwelche Angaben über Länge und Adresse der Daten, wenn der Funktionsbaustein es gar nicht fordert ??
Kurzum: ich KOTZE und hoffe, daß irgenjemand es mir in vernünftiger Form erklären kann, was die Beckhoff-Informatiker sich da dabei gedacht haben, und WRAUM IN ALLER WELT es nicht einfach so gehen kann, daß ich den die Funktionsbausteine laut deren Spezifikation benutzen kann, ohne irgendwelche IF Schleifen zu fahren, deren Sinn sich mir vollkommen entzieht, und drei verschiedene Funktioonen zu benutzen (fb_Modbus_23, fb_Modbus_4, fb_Modbus_16), von denen nicht einmal für eine einzige erklärt ist, WAS sie denn GENAU tut !
Wäre für jede vernünftige Hilfe dankbar ich komme hier wie gesagt nicht weiter!
Ich habe derzeit ein folgendes DICKES Problem, daß ich versuche den Aufbau von Modbus TCP/IP Verbindung aus folgendem Beckhoff Beispiel (Modbus Client, zum Download am Ende des Artikels) http://infosys.beckhoff.com/index.p...tcplccontrol/html/tcplcctrl_editorcfc.htm&id= zu entknobeln. Leider, absolut erfolglos, wobei mir scheint, daß die "coolen und lässigen" Beckhof-Programmierer dieses Ergebnis auch so beabsichtigt haben.
Ich verstehe in diesem Programmcode rein GAR NICHTS. Mangels IRGENDWELCHER Kommentare, muss man hier wohl jeden einzelnen Byte raten und back-ingeneeren. Mich kotzt das absolut an, daß diese besch* Beckhoff-Informatiker sich nicht einmal die Mühe gegeben haben, ihren Gekritzel wenigstens mit vernünftigen Kommentaren zu versehen. Ich raffe es nicht, was hier passiert. Kann mir das jemand erklären, wie der Aufbau einer Modbus TCP/IP Verbindung unter Beckhoff TwinCat funktioniert ?
Ein Koststück, aus dem Code:
IF NOT bBusy AND fb_Flanke.Q THEN
bBusy:=TRUE;
bError:=FALSE;
nErrId:=0;
cbRead:=0;
i:=10;
ReqBuf[0]:=nUnitID;
ReqBuf[1]:=23;
ReqBuf[3]:=WORD_TO_BYTE(nMBReadAddr AND 16#FF);
ReqBuf[2]:=WORD_TO_BYTE(ROR(nMBReadAddr,8) AND 16#FF);
ReqBuf[5]:=WORD_TO_BYTE(nReadQuantity AND 16#FF);
ReqBuf[4]:=WORD_TO_BYTE(ROR(nReadQuantity,8) AND 16#FF);
ReqBuf[7]:=WORD_TO_BYTE(nMBWriteAddr AND 16#FF);
ReqBuf[6]:=WORD_TO_BYTE(ROR(nMBWriteAddr,8) AND 16#FF);
ReqBuf[9]:=WORD_TO_BYTE(nWriteQuantity AND 16#FF);
ReqBuf[8]:=WORD_TO_BYTE(ROR(nWriteQuantity,8) AND 16#FF);
ReqBuf[10]:=WORD_TO_BYTE(nWriteQuantity*2);
Result:=MEMCPY(ADR(ReqBuf[11]),pSrcAddr, cbSrcLength);
IF SwapWORD THEN
FOR Swap:=0 TO ReqBuf[10]-1 BY 2 DO
Merker:=ReqBuf[11+Swap];
ReqBuf[11+Swap]:=ReqBuf[12+Swap];
ReqBuf[12+Swap]:=Merker;
END_FOR
END_IF
END_IF
Was machen diese verdammten schleifen hier ? Welchen Sinn hat es, was die tun ??
WARUM schreibe ich in den Request Buffer irgendwelche Angaben über Länge und Adresse der Daten, wenn der Funktionsbaustein es gar nicht fordert ??
Kurzum: ich KOTZE und hoffe, daß irgenjemand es mir in vernünftiger Form erklären kann, was die Beckhoff-Informatiker sich da dabei gedacht haben, und WRAUM IN ALLER WELT es nicht einfach so gehen kann, daß ich den die Funktionsbausteine laut deren Spezifikation benutzen kann, ohne irgendwelche IF Schleifen zu fahren, deren Sinn sich mir vollkommen entzieht, und drei verschiedene Funktioonen zu benutzen (fb_Modbus_23, fb_Modbus_4, fb_Modbus_16), von denen nicht einmal für eine einzige erklärt ist, WAS sie denn GENAU tut !
Wäre für jede vernünftige Hilfe dankbar ich komme hier wie gesagt nicht weiter!
Zuletzt bearbeitet: