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

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

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)