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:

Visual Basic: Lesen und Schreiben von SPS Variablen 1:

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

ADS-Script-DLL Sample02.zip