Probleme mit FDL Schnittstelle und WinProc.

Jochen Kühner

Level-3
Beiträge
4.291
Reaktionspunkte
527
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ich versuche gerade die FDL Programmierschnittstelle welche ja auch libnodave verwendet um über S7Onlinex.dll auf die PLCs zuzugreifen direkt in csharp zu realisieren.
Laut Dokumentation, ist jedoch die Implementierung von libnodave nicht richtig, da unter Windows nur im Asynchronen Modus gearbeitet werden darf.
Jedoch hab Ich Probleme, das wenn Ich versuche die Schnittstelle im Asynchronen Modus benutze, Ich bei mir keine Telegramme vom Typ WM_SINEC in der WinProc ankommen.
Hat das jemand schon mal gemacht und dazu ein paar Tips?
 
Hallo Jochen,

> Laut Dokumentation,...
Welche Dokumentation meinst du, bzw. welche hast du ?

> ist jedoch die Implementierung von libnodave nicht richtig ...
Das habe ich auch schon mal von jemandem gehört, er konnte oder wollte mir aber nicht konkret sagen was da nicht stimmt.

Fakt ist, wenn Step7 z.B. eine VAT online hat und du machst was mit Libnodave über S7online, dann fliegt die VAT Verbindung raus.
Das müsste so nicht sein, es könnten sicher mehrere Verbindungen über S7online gleichzeit offen sein. Step7 schaft das ja auch.

> da unter Windows nur im Asynchronen Modus gearbeitet werden darf.
Dass glaube ich so nicht, ich denke auch synchron sollte gehen.

Frage:
Hast du die die Header Datei fdl_rb.h ?
Wenn nein könnte ich die dir zukommen lassen.

INT WINAPI SCP_open ( CHAR *);
INT WINAPI SCP_close ( INT );
INT WINAPI SCP_send ( INT, USHORT, char *);
INT WINAPI SCP_receive ( INT, SHORT, SHORT *, SHORT, CHAR *);
INT WINAPI SetSinecHWndMsg( INT, HANDLE, ULONG );
INT WINAPI SetSinecHWnd( INT,HANDLE);
INT WINAPI SCP_get_errno( VOID );

Darin sind die o.g. DLL Aufrufe definiert. In neueren DLL gibt es allerdings auch noch andere Aufrufe.

Wie soll die DLL wissen, dass du auf eine WM_SINEC Message wartest ?
Ich vermute da müsste die "Session" anders geöffnet werden ...

Aber wenn du irgendwas rausfindest wäre das natürlich interessant.
Speziell ein C# Treiber direkt für S7online wäre interessant.

mfG. klaly
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Jochen,

> Laut Dokumentation,...
Welche Dokumentation meinst du, bzw. welche hast du ?

> ist jedoch die Implementierung von libnodave nicht richtig ...
Das habe ich auch schon mal von jemandem gehört, er konnte oder wollte mir aber nicht konkret sagen was da nicht stimmt.

Fakt ist, wenn Step7 z.B. eine VAT online hat und du machst was mit Libnodave über S7online, dann fliegt die VAT Verbindung raus.
Das müsste so nicht sein, es könnten sicher mehrere Verbindungen über S7online gleichzeit offen sein. Step7 schaft das ja auch.

> da unter Windows nur im Asynchronen Modus gearbeitet werden darf.
Dass glaube ich so nicht, ich denke auch synchron sollte gehen.

Frage:
Hast du die die Header Datei fdl_rb.h ?
Wenn nein könnte ich die dir zukommen lassen.

INT WINAPI SCP_open ( CHAR *);
INT WINAPI SCP_close ( INT );
INT WINAPI SCP_send ( INT, USHORT, char *);
INT WINAPI SCP_receive ( INT, SHORT, SHORT *, SHORT, CHAR *);
INT WINAPI SetSinecHWndMsg( INT, HANDLE, ULONG );
INT WINAPI SetSinecHWnd( INT,HANDLE);
INT WINAPI SCP_get_errno( VOID );

Darin sind die o.g. DLL Aufrufe definiert. In neueren DLL gibt es allerdings auch noch andere Aufrufe.

Wie soll die DLL wissen, dass du auf eine WM_SINEC Message wartest ?
Ich vermute da müsste die "Session" anders geöffnet werden ...

Aber wenn du irgendwas rausfindest wäre das natürlich interessant.
Speziell ein C# Treiber direkt für S7online wäre interessant.

mfG. klaly

Doku: http://lci.cvb.wikispaces.net/file/view/FDL+Programming+Interface.pdf

S7online direkt in Csharp funzt, aber eben nur so wie in libnodave und nicht mit der winproc! Das was ich programmiert habe kannst in meiner connection lib sehen, aber bis jetzt ist nur der Verbindungsaufbau drin, der rest kommt noch (wenn ich das mit der winproc geloest grig!)

Die message sollte wenn ich mein festerhandle an das verbindungshandle von s7onlinx gemeldet habe immer kommen wenn neue daten da sind!
 
Wahhh, es geht.

Ich hab einfach SetSinecHWnd durch SetSinecHWndMsg ersetzt, und als Konstante für die Message WM_SINEC mitgegeben.
Code:
        private const int WM_USER = 0x0400;
        private const int WM_SINEC = WM_USER + 500;
Nun hat er zumindest den Code da durchlaufen... Also mal weiterschauen...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Jochen,

> S7online direkt in Csharp funzt, ...
> Das was ich programmiert habe kannst in meiner connection lib sehen

Wo kann ich deine "aktuelle" connection lib finden ?

mfG. klaly
 
Zurück
Oben