rmodbus 1.0.2 → 1.0.3
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/examples/simple-xpca-gateway.rb +84 -0
- data/lib/rmodbus/rtu_via_tcp_server.rb +9 -4
- data/lib/rmodbus/tcp_server.rb +7 -2
- data/lib/rmodbus/version.rb +1 -1
- metadata +4 -36
@@ -0,0 +1,84 @@
|
|
1
|
+
=begin
|
2
|
+
It's very simple example of implementation XPCA gateway (see http://www.xpca.org)
|
3
|
+
for communication with TCP ModBus devices
|
4
|
+
It receives REST requests (e.g http://127.0.0.1:4567/mb/127.0.0.1/8502/1/coils/6/17 )
|
5
|
+
and returns data in JSON format addr : data:
|
6
|
+
{"coils": {
|
7
|
+
"6":{
|
8
|
+
"value":0,
|
9
|
+
"timestamp":"2011-07-12 18:11:03 +0000",
|
10
|
+
"quality":"good"
|
11
|
+
},
|
12
|
+
"7":{
|
13
|
+
"value":0,
|
14
|
+
"timestamp":"2011-07-12 18:11:03 +0000",
|
15
|
+
"quality":"good"
|
16
|
+
}
|
17
|
+
...
|
18
|
+
}
|
19
|
+
|
20
|
+
This code requies gems: rmodbus, sinatra and json
|
21
|
+
2011 (c) Aleksey Timin
|
22
|
+
=end
|
23
|
+
|
24
|
+
require 'rubygems'
|
25
|
+
require 'rmodbus'
|
26
|
+
require 'sinatra'
|
27
|
+
require 'json'
|
28
|
+
|
29
|
+
# Launche TCP ModBus server for test
|
30
|
+
IP = '127.0.0.1'
|
31
|
+
PORT = 8502
|
32
|
+
|
33
|
+
@srv = ModBus::TCPServer.new(PORT,1)
|
34
|
+
|
35
|
+
@srv.holding_registers = Array.new(100) { |i| i = i + 1 }
|
36
|
+
@srv.input_registers = Array.new(100) { |i| i = i + 1 }
|
37
|
+
@srv.coils = Array.new(100) { |i| i = 0 }
|
38
|
+
@srv.discrete_inputs = Array.new(100) { |i| i = 0 }
|
39
|
+
|
40
|
+
@srv.start
|
41
|
+
|
42
|
+
|
43
|
+
# Calc a GET request
|
44
|
+
# @example
|
45
|
+
# http://127.0.0.1:4567/mb/127.0.0.1/8502/1/coils/6/17
|
46
|
+
#
|
47
|
+
# HTTP route: GET http://localhost/mb/:ip/:port/:slave/:dataplace/:firstaddr/:lastaddr
|
48
|
+
#
|
49
|
+
# :ip - ip addr of ModBus TCP Server
|
50
|
+
# :port - port of ModBUs TCP Server
|
51
|
+
# :slave - id of slave device
|
52
|
+
# :dataplace - valid values: coils, discrete_inputs, input_registers, holding_registers
|
53
|
+
# :firstaddr - first addr of registers(contacts)
|
54
|
+
# :lastaddr - last addr of registers(contacts)
|
55
|
+
get '/mb/:ip/:port/:slave/:dataplace/:firstaddr/:lastaddr' do
|
56
|
+
resp = {}
|
57
|
+
begin
|
58
|
+
data = []
|
59
|
+
ModBus::TCPClient.new(params[:ip].to_s, params[:port].to_i) do |cl|
|
60
|
+
cl.with_slave(params[:slave].to_i) do |slave|
|
61
|
+
slave.debug = true
|
62
|
+
dataplace = slave.send params[:dataplace]
|
63
|
+
data = dataplace[params[:firstaddr].to_i .. params[:lastaddr].to_i]
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
resp = { params[:dataplace] => {}}
|
68
|
+
data.each_with_index do |v,i|
|
69
|
+
resp[params[:dataplace]][params[:firstaddr].to_i + i] = {
|
70
|
+
:value => v,
|
71
|
+
:timestamp => Time.now.utc.strftime("%Y-%m-%d %H:%M:%S %z"),
|
72
|
+
:quality => "good"
|
73
|
+
}
|
74
|
+
end
|
75
|
+
rescue Exception => e
|
76
|
+
resp = { :error => {
|
77
|
+
:type => e.class,
|
78
|
+
:message => e.message }
|
79
|
+
}
|
80
|
+
end
|
81
|
+
|
82
|
+
content_type "application/json"
|
83
|
+
resp.to_json
|
84
|
+
end
|
@@ -33,10 +33,15 @@ module ModBus
|
|
33
33
|
# Init server
|
34
34
|
# @param [Integer] port listen port
|
35
35
|
# @param [Integer] uid slave device
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
# @param [Hash] opts options of server
|
37
|
+
# @option opts [String] :host host of server default '127.0.0.1'
|
38
|
+
# @option opts [Float, Integer] :max_connection max of TCP connection with server default 4
|
39
|
+
def initialize(port = 10002, uid = 1, opts = {})
|
40
|
+
@uid = uid
|
41
|
+
opts[:host] = DEFAULT_HOST unless opts[:host]
|
42
|
+
opts[:max_connection] = 4 unless opts[:max_connection]
|
43
|
+
super(port, host = opts[:host], maxConnection = opts[:max_connection])
|
44
|
+
end
|
40
45
|
|
41
46
|
protected
|
42
47
|
# Serve requests
|
data/lib/rmodbus/tcp_server.rb
CHANGED
@@ -30,9 +30,14 @@ module ModBus
|
|
30
30
|
# Init server
|
31
31
|
# @param [Integer] port listen port
|
32
32
|
# @param [Integer] uid slave device
|
33
|
-
|
33
|
+
# @param [Hash] opts options of server
|
34
|
+
# @option opts [String] :host host of server default '127.0.0.1'
|
35
|
+
# @option opts [Float, Integer] :max_connection max of TCP connection with server default 4
|
36
|
+
def initialize(port = 502, uid = 1, opts = {})
|
34
37
|
@uid = uid
|
35
|
-
|
38
|
+
opts[:host] = DEFAULT_HOST unless opts[:host]
|
39
|
+
opts[:max_connection] = 4 unless opts[:max_connection]
|
40
|
+
super(port, host = opts[:host], maxConnection = opts[:max_connection])
|
36
41
|
end
|
37
42
|
|
38
43
|
# Serve requests
|
data/lib/rmodbus/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rmodbus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 19
|
5
4
|
prerelease:
|
6
|
-
|
7
|
-
- 1
|
8
|
-
- 0
|
9
|
-
- 2
|
10
|
-
version: 1.0.2
|
5
|
+
version: 1.0.3
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
8
|
- A.Timin, J. Sanders, K. Reynolds
|
@@ -15,7 +10,7 @@ autorequire:
|
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
12
|
|
18
|
-
date: 2011-
|
13
|
+
date: 2011-07-16 00:00:00 Z
|
19
14
|
dependencies:
|
20
15
|
- !ruby/object:Gem::Dependency
|
21
16
|
name: serialport
|
@@ -25,9 +20,6 @@ dependencies:
|
|
25
20
|
requirements:
|
26
21
|
- - ">="
|
27
22
|
- !ruby/object:Gem::Version
|
28
|
-
hash: 3
|
29
|
-
segments:
|
30
|
-
- 0
|
31
23
|
version: "0"
|
32
24
|
type: :runtime
|
33
25
|
version_requirements: *id001
|
@@ -39,9 +31,6 @@ dependencies:
|
|
39
31
|
requirements:
|
40
32
|
- - ">="
|
41
33
|
- !ruby/object:Gem::Version
|
42
|
-
hash: 3
|
43
|
-
segments:
|
44
|
-
- 0
|
45
34
|
version: "0"
|
46
35
|
type: :development
|
47
36
|
version_requirements: *id002
|
@@ -53,9 +42,6 @@ dependencies:
|
|
53
42
|
requirements:
|
54
43
|
- - ">="
|
55
44
|
- !ruby/object:Gem::Version
|
56
|
-
hash: 3
|
57
|
-
segments:
|
58
|
-
- 0
|
59
45
|
version: "0"
|
60
46
|
type: :development
|
61
47
|
version_requirements: *id003
|
@@ -67,9 +53,6 @@ dependencies:
|
|
67
53
|
requirements:
|
68
54
|
- - ">="
|
69
55
|
- !ruby/object:Gem::Version
|
70
|
-
hash: 3
|
71
|
-
segments:
|
72
|
-
- 0
|
73
56
|
version: "0"
|
74
57
|
type: :development
|
75
58
|
version_requirements: *id004
|
@@ -81,9 +64,6 @@ dependencies:
|
|
81
64
|
requirements:
|
82
65
|
- - ">="
|
83
66
|
- !ruby/object:Gem::Version
|
84
|
-
hash: 3
|
85
|
-
segments:
|
86
|
-
- 0
|
87
67
|
version: "0"
|
88
68
|
type: :development
|
89
69
|
version_requirements: *id005
|
@@ -95,9 +75,6 @@ dependencies:
|
|
95
75
|
requirements:
|
96
76
|
- - ">="
|
97
77
|
- !ruby/object:Gem::Version
|
98
|
-
hash: 3
|
99
|
-
segments:
|
100
|
-
- 0
|
101
78
|
version: "0"
|
102
79
|
type: :development
|
103
80
|
version_requirements: *id006
|
@@ -109,9 +86,6 @@ dependencies:
|
|
109
86
|
requirements:
|
110
87
|
- - ">="
|
111
88
|
- !ruby/object:Gem::Version
|
112
|
-
hash: 3
|
113
|
-
segments:
|
114
|
-
- 0
|
115
89
|
version: "0"
|
116
90
|
type: :development
|
117
91
|
version_requirements: *id007
|
@@ -146,6 +120,7 @@ files:
|
|
146
120
|
- lib/rmodbus/server.rb
|
147
121
|
- lib/rmodbus/rtu_via_tcp_slave.rb
|
148
122
|
- lib/rmodbus/tcp_slave.rb
|
123
|
+
- examples/simple-xpca-gateway.rb
|
149
124
|
- examples/perfomance_tcp.rb
|
150
125
|
- examples/use_tcp_modbus.rb
|
151
126
|
- examples/use_rtu_via_tcp_modbus.rb
|
@@ -182,26 +157,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
182
157
|
requirements:
|
183
158
|
- - ">="
|
184
159
|
- !ruby/object:Gem::Version
|
185
|
-
hash: 3
|
186
|
-
segments:
|
187
|
-
- 0
|
188
160
|
version: "0"
|
189
161
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
190
162
|
none: false
|
191
163
|
requirements:
|
192
164
|
- - ">="
|
193
165
|
- !ruby/object:Gem::Version
|
194
|
-
hash: 3
|
195
|
-
segments:
|
196
|
-
- 0
|
197
166
|
version: "0"
|
198
167
|
requirements: []
|
199
168
|
|
200
169
|
rubyforge_project:
|
201
|
-
rubygems_version: 1.
|
170
|
+
rubygems_version: 1.8.5
|
202
171
|
signing_key:
|
203
172
|
specification_version: 3
|
204
173
|
summary: RModBus - free implementation of protocol ModBus
|
205
174
|
test_files: []
|
206
175
|
|
207
|
-
has_rdoc:
|