SPS-Variablendeklaration auslesen
Aufgabe
Aus der SPS sollen alle Informationen der Variablen ausgelesen werden (Symbol-Upload).
Beschreibung
Durch betätigen des Buttons auf der Form wird die Ereignisfunktion cmdReadSymbols_Click() aufgerufen. Die Methode AdsReadSymbolInfo() liefert die Anzahl der Variablen (Symbole) und die Länge der Daten, in der die Symbole gespeichert sind. Bei dem ersten Aufruf der Methode AdsEnumSymbols() muss der Parameter bNext auf FALSE gesetzt werden. Dadurch werden alle Informationen des ersten Symbols ausgelesen. Bei jedem weiteren Aufruf wird bNext auf TRUE gesetzt. Durch die FOR-Schleife wird AdsEnumSymbols() so oft aufgerufen, wie sich Symbole in der SPS befinden.
Visual Basic 6 Programm
Option Explicit
'--- wird beim Starten des Programms aufgerufen ---
Private Sub Form_Load()
'--- Exception freigeben ---
AdsOcx1.EnableErrorHandling = True
'--- Anzeigeliste- und Felder löschen ---
lstSymbols.Clear
lblSymbols.Caption = "Symbols: "
End Sub
'--- wird durch den Bediener aufgerufen ---
Private Sub cmdReadSymbols_Click()
Dim nSymbolsAvailable As Long
Dim cbBufSizeNeeded As Long
Dim strSymbolName As String
Dim strComment As String
Dim nSymbolType As Long
Dim cbSymbolSize As Long
Dim nIndexOffset As Long
Dim nIndexGroup As Long
Dim intIndex As Long
'--- Anzeigeliste löschen ---
lstSymbols.Clear
Call AdsOcx1.AdsReadSymbolInfo(nSymbolsAvailable, cbBufSizeNeeded)
lblSymbols.Caption = "Symbols: " & nSymbolsAvailable
'--- erstes Symbol laden und anzeigen ---
Call AdsOcx1.AdsEnumSymbols(strSymbolName, nSymbolType, cbSymbolSize, _
strComment, nIndexGroup, nIndexOffset, False)
lstSymbols.AddItem ("0" & vbTab & Format(strSymbolName, "!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@") & vbTab & _
GetSymbolType(nSymbolType) & vbTab & cbSymbolSize & vbTab & strComment & vbTab & _
"0x" & Hex(nIndexGroup) & vbTab & "0x" & Hex(nIndexOffset))
'--- die restlichen Symbole laden und anzeigen ---
For intIndex = 1 To nSymbolsAvailable - 1
Call AdsOcx1.AdsEnumSymbols(strSymbolName, nSymbolType, cbSymbolSize, _
strComment, nIndexGroup, nIndexOffset, True)
lstSymbols.AddItem (intIndex & vbTab & Format(strSymbolName, "!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@") & vbTab & _
GetSymbolType(nSymbolType) & vbTab & cbSymbolSize & vbTab & strComment & vbTab & _
"0x" & Hex(nIndexGroup) & vbTab & "0x" & Hex(nIndexOffset))
Next intIndex
End Sub
Private Function GetSymbolType(VarType As ADSDATATYPEID) As String
Select Case VarType
Case ADST_BIT: GetSymbolType = "BIT"
Case ADST_INT8: GetSymbolType = "INT8"
Case ADST_INT16: GetSymbolType = "INT16"
Case ADST_INT32: GetSymbolType = "INT32"
Case ADST_INT64: GetSymbolType = "INT64"
Case ADST_UINT8: GetSymbolType = "UINT8"
Case ADST_UINT16: GetSymbolType = "UINT16"
Case ADST_UINT32: GetSymbolType = "UINT32"
Case ADST_UINT64: GetSymbolType = "UINT64"
Case ADST_REAL32: GetSymbolType = "REAL32"
Case ADST_REAL64: GetSymbolType = "REAL64"
Case ADST_REAL80: GetSymbolType = "REAL80"
Case ADST_BIGTYPE: GetSymbolType = "BIGTYPE"
Case ADST_VOID: GetSymbolType = "VOID"
End Select
End Function
SPS-Programm
PROGRAM MAIN
VAR
REAL32_1 AT %MB0 : REAL; (* 1 *)
REAL32_2 AT %MB4 : REAL; (* 2 *)
REAL32_3 AT %MB8 : REAL; (* 3 *)
REAL32_4 AT %MB12: REAL; (* 4 *)
REAL32_5 AT %MB16: REAL; (* 5 *)
REAL64_1 AT %MB20 : LREAL; (* 6 *)
REAL64_2 AT %MB28 : LREAL; (* 7 *)
REAL64_3 AT %MB36 : LREAL; (* 8 *)
REAL64_4 AT %MB44 : LREAL; (* 9 *)
REAL64_5 AT %MB52 : LREAL; (* 10 *)
INT32_1 AT %MB60 : DINT; (* 11 *)
INT32_2 AT %MB64 : DINT; (* 12 *)
INT32_3 AT %MB68 : DINT; (* 13 *)
INT32_4 AT %MB72 : DINT; (* 14 *)
INT32_5 AT %MB76 : DINT; (* 15 *)
UINT32_1 AT %MB80 : UDINT; (* 16 *)
UINT32_2 AT %MB84 : UDINT; (* 17 *)
UINT32_3 AT %MB88 : UDINT; (* 18 *)
UINT32_4 AT %MB92 : UDINT; (* 19 *)
UINT32_5 AT %MB96 : UDINT; (* 20 *)
INT16_1 AT %MB100 : INT; (* 21 *)
INT16_2 AT %MB102 : INT; (* 22 *)
INT16_3 AT %MB104 : INT; (* 23 *)
INT16_4 AT %MB106 : INT; (* 24 *)
INT16_5 AT %MB108 : INT; (* 25 *)
UINT16_1 AT %MB110 : UINT; (* 26 *)
UINT16_2 AT %MB112 : UINT; (* 27 *)
UINT16_3 AT %MB114 : UINT; (* 28 *)
UINT16_4 AT %MB116 : UINT; (* 29 *)
UINT16_5 AT %MB118 : UINT; (* 30 *)
INT8_1 AT %MB120 : SINT; (* 31 *)
INT8_2 AT %MB121 : SINT; (* 32 *)
INT8_3 AT %MB122 : SINT; (* 33 *)
INT8_4 AT %MB123 : SINT; (* 34 *)
INT8_5 AT %MB124 : SINT; (* 35 *)
UINT8_1 AT %MB125 : USINT; (* 36 *)
UINT8_2 AT %MB126 : USINT; (* 37 *)
UINT8_3 AT %MB128 : USINT; (* 38 *)
UINT8_4 AT %MB129 : USINT; (* 39 *)
UINT8_5 AT %MB130 : USINT; (* 40 *)
BOOL_1 AT %MX131.0 : BOOL; (* 41 *)
BOOL_2 AT %MX131.1 : BOOL; (* 42 *)
BOOL_3 AT %MX131.2 : BOOL; (* 43 *)
BOOL_4 AT %MX131.3 : BOOL; (* 44 *)
BOOL_5 AT %MX131.4 : BOOL; (* 45 *)
ARRAY_1 : ARRAY[1 .. 10] OF SINT; (* 46 *)
ARRAY_2 : ARRAY[1 .. 10] OF INT; (* 47 *)
ARRAY_3 : ARRAY[1 .. 10] OF DINT; (* 48 *)
ARRAY_4 : ARRAY[1 .. 10] OF LREAL;(* 49 *)
ARRAY_5 : ARRAY[1 .. 10] OF BOOL; (* 50 *)
END_VAR
Sprache / IDE | Beispielprogramm auspacken |
---|---|
Visual Basic 6 |