rmodbus 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +1 -0
- data/CHANGES +2 -0
- data/LICENSE +1 -0
- data/README +15 -1
- data/lib/rmodbus/adu.rb +2 -0
- data/lib/rmodbus/client.rb +50 -9
- data/lib/rmodbus/exceptions.rb +2 -0
- data/lib/rmodbus/tcp_client.rb +4 -0
- metadata +5 -3
data/AUTHORS
CHANGED
data/CHANGES
ADDED
data/LICENSE
CHANGED
data/README
CHANGED
@@ -5,7 +5,15 @@
|
|
5
5
|
== Feature
|
6
6
|
|
7
7
|
* Client ModBus-TCP
|
8
|
-
* Support functions:
|
8
|
+
* Support functions:
|
9
|
+
* 01 (0x01) Read Coils
|
10
|
+
* 02 (0x02) Read Discrete Inputs
|
11
|
+
* 03 (0x03) Read Holding Registers
|
12
|
+
* 04 (0x04) Read Input Registers
|
13
|
+
* 05 (0x05) Write Single Coil
|
14
|
+
* 06 (0x06) Write Single Register
|
15
|
+
* 15 (0x0F) Write Multiple Coils
|
16
|
+
* 16 (0x10) Write Multiple registers
|
9
17
|
|
10
18
|
== Installation
|
11
19
|
|
@@ -32,6 +40,12 @@ or
|
|
32
40
|
|
33
41
|
$ svn checkout http://rubyforge.org/var/svn/rmodbus/trunk
|
34
42
|
|
43
|
+
== Reference
|
44
|
+
|
45
|
+
RModBus project: http://rubyforge.org/projects/rmodbus
|
46
|
+
|
47
|
+
ModBus community: http://www.modbus-ida.org
|
48
|
+
|
35
49
|
|
36
50
|
|
37
51
|
|
data/lib/rmodbus/adu.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# RModBus - free implementation of ModBus protocol on Ruby.
|
2
|
+
#
|
2
3
|
# Copyright (C) 2008 Timin Aleksey
|
4
|
+
#
|
3
5
|
# This program is free software: you can redistribute it and/or modify
|
4
6
|
# it under the terms of the GNU General Public License as published by
|
5
7
|
# the Free Software Foundation, either version 3 of the License, or
|
data/lib/rmodbus/client.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# RModBus - free implementation of ModBus protocol on Ruby.
|
2
|
+
#
|
2
3
|
# Copyright (C) 2008 Timin Aleksey
|
4
|
+
#
|
3
5
|
# This program is free software: you can redistribute it and/or modify
|
4
6
|
# it under the terms of the GNU General Public License as published by
|
5
7
|
# the Free Software Foundation, either version 3 of the License, or
|
@@ -58,22 +60,39 @@ module ModBus
|
|
58
60
|
|
59
61
|
include Errors
|
60
62
|
|
61
|
-
|
62
|
-
|
63
|
+
# Read value *ncoils* coils starting with *addr*
|
64
|
+
#
|
65
|
+
# Return array of their values
|
66
|
+
def read_coils(addr, ncoils)
|
67
|
+
query("\x1" + addr.to_bytes + ncoils.to_bytes).to_array_bit[0..ncoils-1]
|
63
68
|
end
|
64
69
|
|
65
|
-
|
66
|
-
|
70
|
+
# Read value *ncoils* discrete inputs starting with *addr*
|
71
|
+
#
|
72
|
+
# Return array of their values
|
73
|
+
def read_discret_inputs(addr, ncoils)
|
74
|
+
query("\x2" + addr.to_bytes + ncoils.to_bytes).to_array_bit[0..ncoils-1]
|
67
75
|
end
|
68
76
|
|
77
|
+
# Read value *nreg* holding registers starting with *addr*
|
78
|
+
#
|
79
|
+
# Return array of their values
|
69
80
|
def read_holding_registers(addr, nreg)
|
70
81
|
query("\x3" + addr.to_bytes + nreg.to_bytes).to_array_int16
|
71
82
|
end
|
72
83
|
|
84
|
+
# Read value *nreg* input registers starting with *addr*
|
85
|
+
#
|
86
|
+
# Return array of their values
|
73
87
|
def read_input_registers(addr, nreg)
|
74
88
|
query("\x4" + addr.to_bytes + nreg.to_bytes).to_array_int16
|
75
89
|
end
|
76
90
|
|
91
|
+
# Write *val* in *addr* coil
|
92
|
+
#
|
93
|
+
# if *val* lager 0 write 1
|
94
|
+
#
|
95
|
+
# Return self
|
77
96
|
def write_single_coil(addr, val)
|
78
97
|
if val == 0
|
79
98
|
query("\x5" + addr.to_bytes + 0.to_bytes)
|
@@ -83,11 +102,19 @@ module ModBus
|
|
83
102
|
self
|
84
103
|
end
|
85
104
|
|
105
|
+
# Write *val* in *addr* register
|
106
|
+
#
|
107
|
+
# Return self
|
86
108
|
def write_single_register(addr, val)
|
87
109
|
query("\x6" + addr.to_bytes + val.to_bytes)
|
88
110
|
self
|
89
111
|
end
|
90
112
|
|
113
|
+
# Write *val* in coils starting with *addr*
|
114
|
+
#
|
115
|
+
# *val* it is array of bits
|
116
|
+
#
|
117
|
+
# Return self
|
91
118
|
def write_multiple_coils(addr, val)
|
92
119
|
nbyte = ((val.size-1) >> 3) + 1
|
93
120
|
sum = 0
|
@@ -106,6 +133,11 @@ module ModBus
|
|
106
133
|
self
|
107
134
|
end
|
108
135
|
|
136
|
+
# Write *val* in registers starting with *addr*
|
137
|
+
#
|
138
|
+
# *val* it is array of integer
|
139
|
+
#
|
140
|
+
# Return self
|
109
141
|
def write_multiple_registers(addr, val)
|
110
142
|
s_val = ""
|
111
143
|
val.each do |reg|
|
@@ -116,6 +148,13 @@ module ModBus
|
|
116
148
|
self
|
117
149
|
end
|
118
150
|
|
151
|
+
# Write *current value & and_mask | or mask in *addr* register
|
152
|
+
#
|
153
|
+
# Return self
|
154
|
+
def mask_write_register(addr, and_mask, or_mask)
|
155
|
+
query("\x16" + addr.to_bytes + and_mask.to_bytes + or_mask.to_bytes)
|
156
|
+
self
|
157
|
+
end
|
119
158
|
|
120
159
|
def query(pdu)
|
121
160
|
send_pdu(pdu)
|
@@ -146,12 +185,14 @@ module ModBus
|
|
146
185
|
end
|
147
186
|
pdu[2..-1]
|
148
187
|
end
|
149
|
-
end
|
150
188
|
|
151
|
-
|
152
|
-
|
153
|
-
|
189
|
+
protected
|
190
|
+
def send_pdu(pdu)
|
191
|
+
end
|
192
|
+
|
193
|
+
def read_pdu
|
194
|
+
end
|
154
195
|
|
155
|
-
def read_pdu
|
156
196
|
end
|
197
|
+
|
157
198
|
end
|
data/lib/rmodbus/exceptions.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# RModBus - free implementation of ModBus protocol on Ruby.
|
2
|
+
#
|
2
3
|
# Copyright (C) 2008 Timin Aleksey
|
4
|
+
#
|
3
5
|
# This program is free software: you can redistribute it and/or modify
|
4
6
|
# it under the terms of the GNU General Public License as published by
|
5
7
|
# the Free Software Foundation, either version 3 of the License, or
|
data/lib/rmodbus/tcp_client.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# RModBus - free implementation of ModBus protocol on Ruby.
|
2
|
+
#
|
2
3
|
# Copyright (C) 2008 Timin Aleksey
|
4
|
+
#
|
3
5
|
# This program is free software: you can redistribute it and/or modify
|
4
6
|
# it under the terms of the GNU General Public License as published by
|
5
7
|
# the Free Software Foundation, either version 3 of the License, or
|
@@ -17,10 +19,12 @@ require 'rmodbus/adu'
|
|
17
19
|
|
18
20
|
module ModBus
|
19
21
|
|
22
|
+
# Implementation clients(master) ModBusTCP
|
20
23
|
class TCPClient < Client
|
21
24
|
|
22
25
|
include Timeout
|
23
26
|
|
27
|
+
# Connect with a ModBus server
|
24
28
|
def initialize(ipaddr, port = 502, slaveaddr = 1)
|
25
29
|
timeout(1) do
|
26
30
|
@sock = TCPSocket.new(ipaddr, port)
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rmodbus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- A.Timin
|
7
|
+
- A.Timin, D.Samatov
|
8
8
|
autorequire: rmodbus
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-01-
|
12
|
+
date: 2008-01-25 00:00:00 +05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -23,6 +23,7 @@ extra_rdoc_files:
|
|
23
23
|
- README
|
24
24
|
- AUTHORS
|
25
25
|
- LICENSE
|
26
|
+
- CHANGES
|
26
27
|
files:
|
27
28
|
- lib/rmodbus/exceptions.rb
|
28
29
|
- lib/rmodbus/tcp_client.rb
|
@@ -32,6 +33,7 @@ files:
|
|
32
33
|
- README
|
33
34
|
- AUTHORS
|
34
35
|
- LICENSE
|
36
|
+
- CHANGES
|
35
37
|
has_rdoc: true
|
36
38
|
homepage:
|
37
39
|
post_install_message:
|