Visual Basic: Lesen und Schreiben von SPS Variablen
Wie in der Einleitung schon erwähnt, ist die ADS-Script-DLL in erster Linie für Scriptsprachen entwickelt worden. Trotzdem ist an dieser Stelle ein Visual Basic Programm. Es dient legendlich dazu, die Möglichkeiten der ADS-Script-DLL besser zu demonstrieren. Für Anwendungen, die mit Visual Basic erstellt werden sollen, ist das ADS-OCX besser geeignet.
Laden Sie als erstes das SPS-Programm in die lokale SPS (Laufzeitsystem 1) auf Ihrem PC. Starten Sie anschließend das Visual Basic Programm:
Wenn Sie keine anderen Angaben machen, wird ein Kommunikationskanal zu Ihrer lokalen SPS hergestellt. Durch Eingabe einer anderen AdsAmsNetId und einer anderen Portnummer können Sie eine Verbindung zu einem anderen Laufzeitsystem auf einem anderen PC herstellen. Auf diesem Laufzeitsystem muss dann allerdings das oben genannte SPS-Programm aktiv sein. Ebenfalls muss der evtl. ausgewählte Remote Rechner im TwinCAT System Control eingetragen sein.
Sie können wahlweise die SPS-Variablen per Adresse (IndexGroup und IndexOffset), oder per Variablenname auslesen. Gleiches gilt auch für das Schreiben neuer Werte. Für den Bediener hat dieses keine Bedeutung. Es soll nur die beiden Möglichkeiten aufführen.
In der oberen rechten Ecke kann der Zustand der SPS ausgelesen und verändert werden. Eine 5 entspricht dem RUN-Zustand und eine 6 dem STOP-Zustand.
Visual Basic 6 Programm
Option Explicit
Public TcClientSync As TCSCRIPTLib.TcScriptSync
Public nAdsAmsPort As Integer
Public strAdsAmsNetId As String
Private Sub Form_Load()
Set TcClientSync = CreateObject("TcScript.TcScriptSync")
Call TcClientSync.ConnectTo("", 801)
End Sub
Private Sub Form_Terminate()
Set TcClientSync = Nothing
End Sub
Private Sub cmdConnect_Click()
nAdsAmsPort = CLng(txtAdsAmsPort.Text)
if (Len(txtAdsAmsNetId.Text) > 0) Then
strAdsAmsNetId = txtAdsAmsNetId.Text
Else
strAdsAmsNetId = ""
End If
Set TcClientSync = CreateObject("TcScript.TcScriptSync")
Call TcClientSync.ConnectTo(strAdsAmsNetId, nAdsAmsPort)
End Sub
Private Sub cmdRead_Click()
Dim VarBool As Variant
Dim VarInt8 As Byte
Dim VarInt16 As Integer
Dim VarInt32 As Long
Dim VarReal32 As Single
Dim VarReal64 As Double
VarBool = TcClientSync.ReadBool(&H4020, 0)
lblBoolean.Caption = VarBool
VarInt8 = TcClientSync.ReadInt8(&H4020, 2)
lblInt8.Caption = VarInt8
VarInt16 = TcClientSync.ReadInt16(&H4020, 4)
lblInt16.Caption = VarInt16
VarInt32 = TcClientSync.ReadInt32(&H4020, 6)
lblInt32.Caption = VarInt32
VarReal32 = TcClientSync.ReadReal32(&H4020, 10)
lblReal32.Caption = VarReal32
VarReal64 = TcClientSync.ReadReal64(&H4020, 14)
lblReal64.Caption = VarReal64
End Sub
Private Sub cmdReadByName_Click()
Dim VarBool As Variant
Dim VarInt8 As Byte
Dim VarInt16 As Integer
Dim VarInt32 As Long
Dim VarReal32 As Single
Dim VarReal64 As Double
VarBool = TcClientSync.ReadVar(".PLCBoolVar")
lblBoolean.Caption = VarBool
VarInt8 = TcClientSync.ReadVar(".PLCSIntVar")
lblInt8.Caption = VarInt8
VarInt16 = TcClientSync.ReadVar(".PLCIntVar")
lblInt16.Caption = VarInt16
VarInt32 = TcClientSync.ReadVar(".PLCDIntVar")
lblInt32.Caption = VarInt32
VarReal32 = TcClientSync.ReadVar(".PLCRealVar")
lblReal32.Caption = VarReal32
VarReal64 = TcClientSync.ReadVar(".PLCLRealVar")
lblReal64.Caption = VarReal64
End Sub
Private Sub cmdWrite_Click()
Dim VarBool As Boolean
Dim VarInt8 As Byte
Dim VarInt16 As Integer
Dim VarInt32 As Long
Dim VarReal32 As Single
Dim VarReal64 As Double
If (txtBoolean.Text <> "") Then
VarBool = CBool(txtBoolean.Text)
Call TcClientSync.WriteBool(&H4020, 0, VarBool)
txtBoolean.Text = VarBool
End If
If (txtInt8.Text <> "") Then
VarInt8 = CByte(txtInt8.Text)
Call TcClientSync.WriteInt8(&H4020, 2, VarInt8)
txtInt8.Text = VarInt8
End If
If (txtInt16.Text <> "") Then
VarInt16 = CInt(txtInt16.Text)
Call TcClientSync.WriteInt16(&H4020, 4, VarInt16)
txtInt16.Text = VarInt16
End If
If (txtInt32.Text <> "") Then
VarInt32 = CLng(txtInt32.Text)
Call TcClientSync.WriteInt32(&H4020, 6, VarInt32)
txtInt32.Text = VarInt32
End If
If (txtReal32.Text <> "") Then
VarReal32 = CSng(txtReal32.Text)
Call TcClientSync.WriteReal32(&H4020, 10, VarReal32)
txtReal32.Text = VarReal32
End If
If (txtReal64.Text <> "") Then
VarReal64 = CDbl(txtReal64.Text)
Call TcClientSync.WriteReal64(&H4020, 14, VarReal64)
txtReal64.Text = VarReal64
End If
End Sub
Private Sub cmdWriteByName_Click()
Dim VarBool As Boolean
Dim VarInt8 As Byte
Dim VarInt16 As Integer
Dim VarInt32 As Long
Dim VarReal32 As Single
Dim VarReal64 As Double
If (txtBoolean.Text <> "") Then
VarBool = CBool(txtBoolean.Text)
Call TcClientSync.WriteVar(".PLCBoolVar", VarBool)
txtBoolean.Text = VarBool
End If
If (txtInt8.Text <> "") Then
VarInt8 = CByte(txtInt8.Text)
Call TcClientSync.WriteVar(".PLCSIntVar", VarInt8)
txtInt8.Text = VarInt8
End If
If (txtInt16.Text <> "") Then
VarInt16 = CInt(txtInt16.Text)
Call TcClientSync.WriteVar(".PLCIntVar", VarInt16)
txtInt16.Text = VarInt16
End If
If (txtInt32.Text <> "") Then
VarInt32 = CLng(txtInt32.Text)
Call TcClientSync.WriteVar(".PLCDIntVar", VarInt32)
txtInt32.Text = VarInt32
End If
If (txtReal32.Text <> "") Then
VarReal32 = CSng(txtReal32.Text)
Call TcClientSync.WriteVar(".PLCRealVar", VarReal32)
txtReal32.Text = VarReal32
End If
If (txtReal64.Text <> "") Then
VarReal64 = CDbl(txtReal64.Text)
Call TcClientSync.WriteVar(".PLCLRealVar", VarReal64)
txtReal64.Text = VarReal64
End If
End Sub
Private Sub cmdReadState_Click()
lblAdsState.Caption = TcClientSync.ReadAdsState()
End Sub
Private Sub cmdWriteState_Click()
If (txtAdsState.Text <> "") Then
If (txtAdsState.Text <> TcClientSync.ReadAdsState()) Then
Call TcClientSync.WriteAdsState(txtAdsState.Text)
End If
End If
End Sub
SPS Programm
VAR_GLOBAL
PLCBoolVar AT %MX0.0: BOOL := TRUE;
PLCSIntVar AT %MB2 : USINT := 75;
PLCIntVar AT %MB4 : UINT := 12423;
PLCDIntVar AT %MB6 : UDINT := 43234532;
PLCRealVar AT %MB10 : REAL := 3.1415;
PLCLRealVar AT %MB14 : LREAL := 3.141592654;
END_VAR
Sprache / IDE | Beispielprogramm auspacken |
---|---|
Visual Basic 6 |