Modbus Read/Write Command Line Demo
For this demo we will connect up the the the MyPi board to a second PC running Windows and a PLC simulator, we'll then show how to read/write RTU registers.
At this point you should have the ISO-485 card installed and successfully installed the mbpoll program.
The extra piece of hardware we will need to complete this demonstration will be a RS232-RS485 converter for the Windows PC in order to simulate Modbus RTU comms :
These two items should be wired up as follows :
The biggest hurdle with RS485 is the lack of consistency in the wiring names for D+/D- as a result it's not unusual for these two lines to often need swapping. Here mincom & putty/hyperterminal can be useful to confirm the two units are wired up correctly.
Next we need to install the PLC simulator, to do this download the program from the below website :
This is a self contained single EXE file, so does not contain an installer - take note of the requirement for a Visual C++ component if you have problems running the software.
Once loaded you'll be presented with a screen like the below, take note of the three highlighted areas:
Press F1 at any time for information on how the program works
- The FMT dialog box controls how the registers are shown/configured, we'll keep this at decimal +/- for the moment.
- The cable & port icon controls whether the program is "plugged in" to the selected COM port
- The register window is where most of the action takes place here, in this area click on each of the first row and fill in to match the above.
next on the command line run the following :
# mbpoll -a 1 -b 9600 -P none -t 4 -r 1 -c 5 /dev/ttyAMA0 -1
Broken down, this will read from the device at address 1 (-a 1) using baud rate 9600 8N1 (-b 9600 -P none) the program will request 5 registers (-c 5) starting at register 1 (-r 1) using function code 4 to read the holding registers (-t 4). The -1 on the end means 'just make 1 poll and stop'
The Raspberry Pi has a weird quirk with it's serial port, so the first time it's opened a spurious character is send out, this may result in a CRC error the first time the program is run.
This is the output from a successful read :
Now we'll use the same program to write a register, the below will write 1 register value (555) starting at register 5 (-r 5) in address range 4 (-t 4)
mbpoll -a 1 -b 9600 -P none -t 4 -r 5 /dev/ttyAMA0 -1 555
And checking the main windows program we can see the writes have been done correctly
By clicking on the Comms button you can also see the request/response frames :
This is a useful website to help with understanding the Modbus protocol :
The mbpoll program uses an open source C library called libmodbus, which has a very open licence making it ideal for inclusion in any end application and short cutting development time.