-> Hier kostenlos registrieren
Hallo Leute
Zur Verwendung der „DotNetSiemensPLCToolBoxLibrary“von J. Kühne habe ich mindestens zwei Fragen.
Ich verwende Visualstudio 2010 und arbeite mit Visualbasic.
Frage 1
Ich möchte eine vorgegeben Byteanzahl aus der SPS in ein Bytearray einlesen um die eingelesenen Daten anschließend in verschiedene Datenformate zu konvertieren.
Die Sub-Routine „Test()“ soll die Aufgabe realisieren.
Allerdings funktioniert sie nicht. Beim Lesen der Bytes aus der SPS in das Bytearray tritt ein Fehler auf.
Was stimmt in dem Code nicht ?
Sub Test()
'Dieses Testmodul soll 6 Merkbytes ab Merkerbyte 500 in ein Bytearray lesen
'Die Verbindung zur SPS funktioniert und wurde mit dem Aufruf des Konfigurationsmenü eingestellt und getestet
'So wurde die Verbindung aktiviert:
'Konfigurationsmenü Verbindung 1
'Configuration.ShowConfiguration("SPS1", True)
'PLCCon1.Configuration.ConnectionName = "SPS1"
'Mit "PLCCon1.Connect()"
Dim aVar As New PLCTag
Dim Bytearray(100) As Byte
Dim S8 As Byte
Dim S16 As Short
Dim S32 As Integer
Dim Real As Single
aVar.ByteAddress = 500
aVar.BitAddress = 0
aVar.DatablockNumber = 200
aVar.LibNoDaveDataSource = TagDataSource.Flags
aVar.LibNoDaveDataType = TagDataType.ByteArray
aVar.ArraySize = 6
MsgBox("Init ok")
PLCCon1.ReadValuesFromByteArray(aVar, Bytearray, 0)
MsgBox("Read ok")
S8 = libnodave.getS8from(Bytearray, 0)
S16 = libnodave.getS16from(Bytearray, 0)
S32 = libnodave.getS32from(Bytearray, 0)
Real = libnodave.getFloatfrom(Bytearray, 0)
MsgBox("S8=" & S8 & " S16=" & S16 & " S32=" & S32 & " Real=" & Real)
aVar = Nothing
End Sub
Frage 2
Um ein Byte in die SPS zu schreiben, verwende ich folgenden Programmteil.
Dieser Programmteil funktioniert. – die Textbox „Me.txt_Wert1“ enthält z.B. „23“ – die 23 wird zur SPS übertragen.
Das Array Adr ist ein String-Array.
- Adr(0) enthält die Zeichenkette “500”, die Adr(1) enthält die Zeichenkette “0”.
- DBNr ist ein String und enthält „200“.
- Die Variable „Bereich“ = „Merker“
- Der String „VarTyp“ = Byte“
If VarTyp = "Byte" Then
Dim Var As New Communication.PLCTag
Var.ByteAddress = CInt(Adr(0))
Var.BitAddress = CInt(Adr(1))
Var.DatablockNumber = CInt(DBNr)
Var.LibNoDaveDataType = TagDataType.Byte
If Bereich = "Daten" Then Var.LibNoDaveDataSource = TagDataSource.Datablock
If Bereich = "Eingänge" Then Var.LibNoDaveDataSource = TagDataSource.Inputs
If Bereich = "Ausgänge" Then Var.LibNoDaveDataSource = TagDataSource.Outputs
If Bereich = "Merker" Then Var.LibNoDaveDataSource = TagDataSource.Flags
Value = Me.txt_Wert1.Text
Var.ParseControlValueFromString(Value)
PLCCon1.WriteValue(Var)
'Me.txt_Wert1.Text = Var.Value
Var = Nothing
End If
Nun meine Frage :
Wie muss der Programmteil aussehen, wenn ein REAL-Wert zur SPS übertragen werden soll.
Der folgende Programmteil funktioniert nicht – er überträgt immer eine 0.0.
Welcher Wert muss in der Textbox stehen „Me.txt_Wert1.Text“– damit die Übertragung einer REAL-Variablen in die SPS erfolgreich ist?
Das Array Adr ist ein String-Array.
- Adr(0) enthält die Zeichenkette “500”, die Adr(1) enthält die Zeichenkette “0”.
- DBNr ist ein String und enthält „200“.
- Die Variable „Bereich“ = „Merker“
- Der String „VarTyp“ = REAL“
If VarTyp = "REAL" Then
Dim Var As New Communication.PLCTag
Var.ByteAddress = CInt(Adr(0))
Var.BitAddress = CInt(Adr(1))
Var.DatablockNumber = CInt(DBNr)
Var.LibNoDaveDataType = TagDataType.Float
If Bereich = "Daten" Then Var.LibNoDaveDataSource = TagDataSource.Datablock
If Bereich = "Eingänge" Then Var.LibNoDaveDataSource = TagDataSource.Inputs
If Bereich = "Ausgänge" Then Var.LibNoDaveDataSource = TagDataSource.Outputs
If Bereich = "Merker" Then Var.LibNoDaveDataSource = TagDataSource.Flags
Value = Me.txt_Wert1.Text
Var.ParseControlValueFromString(Value)
PLCCon1.WriteValue(Var)
Me.txt_Wert1.Text = Var.Value
Var = Nothing
End If
Zur Verwendung der „DotNetSiemensPLCToolBoxLibrary“von J. Kühne habe ich mindestens zwei Fragen.
Ich verwende Visualstudio 2010 und arbeite mit Visualbasic.
Frage 1
Ich möchte eine vorgegeben Byteanzahl aus der SPS in ein Bytearray einlesen um die eingelesenen Daten anschließend in verschiedene Datenformate zu konvertieren.
Die Sub-Routine „Test()“ soll die Aufgabe realisieren.
Allerdings funktioniert sie nicht. Beim Lesen der Bytes aus der SPS in das Bytearray tritt ein Fehler auf.
Was stimmt in dem Code nicht ?
Sub Test()
'Dieses Testmodul soll 6 Merkbytes ab Merkerbyte 500 in ein Bytearray lesen
'Die Verbindung zur SPS funktioniert und wurde mit dem Aufruf des Konfigurationsmenü eingestellt und getestet
'So wurde die Verbindung aktiviert:
'Konfigurationsmenü Verbindung 1
'Configuration.ShowConfiguration("SPS1", True)
'PLCCon1.Configuration.ConnectionName = "SPS1"
'Mit "PLCCon1.Connect()"
Dim aVar As New PLCTag
Dim Bytearray(100) As Byte
Dim S8 As Byte
Dim S16 As Short
Dim S32 As Integer
Dim Real As Single
aVar.ByteAddress = 500
aVar.BitAddress = 0
aVar.DatablockNumber = 200
aVar.LibNoDaveDataSource = TagDataSource.Flags
aVar.LibNoDaveDataType = TagDataType.ByteArray
aVar.ArraySize = 6
MsgBox("Init ok")
PLCCon1.ReadValuesFromByteArray(aVar, Bytearray, 0)
MsgBox("Read ok")
S8 = libnodave.getS8from(Bytearray, 0)
S16 = libnodave.getS16from(Bytearray, 0)
S32 = libnodave.getS32from(Bytearray, 0)
Real = libnodave.getFloatfrom(Bytearray, 0)
MsgBox("S8=" & S8 & " S16=" & S16 & " S32=" & S32 & " Real=" & Real)
aVar = Nothing
End Sub
Frage 2
Um ein Byte in die SPS zu schreiben, verwende ich folgenden Programmteil.
Dieser Programmteil funktioniert. – die Textbox „Me.txt_Wert1“ enthält z.B. „23“ – die 23 wird zur SPS übertragen.
Das Array Adr ist ein String-Array.
- Adr(0) enthält die Zeichenkette “500”, die Adr(1) enthält die Zeichenkette “0”.
- DBNr ist ein String und enthält „200“.
- Die Variable „Bereich“ = „Merker“
- Der String „VarTyp“ = Byte“
If VarTyp = "Byte" Then
Dim Var As New Communication.PLCTag
Var.ByteAddress = CInt(Adr(0))
Var.BitAddress = CInt(Adr(1))
Var.DatablockNumber = CInt(DBNr)
Var.LibNoDaveDataType = TagDataType.Byte
If Bereich = "Daten" Then Var.LibNoDaveDataSource = TagDataSource.Datablock
If Bereich = "Eingänge" Then Var.LibNoDaveDataSource = TagDataSource.Inputs
If Bereich = "Ausgänge" Then Var.LibNoDaveDataSource = TagDataSource.Outputs
If Bereich = "Merker" Then Var.LibNoDaveDataSource = TagDataSource.Flags
Value = Me.txt_Wert1.Text
Var.ParseControlValueFromString(Value)
PLCCon1.WriteValue(Var)
'Me.txt_Wert1.Text = Var.Value
Var = Nothing
End If
Nun meine Frage :
Wie muss der Programmteil aussehen, wenn ein REAL-Wert zur SPS übertragen werden soll.
Der folgende Programmteil funktioniert nicht – er überträgt immer eine 0.0.
Welcher Wert muss in der Textbox stehen „Me.txt_Wert1.Text“– damit die Übertragung einer REAL-Variablen in die SPS erfolgreich ist?
Das Array Adr ist ein String-Array.
- Adr(0) enthält die Zeichenkette “500”, die Adr(1) enthält die Zeichenkette “0”.
- DBNr ist ein String und enthält „200“.
- Die Variable „Bereich“ = „Merker“
- Der String „VarTyp“ = REAL“
If VarTyp = "REAL" Then
Dim Var As New Communication.PLCTag
Var.ByteAddress = CInt(Adr(0))
Var.BitAddress = CInt(Adr(1))
Var.DatablockNumber = CInt(DBNr)
Var.LibNoDaveDataType = TagDataType.Float
If Bereich = "Daten" Then Var.LibNoDaveDataSource = TagDataSource.Datablock
If Bereich = "Eingänge" Then Var.LibNoDaveDataSource = TagDataSource.Inputs
If Bereich = "Ausgänge" Then Var.LibNoDaveDataSource = TagDataSource.Outputs
If Bereich = "Merker" Then Var.LibNoDaveDataSource = TagDataSource.Flags
Value = Me.txt_Wert1.Text
Var.ParseControlValueFromString(Value)
PLCCon1.WriteValue(Var)
Me.txt_Wert1.Text = Var.Value
Var = Nothing
End If