rmodbus 1.0.2-java → 1.0.3-java
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 +3 -2
@@ -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
@@ -2,7 +2,7 @@
|
|
2
2
|
name: rmodbus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.0.
|
5
|
+
version: 1.0.3
|
6
6
|
platform: java
|
7
7
|
authors:
|
8
8
|
- A.Timin, J. Sanders, K. Reynolds
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-07-
|
13
|
+
date: 2011-07-16 00:00:00 +06:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -110,6 +110,7 @@ files:
|
|
110
110
|
- lib/rmodbus/server.rb
|
111
111
|
- lib/rmodbus/rtu_via_tcp_slave.rb
|
112
112
|
- lib/rmodbus/tcp_slave.rb
|
113
|
+
- examples/simple-xpca-gateway.rb
|
113
114
|
- examples/perfomance_tcp.rb
|
114
115
|
- examples/use_tcp_modbus.rb
|
115
116
|
- examples/use_rtu_via_tcp_modbus.rb
|