# WAGO PFC 200 Controller zu MODBUS TCP SLAVE verbinden



## eva.len (13 März 2019)

Hallo liebe Community,

ich hoffe das ihr mir helfen könnt!
Ich habe ein Problem damit die Werte meines Modbus TCP Slaves einzulesen. Dieser ist ein a-eberle PQI-DA-Smart, der über Modbus TCP SPannung,Strom usw.. ausgeben kann. Ich habe versucht dies über den WAGO Datalogger darzustellen, jedoch schreibt der in die .csv Datei nur die Uhrzeit und die Werte 0.00. Er bekommt also keinen Input. Ich bekomme es nach langen versuchen leider immer noch nicht hin die Werte darzustellen bzw. auszulesen!


```
PROGRAM PLC_PRG
VAR

    Datalogger: WagoAppDatalogger.FbDatalogger;
    xActivate: BOOL := TRUE;
    aValues: ARRAY [1..MAX_CHANNELS] OF REAL;
    xEvent: BOOL := TRUE;
    typConfigParameters: typConfigDatalogger;
    leistung: ARRAY [1..MAX_CHANNELS] OF WORD;
    ChannelConfig : typAIChannel;
    oDatalogger : FbDatalogger;
//modbus slave    
modbus_slave: WagoAppPlcModbus.FbMbSimpleServerTcp;
    //xOpen: BOOL;
    //wPort: WORD;
    //bUnitID: BYTE;
    //utKeepAlive: BOOL;
    xEnable: BOOL := TRUE;
    //myInputRegisters: POINTER TO WORD;
    //myHoldingRegisters : WORD;
    //awHoldingRegisters: WORD;
    //Modbus Slave
xOpen : BOOL := TRUE;
wPort :WORD := 502;
bUnitID : BYTE:= 1;
//utKeepAlive : BOOL := TRUE;
myInputRegisters    :   ARRAY[100..200] OF WORD;    // Modbus word address 100 .. 200
    myHoldingRegisters  :   ARRAY[0..20] OF WORD;       // Modbus word address   0 .. 20
    
    MB_DI0:BYTE;
    MB_DI1:BYTE;
    awInputRegisters: ARRAY [100..200] OF WORD;
    awHoldingRegisters: ARRAY [0..20] OF WORD;
END_VAR
```


```
//Parametrierung der Speicherung
        typConfigParameters.bDatalogger_type:=3;
        typConfigParameters.atypChannelConfig[1].xChannelExists := TRUE;
        typConfigParameters.atypChannelConfig[1].sChannelName := 'Leistung';
        
        typConfigParameters.xCyclicLogging := TRUE;
        typConfigParameters.bInterval := 3;
        typConfigParameters.uiIntervalFactor := 2;
        
        
        typConfigParameters.bDateFormat := 9;
        typConfigParameters.bTimeFormat:=1;
        typConfigParameters.sFilename := 'test.csv';
    


    modbus_slave(
        awInputRegisters := myInputRegisters,
        awHoldingRegisters := myHoldingRegisters,
        awInputRegisters    := myInputRegisters,
        awHoldingRegisters  := myHoldingRegisters);




Datalogger(
    xActivate:= xActivate, 
    aValues:= aValues, 
    xEvent:= xEvent, 
    typConfigParameters:= typConfigParameters, 
    oStatus=> , 
    sStatus=> , 
    xReady=> );
    
    modbus_slave(
    xOpen:= xOpen, 
    wPort:= wPort, 
    utKeepAlive:= , 
    xIsOpen=> , 
    xError=> , 
    oStatus=> , 
    udiConnectedClients=> , 
    bUnitId:= bUnitID, 
    axDiscreteInputs:= , 
    axCoils:= , 
    awInputRegisters:= , 
    awHoldingRegisters:= , 
    oMbAccessInfo=> );
```


----------



## Tobsucht (13 März 2019)

Hallo,

wenn das Gerät a-eberle PQI-DA-Smart ein Modbus TCP Slave ist brauchst Du einen Modbus TCP Master.
Zwei Slaves können nicht miteinander reden.
Du kannst z.B. den fbMbMasterTCP verwenden.

Es fehlt aber generell das Beschreiben des Arrays aValues.
Die Daten müssen ja vom Modbus Baustein an den Datalogger übergeben werden.

Beim Server fehlt die Zuweisung der Arrays axDiscreteInputs und axCoils, dafür sind die Input und Holding Register doppelt zugewiesen.

Viele Bausteine bieten den Ausgang oStatus. Hier kann der Status des Bausteins ausgelesen werden. Wobei sServerInfo vom Datentyp String ist:
modbus_slave.oStatus.ShowResult(sDescription => sServerInfo );


Grüße


----------



## eva.len (13 März 2019)

Hallo Tobsucht,

auf den Master habe ich ganz vergessen, aber hatte diese nur in der Übersicht Verbunden und die Kommunikation auf Master (PFC 200) zum Slave PQ-DA-Smart vergeben.
Die Beschreibung der arrays habe ich leider nicht hinbekommen und würde dich fragen ob du mir helfen könntest dabei und bezüglich den Arrays axDiscreteInputs und axCoils, diese habe ich jetzt auch zugewiesen.

Grüße


----------



## Tobsucht (19 März 2019)

Hallo,

um die Sache noch mal zu verdeutlichen:
wenn das Gerät a-eberle PQI-DA-Smart ein Modbus TCP Slave ist brauchst Du einen Modbus TCP Master im PFC200.
Der Funktionsbaustein FbMbSimpleServerTcp ist ein Slave.

Der in der Kachelansicht hinzugefügte Master gehört zum Modbus Konfigurator und ist unabhängig von der Bibliothek WagoAppPlcModbus.

Grüße


----------



## eva.len (20 März 2019)

Hallo lieber Tobsucht,

ich habe herausgefunden, dass dieses Gerät den Modbus TCP nicht unterstützt. Ich werde das ganze jetzt mit einem Smart Meter von Algodue machen. Nur leider habe ich noch immer Probleme mit dem einlesen meines Arrays da er das nicht erkennt bzw. er mir vorsagt das ein plötzliches Auftreten eines arrays fehlerhaft ist. Jedoch weiß ich nicht wie ich die arrays in Strukturierten Text einlese wenn du da einen Beispielcode wüsstest, würde mich das schon sehr viel weiterbringen. Es handelt sich um das aValues Array.

Grüße


----------

