-> Hier kostenlos registrieren
Hallo Zusammen,
ich beschäftige mich zur Zeit mit Codesys und einer Wago 750-8203, sowie diversen Ein- und Ausgangskarten. Ich möchte ein Programm schreiben, dass den Bus ausliest, die Karten erkennt, die Adressen setzt und einer Variablen (Struktur) zuweist damit später darauf zugegriffen werden kann. Vom Prinzip wie die Software " IO-Checker " von Wago selbst nur das ich dieses über Codesys erreichen möchte. Ich möchte die manuelle Eingabe der Karten über die Steuerungskonfiguration umgehen und dieses automatisch realisieren. Mein Problem ist dabei die Adresszuweisung zu dem "symbolischen" Variablennamen da dieses variable ist. Es soll unabhängig von der Reihenfolge der Karten erfolgen da diese in verschiedenen Systemen unterschiedlich angeordnet sein können. Ich möchte in einer Struktur die Adresse festhalten und der Strukturvariablen zuweisen damit später darauf zugegriffen werden kann und ich die Ein- oder Ausgänge über die Variablennamen setzten kann. Bis jetzt habe ich das Programm soweit geschrieben, dass ich den Bus auslese, die Karten erkenne und den Pointer auf die nächste Adresse zeigen lassen kann. Dies tue ich über die Bibliothek "WagoLibKBUS.lib" womit ich über den Offset den Pointer auf die Karten zeigen lasse. Im Folgeden ist ein Code-Beispiel für eine digitale Eingangskarte. An der Stelle wo die einzelnen Bits über den Pointer zugewiesen werden möchte ich nicht den Zustand "TRUE oder FALSE" zuweisen sondern die jeweilige Adresse speichern. Ich hoffe mir kann hier weitergeholfen werden. Vielen Dank im voraus.
IF 34817 = ModulInfo.dwTypname [ i ] THEN (*Karte 750-430 = 34817*)
IF FirstInput = 0 THEN (* Abfrage ob erste Karte vorliegt*)
ptIN := ptIN; (*wenn ja, dann Startdresse zuweisen*)
FirstInput := i; (* Merken, dass bereits erste Karte geschrieben wurde*)
ELSE
ptIN := ptIN + ( ModulInfo.dwIPI_ByteOffset [ i ] - ModulInfo.dwIPI_ByteOffset [ LastInput ] ) ; (* Pointer auf die nächste Adresse zeigen lassen*)
END_IF;
HardwareIO.xDigitalInput [ HardwareIO.xDigitalInputCount + 1 ] := ptIN^.0; (* Im Moment zuweisung der Eingänge (TRUE OR FALSE) zur Struktur ob und wieviele Eingänge vorhanden sind *)
HardwareIO.xDigitalInput [ HardwareIO.xDigitalInputCount + 2 ] := ptIN^.1;
HardwareIO.xDigitalInput [ HardwareIO.xDigitalInputCount + 3 ] := ptIN^.2;
HardwareIO.xDigitalInput [ HardwareIO.xDigitalInputCount + 4 ] := ptIN^.3;
HardwareIO.xDigitalInput [ HardwareIO.xDigitalInputCount + 5 ] := ptIN^.4;
HardwareIO.xDigitalInput [ HardwareIO.xDigitalInputCount + 6 ] := ptIN^.5;
HardwareIO.xDigitalInput [ HardwareIO.xDigitalInputCount + 7 ] := ptIN^.6;
HardwareIO.xDigitalInput [ HardwareIO.xDigitalInputCount + 8 ] := ptIN^.7;
HardwareIO.xDigitalInputCount := HardwareIO.xDigitalInputCount + 8; (* Anzahl der Eingänge festhalten *)
LastInput := i; (*Merken der letzten gefunden analogen Inputkarte zum berechnen desOffsets*)
END_IF;
ich beschäftige mich zur Zeit mit Codesys und einer Wago 750-8203, sowie diversen Ein- und Ausgangskarten. Ich möchte ein Programm schreiben, dass den Bus ausliest, die Karten erkennt, die Adressen setzt und einer Variablen (Struktur) zuweist damit später darauf zugegriffen werden kann. Vom Prinzip wie die Software " IO-Checker " von Wago selbst nur das ich dieses über Codesys erreichen möchte. Ich möchte die manuelle Eingabe der Karten über die Steuerungskonfiguration umgehen und dieses automatisch realisieren. Mein Problem ist dabei die Adresszuweisung zu dem "symbolischen" Variablennamen da dieses variable ist. Es soll unabhängig von der Reihenfolge der Karten erfolgen da diese in verschiedenen Systemen unterschiedlich angeordnet sein können. Ich möchte in einer Struktur die Adresse festhalten und der Strukturvariablen zuweisen damit später darauf zugegriffen werden kann und ich die Ein- oder Ausgänge über die Variablennamen setzten kann. Bis jetzt habe ich das Programm soweit geschrieben, dass ich den Bus auslese, die Karten erkenne und den Pointer auf die nächste Adresse zeigen lassen kann. Dies tue ich über die Bibliothek "WagoLibKBUS.lib" womit ich über den Offset den Pointer auf die Karten zeigen lasse. Im Folgeden ist ein Code-Beispiel für eine digitale Eingangskarte. An der Stelle wo die einzelnen Bits über den Pointer zugewiesen werden möchte ich nicht den Zustand "TRUE oder FALSE" zuweisen sondern die jeweilige Adresse speichern. Ich hoffe mir kann hier weitergeholfen werden. Vielen Dank im voraus.
IF 34817 = ModulInfo.dwTypname [ i ] THEN (*Karte 750-430 = 34817*)
IF FirstInput = 0 THEN (* Abfrage ob erste Karte vorliegt*)
ptIN := ptIN; (*wenn ja, dann Startdresse zuweisen*)
FirstInput := i; (* Merken, dass bereits erste Karte geschrieben wurde*)
ELSE
ptIN := ptIN + ( ModulInfo.dwIPI_ByteOffset [ i ] - ModulInfo.dwIPI_ByteOffset [ LastInput ] ) ; (* Pointer auf die nächste Adresse zeigen lassen*)
END_IF;
HardwareIO.xDigitalInput [ HardwareIO.xDigitalInputCount + 1 ] := ptIN^.0; (* Im Moment zuweisung der Eingänge (TRUE OR FALSE) zur Struktur ob und wieviele Eingänge vorhanden sind *)
HardwareIO.xDigitalInput [ HardwareIO.xDigitalInputCount + 2 ] := ptIN^.1;
HardwareIO.xDigitalInput [ HardwareIO.xDigitalInputCount + 3 ] := ptIN^.2;
HardwareIO.xDigitalInput [ HardwareIO.xDigitalInputCount + 4 ] := ptIN^.3;
HardwareIO.xDigitalInput [ HardwareIO.xDigitalInputCount + 5 ] := ptIN^.4;
HardwareIO.xDigitalInput [ HardwareIO.xDigitalInputCount + 6 ] := ptIN^.5;
HardwareIO.xDigitalInput [ HardwareIO.xDigitalInputCount + 7 ] := ptIN^.6;
HardwareIO.xDigitalInput [ HardwareIO.xDigitalInputCount + 8 ] := ptIN^.7;
HardwareIO.xDigitalInputCount := HardwareIO.xDigitalInputCount + 8; (* Anzahl der Eingänge festhalten *)
LastInput := i; (*Merken der letzten gefunden analogen Inputkarte zum berechnen desOffsets*)
END_IF;