1、Beschreibung der Schnittstelle zum asynchronen Aufruf vonFunktionen in DLLsaus dem IEC-Programm.1. Allgemeines1.1. berblickDie Echtzeiterweiterung der Fa. 3S fr WindowsNT4.0 besteht aus einem Kernelteil und einen Applikationsteil. Der Kernelteil ist als Kernelmodetreiber implementiert, der u.a. als
2、Taskscheduler arbeitet. Mit dem Programmiersystem CoDeSys knnen Tasks programmiert werden, die als Echtzeittasks abgearbeitet werden. In diesen Tasks knnen nur echtzeitfhige“ Aufgaben (speziell heit das, keine Aufrufe von Funktionen aus dem Win32-Api) erledigt werden.Der Applikationsteil ist als Sys
3、temservice implementiert, d.h. hier knnen alle Aufgaben, die den vollen Zugriff auf das Win32-Api von Windows erfordern, erledigt werden.Erwnscht ist, diese Aufgaben aus Echtzeittasks heraus anzustoen. Dazu wurde eine Schnittstelle geschaffen, die es erlaubt, asynchron zu den Echtzeittasks Funktione
4、n in externen Modulen (DLL) aufzurufen.Im IEC-Programm (mit CoDeSys erstellt) kann durch den Aufruf eines Bibliotheksfunktionsbausteins der Systemservice dazu veranlat werden, eine DLL-Funktion aufzurufen (der Name der Funktion wird dem Baustein bergeben).Die Ausfhrung der Funktion wird vom Systemse
5、rvice in einen eigenen Thread verlagert, so da mehrere asynchrone Aufrufe gleichzeitig“ erledigt werden knnen, und eine Zeitkontrolle der Aufgaben erfolgen kann.1.2. 1.2 Welche DLLs werden geladen?Einzuhngende Dlls werden dem System durch jeweils einen Eintrag in der Registry bekanntgegeben:InHKEY_L
6、OCAL_MACHINESoftware3S Smart Software SolutionsCodesys SPRTPLCExternal DLLsmu es fr jede einzuhngende Dll einen Eintrag (Wert, Typ Zeichenfolge) der Form,Dllx, wobei x eine laufende Nummer (mit 0 beginnend) ist,geben.Alle diese Dlls (egal, wieviele) werden mit Start System geladen und bei Stop Syste
7、m entladen.Die Funktionen der Dlls werden im Kontext eines eigenen Threads unter WinNT32-Api aufgerufen.Beispiel fr einen Eintrag:Dll0 d:WorkspaceAsynchDllAsynchDll.dllEine DLL kann mit komplettem Pfad (dann wird genau diese benutzt) oder nur mit ihrem Dateinamen (dann sucht Windows in der Reihenfol
8、ge des aktuellen Suchpfads nach der Datei) spezifiziert werden.2. Die Schnittstelle und das ToolkitDie Funktionen der DLL knnen durch den Bibliotheksfunktionsbaustein DllCall aufgerufen werden.Die Eingabeparameter des Bausteins sind :bEnable Bei einem Wechsel von 0 auf 1 wird der Job gestartet.szFun
9、ktionName Der Name der aufzurufenden Funktion, so wie sie im Quelltext der DLL heit.ulSizeIn Gre des Inputbuffers in Byte.ulSizeOut Gre des Outputbuffers in Byte.pAdrIn Adresse der Eingabedaten (mglichst eine Struktur in IEC).pAdrOut Adresse der Ausgangsdaten (mglichst eine Struktur in IEC).Der Ausg
10、abeparameter des FB ist iStatus.iStatus kann die Werte:STATUS_NOTENABLED,STATUS_PROCESSING,STATUS_READY,STATUS_ERROR,STATUS_TIMEOUT,STATUS_EXCEPTION,STATUS_USERTERMINATEDannehmen.Der FB mu zyklisch aufgerufen werden, damit Flanken erkannt werden, und der Status des Auftrags stets aktualisiert werden
11、 kann.Der FB DllCall befindet sich in der Bibliothek DllCall.lib.Die Bibliothek DllCall.lib sttzt sich auf die externe Bibliothek SysLibSystemCall.lib, die im Bibliotheksverwalter unter CoDeSys vor der DllCall.lib eingefgt werden mu.Beide Bibliotheken sind Bestandteile des Toolkits.Die Funktionen de
12、r Dll, die vom Echtzeitkernel aus asynchron aufgerufen werden, men alle folgendes Format haben:typedef BOOL (_cdecl *PFCUSTOMDLLFUNCTION)(char* pBufferIn, int iSizeIn, char* pBufferOut, int iSizeOut);Der Rckgabewert der Funktion bedingt, ob ein STATUS_ERROR (Rckgabewert FALSE) oder ein STATUS_READY
13、von DllCall zurckgeliefert wird.Da die Kommunikation und der Austausch von Ein-/Ausgabedaten mit den DLL-Funktionen ber Sharedmemorykanle erfolgt, darf in der jetzigen Implementation die Summe von Ein- und Ausgangsdaten 100 Bytes nicht bersteigen. Der Name der Funktion darf maximal 80 Zeichen lang sein.