-> Hier kostenlos registrieren
Hallo Leute,
Ich habe folgenden Aufbau:
Visual Basic Programm:
Dim hVar As Long
Dim VBVar As VBStruct
Private Sub cmdverbinden_Click()
Call AdsOcx1.AdsCreateVarHandle("Main.PLCVar", hVar)
lblVarlange.Caption = LenB(VBVar)
End Sub
Private Sub cmdtrennen_Click()
Call AdsOcx1.AdsDeleteVarHandle(hVar)
End Sub
Private Sub cmd_schreiben_sps_Click()
VBVar.VarInteger = CInt(txtInteger.Text)
VBVar.VarByte = CByte(txtByte.Text)
VBVar.VarDouble = CDbl(txtDouble.Text)
Call AdsOcx1.AdsSyncWriteIntegerVarReq(hVar, LenB(VBVar), VBVar.VarInteger)
End Sub
Visual Basic Struktur
Type VBStruct
VarInteger As Integer
VarDummy1 As Integer
VarByte As Byte
VarDummy2 As Byte
VarDummy3 As Byte
VarDummy4 As Byte
VarDouble As Double
End Type
Im SPS - Programm:
TYPE PLCStruct
STRUCT
PLCVarInteger : INT;
PLCVarDummy1 : INT;
PLCVarByte : SINT;
PLCVarDummy2 : SINT;
PLCVarDummy3 : SINT;
PLCVarDummy4 : SINT;
PLCVarDouble : LREAL;
END_STRUCT
END_TYPE
und
PROGRAM MAIN
VAR
PLCVar : PLCStruct;
END_VAR
Oben angeführtes Programm funktioniert einwandfrei. Sobald ich jedoch eine Bool Variable ins SPS - Programm schreiben möchte, funtkioniert das ganze nicht mehr. Im Visual Basic ist es doch so, dass für Bool variablen 2 byte in anspruchen genommen werden und im SPS lediglich 1Byte. Inwieweit muss ich das mit einer Dummy Variable auffüllen/ergänzen? Ich denke das ganze Alignment geschichte habe ich noch nicht ganz verstanden, denke ich.
- Wie müsste ich obigen Programm erweitern damit das mit bool auch funktioniert!!!
- Und wie müsste das Programm aussehen, wenn ich das ganze anstatt synchron zyklisch haben möchte??
Vielen Dank für eure Hilfe
mfg Wolfgang
Ich habe folgenden Aufbau:
Visual Basic Programm:
Dim hVar As Long
Dim VBVar As VBStruct
Private Sub cmdverbinden_Click()
Call AdsOcx1.AdsCreateVarHandle("Main.PLCVar", hVar)
lblVarlange.Caption = LenB(VBVar)
End Sub
Private Sub cmdtrennen_Click()
Call AdsOcx1.AdsDeleteVarHandle(hVar)
End Sub
Private Sub cmd_schreiben_sps_Click()
VBVar.VarInteger = CInt(txtInteger.Text)
VBVar.VarByte = CByte(txtByte.Text)
VBVar.VarDouble = CDbl(txtDouble.Text)
Call AdsOcx1.AdsSyncWriteIntegerVarReq(hVar, LenB(VBVar), VBVar.VarInteger)
End Sub
Visual Basic Struktur
Type VBStruct
VarInteger As Integer
VarDummy1 As Integer
VarByte As Byte
VarDummy2 As Byte
VarDummy3 As Byte
VarDummy4 As Byte
VarDouble As Double
End Type
Im SPS - Programm:
TYPE PLCStruct
STRUCT
PLCVarInteger : INT;
PLCVarDummy1 : INT;
PLCVarByte : SINT;
PLCVarDummy2 : SINT;
PLCVarDummy3 : SINT;
PLCVarDummy4 : SINT;
PLCVarDouble : LREAL;
END_STRUCT
END_TYPE
und
PROGRAM MAIN
VAR
PLCVar : PLCStruct;
END_VAR
Oben angeführtes Programm funktioniert einwandfrei. Sobald ich jedoch eine Bool Variable ins SPS - Programm schreiben möchte, funtkioniert das ganze nicht mehr. Im Visual Basic ist es doch so, dass für Bool variablen 2 byte in anspruchen genommen werden und im SPS lediglich 1Byte. Inwieweit muss ich das mit einer Dummy Variable auffüllen/ergänzen? Ich denke das ganze Alignment geschichte habe ich noch nicht ganz verstanden, denke ich.
- Wie müsste ich obigen Programm erweitern damit das mit bool auch funktioniert!!!
- Und wie müsste das Programm aussehen, wenn ich das ganze anstatt synchron zyklisch haben möchte??
Vielen Dank für eure Hilfe
mfg Wolfgang