Hallo nochmal,
mittlerweile bin ich schon ein paar Schritte weiter. Die Kommunikation zwischen Feldbuscontroller und Koppler läuft und ist soweit programmiert. Jetzt möchte ich eine weitere Modbus Verbindung zwischen einem "Nicht-Wago"-Modbusteilnehmer und dem Controller aufbauen und dafür die Eingänge und Ausgänge des Controllers schreiben / lesen.
Dafür habe ich den Baustein "mySimpleTCPServer" verwendet in denen die folgenden Variablen initialisiert werden:
Code:
// Programm: ModbusSlave
//------------------------------------------------------------------------------------
myDiscreteInputs : ARRAY[0..20] OF BOOL; // Modbus bit address 0 .. 20
myCoils : ARRAY[0..20] OF BOOL; // Modbus bit address 0 .. 20
myInputRegisters : ARRAY[0..20] OF WORD; // Modbus word address 0 .. 20
myHoldingRegisters : ARRAY[0..20] OF WORD; // Modbus word address 0 .. 20
//------------------------------------------------------------------------------------
Soweit ich verstanden habe, kann ich die Klemmen des Controllers mit den 4 Registern (DiscreteInputs, Coils, InputRegisters, HoldRegisters) deklarieren. Dafür habe ich folgenden Code geschrieben:
Code:
// Digitale Ausgänge
IoConfig_Globals_Mapping.xOut11 := ModbusSlave.myCoils[0];
IoConfig_Globals_Mapping.xOut12 := ModbusSlave.myCoils[1];
IoConfig_Globals_Mapping.xOut21 := ModbusSlave.myCoils[2];
IoConfig_Globals_Mapping.xOut22 := ModbusSlave.myCoils[3];
// Analoge Eingänge
xTemp11 := INT_TO_WORD(IoConfig_Globals_Mapping.xTemp11); --> hab versucht mir das "zurechtzufuschen", aber auch das klappt nicht :eek:
ModbusSlave.myInputRegisters[0] := IoConfig_Globals_Mapping.xTemp11;
1. Die digitalen Ausgänge kann ich damit schreiben (-> OK). Ist diese Art der Initialisierung denn auch so vorgesehen, dass ich das myCoil[0..3] mit je einem Digitalausgang der Klemmen verknüpfe?
2. Beim Auslesen der Temperaturen ist die Klemmenvariable "IoConfig_Globals_Mapping.xTemp11" als INT deklariert (vorzeichenbehaftet, Klemme ist ein AI für Temperatur TYP K Messung), das Register "ModbusSlave.myInputRegisters[0]" aber als WORD. Ich kann mir beim besten Willen nicht vorstellen, dass man die Klemmen mit den Registern auf diese Art und Weise deklariert. Zudem funktioniert das Auslesen der Temperatureingänge mit diesem Programmcode auch nicht. Fehler: "PLC_PRG: C0037: 'myInputRegisters' ist kein Eingang von 'ModbusSlave' (-> NOK)
Beste Grüße
Lesezeichen