UPCOMING¶ ↑
-
[BREAKING] Servers now support publishing multiple slaves
-
[BREAKING] RTUViaTCPClient/RTUViaTCPSlave are gone. Please just use RTUClient directly
-
[BREAKING] Proxy collections no longer return an array when requesting a single item.
-
Don't time out waiting to read a response that will never come from broadcast commands
-
Don't send responses to broadcast commands as a server
-
Properly function as a server in an environment with multiple RTU slaves
-
Server now supports promiscuous mode to dump the conversation happening between a master and other slaves.
-
Add read/write multiple registers function (server and client)
-
Add mask write register function to server
2017-03-30 Release 1.3.2¶ ↑
-
Fix Fixnum warning on Ruby 2.4
-
Add extension method to support unpacking 32-bit Int using little-endian order
2016-10-18 Release 1.3.0¶ ↑
-
Turn the following dependencies optional: serialport, gserver
2016-09-20 Release 1.2.8¶ ↑
-
Fix warning on ruby 2.3 when calling Timeout.timeout
2015-07-30 Release 1.2.7¶ ↑
-
RTUServer doesn't stop serving when there is no RTU messages. Pull request #37.
-
Fixed a bug with flushing buffer in RTUviaTCPClient.
-
Added validation for UDI in TCPServer. See request #38.
-
Added a warning message to ask use UID=255 for TCP Server according to the protocol specification.
2015-03-21 Release 1.2.6¶ ↑
-
Fixed issue #35.
2015-03-12 Release 1.2.5¶ ↑
-
Fixed issue #34.
2015-01-29 Release 1.2.4¶ ↑
-
Added ruby-2.2 compatibility
2015-01-29 Release 1.2.3¶ ↑
-
Fixed bug #30 in parsing command 'write_register' for server implementation part.
2013-10-28 Release 1.2.2¶ ↑
-
Fixed issue #29. The server part supports 2000 of coils/discrete inputs for reading instead of 125.
2013-06-28 Release 1.2.1¶ ↑
-
Fixed issue #27 for read_nonblock error on Windows
2013-03-12 Release 1.2.0¶ ↑
-
Transaction number mismatch doesn't throw exception in TCPSlave#query method. Now this method will wait correct transaction until timeout breaks waiting.
-
Added ruby-2.0 experimental compatibility
2012-07-17 Release 1.1.5¶ ↑
-
Fixed issue #24 for RTUClient.
2012-06-28 Release 1.1.4¶ ↑
-
Fixed issue #23.
-
Improved speed of the RTURTUViaTCP part.
2012-06-06 Release 1.1.3¶ ↑
-
Fixed issue #22
2012-05-12 Release 1.1.2¶ ↑
-
Fixed issue #20
2012-04-12 Release 1.1.1¶ ↑
-
Fixed issue #15
2011-10-29 Release 1.1.0¶ ↑
-
Fixed issue #12. Added option Slave#raise_exception_on_mismatch to turn to check response and raise exception if it's mismatch.
-
Added pass options :debug, :raise_exception_on_mismatch, :read_retry_timeout, :read_retries from clients to slaves
“`ruby @cl.debug = true
@cl.with_slave(1) do |slave_1| slave_1.debug #=> true end @cl.with_slave(2) do |slave_2| slave_2.debug = false slave_2.debug #=> false end
“`
-
Deleted dependency with
serialport
gem. Install it manual for using RTU
2011-08-10 Release 1.0.4¶ ↑
-
Fixed issue #11
2011-07-17 Release 1.0.3¶ ↑
-
Fixed issue #10
-
Added new options for TCPServer#new and RTUViaTCPServer#new :host - ip of host server (default 127.0.0.1) :max_connection - maximum (client default 4)
2011-07-1 Release 1.0.2¶ ↑
-
Fixed issue #9
2011-06-30 Release 1.0.1¶ ↑
-
Fixed issue #8
2011-06-27 Release 1.0.0¶ ↑
New API for client part of library¶ ↑
Example:
“`ruby require 'rmodbus'
ModBus::TCPClient.new('127.0.0.1', 8502) do |cl| cl.with_slave(1) do |slave| # Read a single holding register at address 16 slave.holding_registers[16] # Write a single holding register at address 16 slave.holding_registers[16] = 123 # Read holding registers 16 through 20 slave.holding_registers[16..20] # Write holding registers 16 through 20 with some values slave.holding_registers[16..20] = [1, 2, 3, 4, 5] end end
“`
for more information see
Conversion to/from 32bit registers¶ ↑
Some modbus devices use two registers to store 32bit values. RModbus provides some helper functions to go back and forth between these two things when reading/writing. The built-in examples assume registers in a particular order but it's trivial to change.
“`ruby # Reading values in multiple registers (you can read more than 2 and convert them all so long as they are in multiples of 2) res = slave.holding_registers res.inspect => [20342, 17344] res.to_32i => [1136676726] res.to_32f => [384.620788574219]
# Writing 32b values to multiple registers cl.holding_registers[0..1] = [1136676726].from_32i cl.holding_registers[0..1] => [20342, 17344] cl.holding_registers[2..3] = [384.620788574219].from_32f cl.holding_registers[2..3] => [20342, 17344]
“`
Support JRuby¶ ↑
Now you could use RModBus on JRuby without RTU implementation.
RTU classes requires gem serialport which currently not compatible with JRuby