Beispiel Maschine mit Microsoft Visual Basic 6.0
TwinCAT ADS OCX
TwinCAT besitzt mehrere Programmierschnittstellen, um applikationsspezifische Programme in das System zu integrieren. Eine Programmiersprache die unterstützt wird, ist Visual Basic von Microsoft. Die Stärke dieser Programmiersprache ist das Erstellen von grafischen Bedieneroberflächen und die Möglichkeit diese an Datenbanken anzubinden. Visual Basic ist seit Jahren stark verbreitet und wird von Microsoft ständig weiterentwickelt. Viele Drittanbieter bieten Zusatzmodule für verschiedene Bereiche an. Der Oberbegriff für solche Module ist OCX. Beckhoff liefert für TwinCAT ein OCX, welches die Bezeichnung ADS OCX hat. Das ADS OCX stellt Methoden zur Verfügung, um mit anderen ADS-Geräten (PLC, NC/CNC, ...) über den TwinCAT Message Router zu kommunizieren. Das mitgelieferte Beispielprogramm zeigt, wie Sie von Visual Basic auf einzelne Variablen des TwinCAT PLC Servers zugreifen können.
Zugriffsmöglichkeiten:
Das ADS OCX beinhaltet verschiedene Verfahren um die Werte aus anderen ADS-Geräten auszulesen. Die Entscheidung welches Verfahren Sie einsetzen, hängt von der Umgebung ab, in der das Programm ausgeführt werden soll. Weitere Hinweise und eine ausführliche Referenz der einzelnen Funktionen finden Sie in der speziellen Anleitung zum ADS OCX. Hier soll nur eine kurze Übersicht über die einzelnen Zugriffsverfahren gezeigt werden:
Zugriff | Bedeutung |
---|---|
connect | Sobald eine Kommunikation zwischen einer SPS-Variablen und einer Visual Basic-Variablen benötigt wird, wird durch ein Methodenaufruf eine Verbindung zwischen diesen beide Variablen erstellt. Im weiteren Verlauf des Programms wird von TwinCAT die Visual Basic-Variable mit der SPS-Variablen abgeglichen. Diese Art des Datenaustauschs kann auch so benutzt werden, dass bei Änderung einer SPS-Variablen im Visual Basic-Programm eine Ereignisfunktion aufgerufen wird (ereignisgesteuerte Datenübertragung). |
synchron | Nach Aufruf einer Schreib-/Lesemethode wird die Ausführung des Visual Basic-Programms so lange unterbrochen, bis die angeforderten Daten vorliegen. In den darauf folgenden Anweisungen kann mit den Daten sofort weiter gearbeitet werden. |
asynchron | Bei dem asynchronen Zugriff wird die Ausführung des Visual Basic-Programms nicht unterbrochen, sondern sofort mit der Abarbeitung des nächsten Befehls fortgefahren. Treffen die angeforderten Daten beim AdsOCX ein, wird im Visual Basic-Programm eine Ereignisfunktion ausgelöst, in der als Parameter der Wert übergeben wird. |
Beispielprogramm
TwinCAT und SPS Programm starten:
Bevor Sie das Visual Basic-Programm starten können, muss TwinCAT und das SPS-Programm aktiv sein. Ist auf Ihrem Rechner nicht Visual Basic 5 oder höher installiert, so müssen Sie auf der TwinCAT CD die ‚SamplesRuntime' installieren. Dadurch werden die benötigten DLL's auf Ihrem System eingerichtet. Das VB-Programm können Sie auch mit aktuelleren Versionen von Visual Basic bearbeiten; dazu benötigen Sie die 'SamplesRuntime' nicht mehr.
Visual Basic-Programm starten:
Starten Sie das Programm 'Machine.exe'. (TwinCAT\ Samples\First Steps\VB\)

Im oberen linken Bereich sehen Sie die beiden Ausgänge, die auch auf die Busklemmen ausgegeben werden. Unten links ist die Variable abgebildet, welche die Werkstücke zählt. Rechts können Sie mit dem Feld 'Geschwindigkeit' die Taktgeschwindigkeit des Motors verändern. Die Anzeige 'Schritte' entspricht der Anzahl der Takte, die auf den Ausgang 1 ausgegeben werden.
Programmtext:
Option Explicit
Dim deviceUp As Boolean
Dim deviceDown As Boolean
Dim steps As Integer
Dim counter As Long
Dim hDeviceUp As Long
Dim hDeviceDown As Long
Dim hSteps As Long
Dim hSwitch As Long
Dim hCounter As Long
'-----------------------------------------------------'Wird als erstes beim Starten des Programms aufgerufen'-----------------------------------------------------
Private Sub Form_Load()
'Sprachabhängige Wörter aus Resource-Datei laden
lblMachine.Caption = LoadResString(0 + GetLanguageId)
lplDeviceUp.Caption = LoadResString(1 +GetLanguageId)
lplDeviceDown.Caption = LoadResString(2 + GetLanguageId)
lblCountLabel.Caption = LoadResString(3 + GetLanguageId)
lplSteps.Caption =LoadResString(4 + GetLanguageId)
fraSpeed.Caption = LoadResString(5 +GetLanguageId)
optSpeedFast.Caption = LoadResString(6 + GetLanguageId)
optSpeedSlow.Caption = LoadResString(7 + GetLanguageId)
'SPS-Variablen mit Visual Basic-Variablen verbinden
Call AdsOcx1.AdsReadIntegerVarConnect(".steps", 2&, 4, 55, steps)
Call AdsOcx1.AdsReadBoolVarConnect(".deviceUp", 2&, 4, 55, deviceUp)
Call AdsOcx1.AdsReadBoolVarConnect(".deviceDown", 2&, 4, 55, deviceDown)
Call AdsOcx1.AdsReadLongVarConnect(".count", 4&, 4, 55, counter)
'Handle der Variablen ermitteln
Call AdsOcx1.AdsCreateVarHandle(".steps", hSteps)
Call AdsOcx1.AdsCreateVarHandle(".deviceUp", hDeviceUp)
Call AdsOcx1.AdsCreateVarHandle(".deviceDown", hDeviceDown)
Call AdsOcx1.AdsCreateVarHandle(".count", hCounter)
Call AdsOcx1.AdsCreateVarHandle(".switch", hSwitch)
End Sub
'------------------------------------------'wird beim Beenden des Programms aufgerufen'------------------------------------------
Private Sub Form_Unload(Cancel As Integer)
'Visual Basic-Variablen von SPS-Variablen trennen
Call AdsOcx1.AdsReadIntegerDisconnect(steps)
Call AdsOcx1.AdsReadBoolDisconnect(deviceUp)
Call AdsOcx1.AdsReadBoolDisconnect(deviceDown)
Call AdsOcx1.AdsReadLongDisconnect(counter)
'Handle der Variablen freigeben
Call AdsOcx1.AdsDeleteVarHandle(hSteps)
Call AdsOcx1.AdsDeleteVarHandle(hDeviceUp)
Call AdsOcx1.AdsDeleteVarHandle(hDeviceDown)
Call AdsOcx1.AdsDeleteVarHandle(hCounter)
Call AdsOcx1.AdsDeleteVarHandle(hSwitch)
End Sub
'------------------------------------------------------'wird aufgerufen, wenn das Feld 'schnell' markiert wird'------------------------------------------------------
Private Sub optSpeedFast_Click()
Dim switch As Boolean
'SPS-Variable switch auf TRUE setzen
switch = True
Call AdsOcx1.AdsSyncWriteBoolVarReq(hSwitch, 2&, switch)
End Sub
'------------------------------------------------------'wird aufgerufen, wenn das Feld 'langsam' markiert wird'------------------------------------------------------
Private Sub optSpeedSlow_Click()
Dim switch As Boolean
'SPS-Variable switch auf FALSE setzen
switch = False
Call AdsOcx1.AdsSyncWriteBoolVarReq(hSwitch, 2&, switch)
End Sub
'------------------------------------------------'wird bei Änderung einer SPS-Variablen aufgerufen'------------------------------------------------
Private Sub AdsOcx1_AdsReadConnectUpdate(ByVal nIndexGroup As Long, ByVal nIndexOffset As Long)
Select Case nIndexOffset
Case hCounter:
'Stückzahl in Form anzeigen
lblCount.Caption = counter
Case hDeviceUp
'Die Farben der Grafiken entsprechend der Variablen anpassen
DeviceUp_LED.ForeColor = IIf(deviceUp = True, vbRed, vbWhite)
Case hDeviceDown
'Die Farben der Grafiken entsprechened der Variablen anpassen
DeviceDown_LED.ForeColor = IIf(deviceDown = True, vbRed, vbWhite)
Case hSteps
'Position vom Werkstück anzeigen
prgSteps.Width = steps * 240
End Select
End Sub
Funktionsweise:
Im Ereignis Form1_Load() werden als erstes die sprachabhängigen Wörter aus der Resourcedatei geladen. Je nach eingestellter Landessprache von Windows werden die deutschen oder die englischen Wörter angezeigt. Anschließend werden durch die Methode 'AdsReadVarConnect' alle notwendigen Visual Basic-Variablen mit den entsprechenden SPS-Variablen verbunden. Die Parameter der Methode sind:
Parameter | Bedeutung |
---|---|
adsVarName | Name der SPS-Variable |
cbLenght | Länge der Daten in Byte |
nRefreshType | Art des Datenaustauschs |
nCycleTime | Refresh Zyklus in ms |
pData | Visual Basic-Variable, in der die Daten geschrieben werden |
Nachdem die Variablen 'verbunden' wurden, wird von jeder Variablen der Handle geholt. Dieser wird weiter unten in der Ereignisfunktion 'AdsOcx1_AdsReadConnectUpdate' benötigt. Die Ereignisfunktion 'AdsOcx1_AdsReadConnectUpdate()' wird dann aufgerufen, wenn sich die Variable 'Count', 'DeviceUp', 'DeviceDown' oder 'Steps' geändert hat. In ihr werden die Objekte auf der Form mit den Variablen der SPS animiert. Anhand des übergebenden Handles, kann festgestellt werden, welche SPS-Variable sich geändert hat.
Die Funktionen 'optFast_Click()' und 'optSlow_Click()' werden dann aufgerufen, wenn der Bediener das Markierungsfeld 'fast' oder 'slow' anklickt. In diesen Funktionen wird die Variable 'switch' auf TRUE oder FALSE gesetzt. Über die Methode 'AdsSyncWriteBoolVarReq' wird der Wert in die SPS-Variable 'switch' geschrieben. Die Parameter der Methode sind:
Parameter | Bedeutung |
---|---|
hVar | Handle der SPS-Variable |
cbLenght | Länge der Daten in Byte |
pData | Visual Basic-Variable, welche die Daten enthält |
Wenn eine Form geschlossen wird, sollten alle Variablen, die nicht mehr benötigt werden, von den SPS-Variablen getrennt werden. Dieses wird in der Funktion 'Form1_Unload()' durchgeführt. Außerdem werden alle Handles der Variablen wieder freigegeben.