Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Wago PLC come Master e Controllino Mega come slave

PLC, servomotori, inverter...robot

Moderatori: Foto Utentedimaios, Foto Utentecarlomariamanenti

0
voti

[1] Wago PLC come Master e Controllino Mega come slave

Messaggioda Foto UtenteLwyrn » 3 dic 2019, 19:06

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).

Immagine

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

Sto usando la demo del Controllino per la lettura
Codice: Seleziona tutto
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

Codice: Seleziona tutto

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
Avatar utente
Foto UtenteLwyrn
5 2
 
Messaggi: 8
Iscritto il: 18 mag 2014, 13:20

Torna a Automazione industriale ed azionamenti

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti