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\)

Beispiel Maschine mit Microsoft Visual Basic 6.0 1:

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.

Download Beispiel:

Visual Basic 6 Beispiel