rmodbus 1.1.3 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/NEWS.md +16 -14
- data/README.md +2 -0
- data/examples/perfomance_rtu_via_tcp.rb +55 -0
- data/lib/rmodbus/rtu.rb +12 -4
- data/lib/rmodbus/tcp_server.rb +0 -1
- data/lib/rmodbus/version.rb +1 -1
- data/spec/logging_spec.rb +2 -1
- data/spec/rtu_client_spec.rb +2 -1
- data/spec/rtu_via_tcp_client_spec.rb +1 -1
- metadata +48 -31
data/NEWS.md
CHANGED
@@ -1,13 +1,18 @@
|
|
1
|
-
2012-06-
|
2
|
-
|
1
|
+
###2012-06-28 Release 1.1.4
|
2
|
+
|
3
|
+
1. Fixed issue [#23](https://github.com/flipback/rmodbus/issues/23).
|
4
|
+
2. Improved speed of the RTU\RTUViaTCP part.
|
5
|
+
|
6
|
+
###2012-06-06 Release 1.1.3
|
7
|
+
|
3
8
|
1. Fixed issue [#22](https://github.com/flipback/rmodbus/issues/22)
|
4
9
|
|
5
|
-
2012-05-12 Release 1.1.2
|
6
|
-
|
10
|
+
###2012-05-12 Release 1.1.2
|
11
|
+
|
7
12
|
1. Fixed issue [#20](https://github.com/flipback/rmodbus/issues/20)
|
8
13
|
|
9
|
-
2012-04-12 Release 1.1.1
|
10
|
-
|
14
|
+
###2012-04-12 Release 1.1.1
|
15
|
+
|
11
16
|
1. Fixed issue [#15](https://github.com/flipback/rmodbus/issues/15)
|
12
17
|
|
13
18
|
2011-10-29 Release 1.1.0
|
@@ -31,26 +36,23 @@
|
|
31
36
|
|
32
37
|
3. Deleted dependency with `serialport` gem. Install it manual for using RTU
|
33
38
|
|
34
|
-
2011-08-10 Release 1.0.4
|
35
|
-
|
39
|
+
###2011-08-10 Release 1.0.4
|
40
|
+
|
36
41
|
1. Fixed issue [#11](https://github.com/flipback/rmodbus/issues/11)
|
37
42
|
|
38
43
|
|
39
|
-
2011-07-17 Release 1.0.3
|
40
|
-
====================================
|
44
|
+
###2011-07-17 Release 1.0.3
|
41
45
|
|
42
46
|
1. Fixed issue #10
|
43
47
|
2. Added new options for TCPServer#new and RTUViaTCPServer#new
|
44
48
|
:host - ip of host server (default 127.0.0.1)
|
45
49
|
:max_connection - maximum (client default 4)
|
46
50
|
|
47
|
-
2011-07-1 Release 1.0.2
|
48
|
-
====================================
|
51
|
+
###2011-07-1 Release 1.0.2
|
49
52
|
|
50
53
|
1. Fixed issue #9
|
51
54
|
|
52
|
-
2011-06-30 Release 1.0.1
|
53
|
-
====================================
|
55
|
+
###2011-06-30 Release 1.0.1
|
54
56
|
|
55
57
|
1. Fixed issue #8
|
56
58
|
|
data/README.md
CHANGED
@@ -32,6 +32,7 @@ Download and install RModBus with the following
|
|
32
32
|
Example
|
33
33
|
------------------------------------
|
34
34
|
|
35
|
+
```ruby
|
35
36
|
require 'rmodbus'
|
36
37
|
|
37
38
|
ModBus::TCPClient.new('127.0.0.1', 8502) do |cl|
|
@@ -49,6 +50,7 @@ Example
|
|
49
50
|
slave.holding_registers[16..20] = [1, 2, 3, 4, 5]
|
50
51
|
end
|
51
52
|
end
|
53
|
+
```
|
52
54
|
|
53
55
|
GitHub
|
54
56
|
----------------------------------
|
@@ -0,0 +1,55 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__),'../lib')
|
2
|
+
|
3
|
+
require 'rmodbus'
|
4
|
+
require 'benchmark'
|
5
|
+
|
6
|
+
include ModBus
|
7
|
+
|
8
|
+
TIMES = 1000
|
9
|
+
|
10
|
+
srv = ModBus::RTUViaTCPServer.new 1502
|
11
|
+
srv.coils = [0,1] * 50
|
12
|
+
srv.discrete_inputs = [1,0] * 50
|
13
|
+
srv.holding_registers = [0,1,2,3,4,5,6,7,8,9] * 10
|
14
|
+
srv.input_registers = [0,1,2,3,4,5,6,7,8,9] * 10
|
15
|
+
srv.start
|
16
|
+
|
17
|
+
|
18
|
+
cl = RTUViaTCPClient.new('127.0.0.1', 1502)
|
19
|
+
cl.with_slave(1) do |slave|
|
20
|
+
Benchmark.bmbm do |x|
|
21
|
+
x.report('Read coils') do
|
22
|
+
TIMES.times { slave.read_coils 0, 100 }
|
23
|
+
end
|
24
|
+
|
25
|
+
x.report('Read discrete inputs') do
|
26
|
+
TIMES.times { slave.read_discrete_inputs 0, 100 }
|
27
|
+
end
|
28
|
+
|
29
|
+
x.report('Read holding registers') do
|
30
|
+
TIMES.times { slave.read_holding_registers 0, 100 }
|
31
|
+
end
|
32
|
+
|
33
|
+
x.report('Read input registers') do
|
34
|
+
TIMES.times { slave.read_input_registers 0, 100 }
|
35
|
+
end
|
36
|
+
|
37
|
+
x.report('Write single coil') do
|
38
|
+
TIMES.times { slave.write_single_coil 0, 1 }
|
39
|
+
end
|
40
|
+
|
41
|
+
x.report('Write single register') do
|
42
|
+
TIMES.times { slave.write_single_register 100, 0xAAAA }
|
43
|
+
end
|
44
|
+
|
45
|
+
x.report('Write multiple coils') do
|
46
|
+
TIMES.times { slave.write_multiple_coils 0, [1,0] * 50 }
|
47
|
+
end
|
48
|
+
|
49
|
+
x.report('Write multiple registers') do
|
50
|
+
TIMES.times { slave.write_multiple_registers 0, [0,1,2,3,4,5,6,7,8,9] * 10 }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
cl.close
|
55
|
+
srv.stop
|
data/lib/rmodbus/rtu.rb
CHANGED
@@ -23,7 +23,6 @@ module ModBus
|
|
23
23
|
msg = nil
|
24
24
|
while msg.nil?
|
25
25
|
msg = io.read(2)
|
26
|
-
sleep(0.01)
|
27
26
|
end
|
28
27
|
|
29
28
|
function_code = msg.getbyte(1)
|
@@ -45,11 +44,22 @@ module ModBus
|
|
45
44
|
end
|
46
45
|
end
|
47
46
|
|
47
|
+
def clean_input_buff
|
48
|
+
begin
|
49
|
+
# Read up to 1500 bytes of trash.
|
50
|
+
@io.read_nonblock(1500)
|
51
|
+
rescue Errno::EAGAIN
|
52
|
+
# Ignore the fact we couldn't read.
|
53
|
+
rescue Exception => e
|
54
|
+
raise e
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
48
58
|
def send_rtu_pdu(pdu)
|
49
59
|
msg = @uid.chr + pdu
|
50
60
|
msg << crc16(msg).to_word
|
51
61
|
|
52
|
-
|
62
|
+
clean_input_buff
|
53
63
|
@io.write msg
|
54
64
|
|
55
65
|
log "Tx (#{msg.size} bytes): " + logging_bytes(msg)
|
@@ -72,7 +82,6 @@ module ModBus
|
|
72
82
|
end
|
73
83
|
end
|
74
84
|
|
75
|
-
|
76
85
|
def read_rtu_request(io)
|
77
86
|
# Read the slave_id and function code
|
78
87
|
msg = io.read(2)
|
@@ -112,7 +121,6 @@ module ModBus
|
|
112
121
|
log "Server TX (#{resp.size} bytes): #{logging_bytes(resp)}"
|
113
122
|
io.write resp
|
114
123
|
end
|
115
|
-
sleep(0.01)
|
116
124
|
end
|
117
125
|
end
|
118
126
|
|
data/lib/rmodbus/tcp_server.rb
CHANGED
data/lib/rmodbus/version.rb
CHANGED
data/spec/logging_spec.rb
CHANGED
@@ -42,6 +42,7 @@ begin
|
|
42
42
|
@sp = mock('Serial port')
|
43
43
|
SerialPort.should_receive(:new).with("/dev/port1", 9600, 7, 2, SerialPort::ODD).and_return(@sp)
|
44
44
|
|
45
|
+
@sp.stub!(:read_timeout)
|
45
46
|
@sp.stub!(:read_timeout=)
|
46
47
|
|
47
48
|
@slave = ModBus::RTUClient.new("/dev/port1", 9600, :data_bits => 7, :stop_bits => 2, :parity => SerialPort::ODD).with_slave(1)
|
@@ -51,7 +52,7 @@ begin
|
|
51
52
|
it 'should log rec\send bytes' do
|
52
53
|
request = "\x3\x0\x1\x0\x1"
|
53
54
|
@sp.should_receive(:write).with("\1#{request}\xd5\xca")
|
54
|
-
@sp.should_receive(:
|
55
|
+
@sp.should_receive(:read_nonblock).and_return("\xff\xff") # Clean a garbage
|
55
56
|
@sp.should_receive(:read).with(2).and_return("\x1\x3")
|
56
57
|
@sp.should_receive(:read).with(1).and_return("\x2")
|
57
58
|
@sp.should_receive(:read).with(4).and_return("\xff\xff\xb9\xf4")
|
data/spec/rtu_client_spec.rb
CHANGED
@@ -5,7 +5,8 @@ describe ModBus::RTUClient do
|
|
5
5
|
@sp = mock('Serial port')
|
6
6
|
SerialPort.should_receive(:new).with("/dev/port1", 9600, 8, 1, 0).and_return(@sp)
|
7
7
|
@sp.stub!(:read_timeout=)
|
8
|
-
@sp.stub!(:
|
8
|
+
@sp.stub!(:read_timeout)
|
9
|
+
@sp.stub!(:read_nonblock)
|
9
10
|
|
10
11
|
@cl = ModBus::RTUClient.new("/dev/port1", 9600, :data_bits => 8, :stop_bits => 1, :parity => SerialPort::NONE)
|
11
12
|
@slave = @cl.with_slave(1)
|
@@ -6,7 +6,7 @@ describe ModBus::RTUViaTCPClient do
|
|
6
6
|
@sock = mock('Socked')
|
7
7
|
TCPSocket.should_receive(:new).with("127.0.0.1", 10002).and_return(@sock)
|
8
8
|
@sock.stub!(:read_timeout=)
|
9
|
-
@sock.stub!(:
|
9
|
+
@sock.stub!(:read_nonblock)
|
10
10
|
|
11
11
|
@cl = ModBus::RTUViaTCPClient.new("127.0.0.1")
|
12
12
|
@slave = @cl.with_slave(1)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rmodbus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -107,6 +107,22 @@ dependencies:
|
|
107
107
|
- - ! '>='
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: guard-rspec
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
110
126
|
- !ruby/object:Gem::Dependency
|
111
127
|
name: pry
|
112
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -140,7 +156,7 @@ dependencies:
|
|
140
156
|
- !ruby/object:Gem::Version
|
141
157
|
version: '0'
|
142
158
|
- !ruby/object:Gem::Dependency
|
143
|
-
name:
|
159
|
+
name: ruby-prof
|
144
160
|
requirement: !ruby/object:Gem::Requirement
|
145
161
|
none: false
|
146
162
|
requirements:
|
@@ -163,48 +179,49 @@ extra_rdoc_files:
|
|
163
179
|
- README.md
|
164
180
|
- NEWS.md
|
165
181
|
files:
|
166
|
-
- lib/rmodbus/options.rb
|
167
|
-
- lib/rmodbus/errors.rb
|
168
|
-
- lib/rmodbus/rtu_server.rb
|
169
|
-
- lib/rmodbus/client.rb
|
170
|
-
- lib/rmodbus/debug.rb
|
171
182
|
- lib/rmodbus/rtu_client.rb
|
172
|
-
- lib/rmodbus/version.rb
|
173
|
-
- lib/rmodbus/tcp.rb
|
174
|
-
- lib/rmodbus/sp.rb
|
175
|
-
- lib/rmodbus/rtu_slave.rb
|
176
|
-
- lib/rmodbus/server.rb
|
177
|
-
- lib/rmodbus/tcp_server.rb
|
178
183
|
- lib/rmodbus/rtu_via_tcp_slave.rb
|
184
|
+
- lib/rmodbus/rtu_server.rb
|
185
|
+
- lib/rmodbus/tcp_server.rb
|
186
|
+
- lib/rmodbus/slave.rb
|
187
|
+
- lib/rmodbus/sp.rb
|
179
188
|
- lib/rmodbus/rtu.rb
|
189
|
+
- lib/rmodbus/tcp_client.rb
|
190
|
+
- lib/rmodbus/version.rb
|
191
|
+
- lib/rmodbus/client.rb
|
192
|
+
- lib/rmodbus/tcp.rb
|
180
193
|
- lib/rmodbus/ext.rb
|
181
|
-
- lib/rmodbus/rtu_via_tcp_server.rb
|
182
194
|
- lib/rmodbus/tcp_slave.rb
|
195
|
+
- lib/rmodbus/rtu_via_tcp_server.rb
|
196
|
+
- lib/rmodbus/server.rb
|
197
|
+
- lib/rmodbus/rtu_slave.rb
|
198
|
+
- lib/rmodbus/options.rb
|
183
199
|
- lib/rmodbus/proxy.rb
|
184
|
-
- lib/rmodbus/tcp_client.rb
|
185
200
|
- lib/rmodbus/rtu_via_tcp_client.rb
|
186
|
-
- lib/rmodbus/
|
201
|
+
- lib/rmodbus/debug.rb
|
202
|
+
- lib/rmodbus/errors.rb
|
187
203
|
- lib/rmodbus.rb
|
188
|
-
- examples/perfomance_tcp.rb
|
189
|
-
- examples/simple-xpca-gateway.rb
|
190
|
-
- examples/use_tcp_modbus.rb
|
191
204
|
- examples/use_rtu_via_tcp_modbus.rb
|
205
|
+
- examples/perfomance_rtu_via_tcp.rb
|
192
206
|
- examples/perfomance_rtu.rb
|
193
|
-
-
|
207
|
+
- examples/use_tcp_modbus.rb
|
208
|
+
- examples/simple-xpca-gateway.rb
|
209
|
+
- examples/perfomance_tcp.rb
|
210
|
+
- spec/response_mismach_spec.rb
|
211
|
+
- spec/rtu_server_spec.rb
|
194
212
|
- spec/proxy_spec.rb
|
195
|
-
- spec/
|
196
|
-
- spec/
|
213
|
+
- spec/spec_helper.rb
|
214
|
+
- spec/logging_spec.rb
|
215
|
+
- spec/client_spec.rb
|
216
|
+
- spec/slave_spec.rb
|
197
217
|
- spec/rtu_via_tcp_client_spec.rb
|
218
|
+
- spec/rtu_via_tcp_server_spec.rb
|
219
|
+
- spec/tcp_server_spec.rb
|
220
|
+
- spec/tcp_client_spec.rb
|
198
221
|
- spec/rtu_client_spec.rb
|
199
222
|
- spec/read_rtu_response_spec.rb
|
200
|
-
- spec/
|
201
|
-
- spec/response_mismach_spec.rb
|
202
|
-
- spec/tcp_client_spec.rb
|
223
|
+
- spec/exception_spec.rb
|
203
224
|
- spec/ext_spec.rb
|
204
|
-
- spec/logging_spec.rb
|
205
|
-
- spec/client_spec.rb
|
206
|
-
- spec/spec_helper.rb
|
207
|
-
- spec/rtu_server_spec.rb
|
208
225
|
- Rakefile
|
209
226
|
- README.md
|
210
227
|
- NEWS.md
|
@@ -233,7 +250,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
233
250
|
version: '0'
|
234
251
|
requirements: []
|
235
252
|
rubyforge_project:
|
236
|
-
rubygems_version: 1.8.
|
253
|
+
rubygems_version: 1.8.24
|
237
254
|
signing_key:
|
238
255
|
specification_version: 3
|
239
256
|
summary: RModBus - free implementation of protocol ModBus
|