So I stepped back and put myself in their shoes - if I were trying to design a new assembly plant and I hoped to monitor HVAC, chemical tank farm, and such by Modbus/TCP, then what issues would hinder this? What details NOT included in the http://www.modbus-ida.org/ protocol specification would complicate true interoperability? I have many experiences of integration problems with Modbus masters and slaves from 2 different vendors not quite talking as expected. Usually the customer ends up PAYING one vendor or the other to change; or the customer has to buy a 3rd party box to fix the difference of opinion.
So how to avoid this up front? Here is the list I created:
- The required interface is Modbus/TCP running on standard Ethernet II frames and following the published specification at http://www.modbus-ida.org/.
- All devices must support at least 100M half-duplex Ethernet and if auto-negotiate is supported, they must be manually configurable to force 100M Half-Duplex.
- If the supplied product uses serial Modbus/RTU or Modbus/ASCII, then vendor must supply a configured, tested, and powered Modbus Ethernet-to-Serial bridge (such as the Digi One IA, model 70001862) to bridge this to Modbus/TCP on Ethernet.
- All data must be available and/or mirrored within the Modbus 4x or "Holding Register" memory area. The other areas can be optionally supported, but all 0x, 1x, and 3x data must be readable in the 4x memory area. For digital writes, support of single-bit writes (function 5) to the 0x area are acceptable. Products that require access to the 1x and 3x area to operate are not acceptable; access to 1x/3x area must be optional.
- Modbus 32-bit longs and floating points must be available in Modicon 984 Compatibility format, which means as two consecutive 16-bit big-endian registers, with the low word in the first register. Other forms (Daniels/Enron or high-word first) can exist but must be optional.
- All gateways or converters bridging non-Modbus data to Modbus must not provide stale data and must not require special "status registers" be monitored to confirm data validity. If the source device of the non-Modbus data is unavailable or the data is out-of-date, then Modbus/TCP requests must return an exception such as 0x0B until the source data is valid again.
- Register 4x00001 must exist and be readable to allow simple, predictable "comm tests".
- Software tools must function properly with slaves only supporting Modbus functions 3 and 16. Requiring diagnostic function 8 support is not acceptable.
- Software tools must be configurable to write a single register as either function 6 or 16.
- Software tools must be configurable to limit reads and write to user selectable limits; for example, the software must accept being limited to reading 1 register per transaction and writing 1 register per transaction.
- Software tools must allow setting to the Modbus/TCP "Unit Id" to a value other than zero. This is required for Ethernet-to-Serial bridging.
- Software tools must use the Modbus/TCP sequence number and modify it between polls. The tool must not leave it set as 0 or 1 all the time.
- To support future wide-area-network usage, all "Masters" must permit TCP socket opens to take up to 30 seconds.
- To support future wide-area-network usage, all "Masters" must permit slave timeouts be set to at least 30 seconds.
- To support future wide-area-network usage, all serial slave devices must have a configurable "gap" or intercharecter delay timeout. The Modbus spec's "3.5 character times" is problematic when dealing with radio & other error-correcting media.
- All devices must be capable of transport via wireless bridging by common Ethernet radio systems such as 802.11 bridges and more traditional 900Mhz line-of-sight bridges.
Now, will all vendors be able to meet all of these requirements? Probably not since many of them are not required per the Modbus-IDA specifications. However, at least this brings the issues up front to be addressed during the bid award phase. If custom firmware modifications are required, it can be addressed up front and not during factory acceptance testing.
Thanks for all the useful information. Just wondering why your "must-haves" include the Modicon 984 compatibility. I do not have a ton of modbus experience, but if words are in hi-lo order, why is it not preferred to have 4-byte values in hi-2-1-lo order? As with much of Modbus, probably "historical".
One word "MONEY" - repeated past job experience shows me regardless of which way you do 32-bits (Lo-Hi or Hi-Lo), you'll have some big customer come along who MUST have it the other way. Why lose business by being lazy?
You'll find suppliers highly geared towards Modicon PLC will do it at least Lo-Hi, while those who've never heard of Modicon (or compete with Modicon) tend to do it Hi-Lo.
Software-wise it's a no brainer to me. A few lines of code in the right place gives you either encoding.
Since I do object-oriented Python coding for Modbus, I just have a single routine called uint32_to_str() which takes the current context and returns a 4-byte binary string as Lo-Hi or Hi-Lo as required.
Post a Comment