Ereignisgesteuertes Lesen
Aufgabe
In der SPS befinden sich 7 globale Variablen. Jede SPS-Variable ist von einem anderen Datentyp. Die Werte der Variablen sollen auf möglichst effektive Weise ausgelesen und der Wert mit Zeitstempel auf einer Form in Visual Basic dargestellt werden.
Beschreibung
In dem Load-Ereignis der Form wird mit der Methode AdsReadVarConnectEx() eine Verbindung zu jeder SPS-Variablen hergestellt. Der Handle dieser Verbindung wird in einen globalen Array abgelegt.
Der zweite Parameter der Methode AdsReadVarConnectEx() gibt die Art des Datenaustausches an. Hier wurde ADSTRANS_SERVERONCHA gewählt. Dadurch wird der Wert der SPS-Variable nur dann übertragen, wenn dieser sich in der SPS geändert hat (siehe Datentyp ADSOCXTRANSMODE). Über den dritten Parameter wird angegeben das alle 100ms die SPS überprüft, ob sich die entsprechende Variable geändert hat.
Bei einer Änderung der SPS-Variablen wird das Ereignis AdsReadConnectUpdateEx() aufgerufen. Als Parameter wird der Zeitstempel, der Handle, der Wert und eine Referenz auf das Control, in dem der Wert angezeigt werden soll übergeben.
In dem Unload-Ereignis werden die Verbindungen mit der Methode AdsDisconnectEx() wieder aufgelöst. Dieses sollten Sie unbedingt beachten, da jede Verbindung, die mit AdsReadVarConnectEx() hergestellt wurde, Ressourcen verbraucht.
Setzen Sie außerdem die CycleTime auf angemessene Werte, da zu viele Schreib / Leseoperationen das System so stark auslasten kann, dass die Bedieneroberfläche stark verlangsamt wird.
Visual Basic 6 Programm
Option Explicit
Dim hConnect(0 to 6) As Long
Private Sub Form_Load()
Dim nErr As Long
nErr = AdsOcx1.AdsReadVarConnectEx(".PLCVarBoolean", ADSTRANS_SERVERONCHA, 100, hConnect(0), lblBoolean)
If (nErr > 0) Then Call MsgBox("Error AdsReadVarConnectEx -> .PLCVarBoolean: " & nErr)
nErr = AdsOcx1.AdsReadVarConnectEx(".PLCVarInteger", ADSTRANS_SERVERONCHA, 100, hConnect(1), lblInteger)
If (nErr > 0) Then Call MsgBox("Error AdsReadVarConnectEx -> .PLCVarInteger: " & nErr)
nErr = AdsOcx1.AdsReadVarConnectEx(".PLCVarLong", ADSTRANS_SERVERONCHA, 100, hConnect(2), lblLong)
If (nErr > 0) Then Call MsgBox("Error AdsReadVarConnectEx -> .PLCVarLong: " & nErr)
nErr = AdsOcx1.AdsReadVarConnectEx(".PLCVarDouble", ADSTRANS_SERVERONCHA, 100, hConnect(3), lblDouble)
If (nErr > 0) Then Call MsgBox("Error AdsReadVarConnectEx -> .PLCVarDouble: " & nErr)
nErr = AdsOcx1.AdsReadVarConnectEx(".PLCVarSingle", ADSTRANS_SERVERONCHA, 100, hConnect(4), lblSingle)
If (nErr > 0) Then Call MsgBox("Error AdsReadVarConnectEx -> .PLCVarSingle: " & nErr)
nErr = AdsOcx1.AdsReadVarConnectEx(".PLCVarString", ADSTRANS_SERVERONCHA, 100, hConnect(5), lblString)
If (nErr > 0) Then Call MsgBox("Error AdsReadVarConnectEx -> .PLCVarString: " & nErr)
nErr = AdsOcx1.AdsReadVarConnectEx(".PLCVarByte", ADSTRANS_SERVERONCHA, 100, hConnect(6), lblByte)
If (nErr > 0) Then Call MsgBox("Error AdsReadVarConnectEx -> .PLCVarByte: " & nErr)
End Sub
Private Sub AdsOcx1_AdsReadConnectUpdateEx(ByVal dateTime As Date,
ByVal nMs As Long,
ByVal hConnect As Long,
ByVal data As Variant,
Optional ByVal hUser As Variant)
hUser.Caption = ("Date Time: " & dateTime & "," & nMs & " Data: " & data)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim nIndex As Long
For nIndex = 0 To 6
Call AdsOcx1.AdsDisconnectEx(hConnect(nIndex))
Next
End Sub
SPS-Programm
VAR_GLOBAL
PLCVarBoolean : BOOL;
PLCVarInteger : INT;
PLCVarLong : DINT;
PLCVarDouble : LREAL;
PLCVarSingle : REAL;
PLCVarString : STRING(10);
PLCVarByte : BYTE;
END_VAR
PROGRAM MAIN
VAR
;
END_VAR
Sprache / IDE | Beispielprogramm auspacken |
---|---|
Visual Basic 6 |