I have a Micro820 connected via Modbus TCP. Connection is good and able to read Tags and inputs/outputs, but unable to write (error says unable to write to that node). Analogue writes are OK.
I've checked all read/write settings and all look ok. Can't see why I should not be able to write Boolean states to the PLC.
Thanks in advance.
Can you give an example of the tag you are trying to write?
Modbus Type = Discrete Input, Modbus Address = 3
Data Type = BOOL, Modbus Mapping = 100003
Is this a physical input address?
I'm not as familiar with the Micro820s however usually when this error occurs then it's related to writing to an I/O address rather than an internal memory address.
Discrete inputs and Input Registers are fundamentally read-only via Modbus. Modbus literally has no function code to write to these. Inside real PLCs, the logic itself generally cannot write to them either.
So, why do you need to write to these addresses?
No, it's an internal memory bit (TAG).
I also can't write to physical inputs on the PLC from Ignition, but thought that might be because they are actual physical inputs with devices connected, which could cause conflict.
I can write analogue data to the Modbus Mapping, but not to an actual analogue input. Reading is fine for all into Ignition from the PLC.
That's interesting, not read that before.
I want to be able to control outputs from Ignition/Designer (teaching students). I can only seem to connect to out Micro820 PLCs via Modbus TCP.
Then you chose the wrong kind of Modbus address in the PLC. You should have chosen coil memory. The 0xxxxx memory range. Which will be
Cx in Ignition.
I thought 0xxxxx for Coils (outputs), so have been using 1xxxxx for Digital Inputs. I can read the state of these in Ignition, but not write to them,
Coils and Holding registers are readable and writable at the protocol level in Modbus. Discrete Inputs and Input Registers are only readable in Modbus. Use the latter if you do not want an external system to be able to write. Use the former if you do. That's it.
Thanks, got it working by writing to Tags with 0xxxxx addresses (added to Modbus Mapping) and used these Tags to switch on outputs.