Vai al contenuto
PLC Forum


RS485 tra Wago e Controllino


Lwyrn

Messaggi consigliati

Salve a tutti,
Voglio far comunicare un Controllino Mega ed un PLC Wago tramite RS485 RTU.
Sto usando un Wago PFC200 750-8212 con un modulo 750-653/003-000.
Lascio qui un link con il manuale del modulo
https://www.wago.com/medias/m07500653-00000000-0en.pdf?context=bWFzdGVyfGRvd25sb2Fkc3w0NDEwODF8YXBwbGljYXRpb24vcGRmfGRvd25sb2Fkcy9oNGMvaDkzLzk4NjY5NzI0MzAzNjYucGRmfDRhZWZiOWI3NjI5M2U2ZGYzYmQwMTRkODlmY2FlYzQyM2M4ZmEyODcwMTU2MjA4OWZlZGQ5ZDMwNTgzOTJlODY&attachment=true
Sto usando il diagramma di collegamento che c'è alla pagina 13 (Bus Connection).

Screenshot-2019-12-03-at-17-44-31.png

Ho collegato il TX+ and RX+ del modulo al terminale RS485+ del controllino e TX- e RX- al terminale RS485 - .
Alimentando il controllino a 24v ed usando il Serial Monitor trmaite la porta USB.

Sto usando la demo del Controllino per la lettura

itialize serial port for debug messages. */
  Serial.begin(9600);
  
  /* Initialize CONTROLLINO RS485 direction control DE/RE pins and Serial3 */
  Controllino_RS485Init(9600);
  Controllino_RS485RxEnable();

  Serial.println("Recieving RS485... 1");
}

void loop() {
  
  // send data only when you receive data:
  if (Serial3.available() > 0)
  {
    // read the incoming byte from RS485
    incomingByte = Serial3.read();
    // say what you got:
    Serial.print("I received (DEC): ");
    Serial.println(incomingByte, DEC);

    // and send it back to RS485
    Controllino_RS485TxEnable();
    Serial3.write(incomingByte);
    Serial3.flush(); // wait until the trasmission is complete
    Controllino_RS485RxEnable();
  }
  
}

E la demo della libreria WagoAppPlcModBus per la comunicazione come master


PROGRAM PLC_PRG
VAR
    
    test1 : BYTE;
    test2 : BYTE;
    mySerialMaster    :    FbMbMasterSerial := (
    xConnect    := TRUE,
    udiBaudrate := 9600,
    usiDataBits := 8,
    eParity    :=    eTTYParity.None,
    eStopBits    := eTTYHandshake.None,
    ePhysical    := eTTYPhysicalLayer.RS485_Halfduplex,
    eFrameType    :=    eMbFrameType.RTU,
    tTimeOut    :=    T#50MS
);
utQuery    :    typMbQuery    := (
    bUnitId    :=     1,
    bFunctionCode    :=    16#04,
    uiReadAddress    := 0,
    uiReadQuantity    :=    10,
    uiWriteAddress    :=    0,
    uiWriteQuantity    :=    8,
    awWriteData    :=    [1,1,1,1,1,1,1,1,1]
);

xTxTrigger    :    BOOL;
utResponse    :    typMbResponse;
tonDelay    :    TON    :=    (PT :=    T#20MS);
END_VAR

IoConfig_Globals_Mapping.an1 := 27648;

tonDelay( IN := (NOT tonDelay.Q) AND (NOT xTxTrigger));
xTxTrigger S= tonDelay.Q;

mySerialMaster(
    I_Port    :=    IoConfig_Globals.RS485_Interface_Adjust,
    utQuery    :=    utQuery,
    xTrigger    := xTxTrigger,
    utResponse    :=    utResponse
);


Però non sembra arrivare assolutamente nulla al Controllino.
Cosa sto sbagliando?

Grazie

Modificato: da Lwyrn
Link al commento
Condividi su altri siti


Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...