rmodbus 1.0.0-java

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,81 @@
1
+ require 'rmodbus'
2
+
3
+ describe TCPClient do
4
+ describe "method 'query'" do
5
+ before(:each) do
6
+ @uid = 1
7
+ @sock = mock("Socket")
8
+ @adu = "\000\001\000\000\000\001\001"
9
+
10
+ TCPSocket.should_receive(:new).with('127.0.0.1', 1502).and_return(@sock)
11
+ @sock.stub!(:read).with(0).and_return('')
12
+ @cl = ModBus::TCPClient.new('127.0.0.1', 1502)
13
+ @slave = @cl.with_slave(@uid)
14
+ end
15
+
16
+ it 'should send valid MBAP Header' do
17
+ @adu[0,2] = @slave.transaction.next.to_word
18
+ @sock.should_receive(:write).with(@adu)
19
+ @sock.should_receive(:read).with(7).and_return(@adu)
20
+ @slave.query('').should == nil
21
+ end
22
+
23
+ it 'should throw exception if get other transaction' do
24
+ @adu[0,2] = @slave.transaction.next.to_word
25
+ @sock.should_receive(:write).with(@adu)
26
+ @sock.should_receive(:read).with(7).and_return("\000\002\000\000\000\001" + @uid.chr)
27
+ begin
28
+ @slave.query('').should == nil
29
+ rescue Exception => ex
30
+ ex.class.should == Errors::ModBusException
31
+ end
32
+ end
33
+
34
+ it 'should return only data from PDU' do
35
+ request = "\x3\x0\x6b\x0\x3"
36
+ response = "\x3\x6\x2\x2b\x0\x0\x0\x64"
37
+ @adu = @slave.transaction.next.to_word + "\x0\x0\x0\x9" + @uid.chr + request
38
+ @sock.should_receive(:write).with(@adu[0,4] + "\0\6" + @uid.chr + request)
39
+ @sock.should_receive(:read).with(7).and_return(@adu[0,7])
40
+ @sock.should_receive(:read).with(8).and_return(response)
41
+
42
+ @slave.query(request).should == response[2..-1]
43
+ end
44
+
45
+ it 'should sugar connect method' do
46
+ ipaddr, port = '127.0.0.1', 502
47
+ TCPSocket.should_receive(:new).with(ipaddr, port).and_return(@sock)
48
+ @sock.should_receive(:closed?).and_return(false)
49
+ @sock.should_receive(:close)
50
+ TCPClient.connect(ipaddr, port) do |cl|
51
+ cl.ipaddr.should == ipaddr
52
+ cl.port.should == port
53
+ end
54
+ end
55
+
56
+ it 'should have closed? method' do
57
+ @sock.should_receive(:closed?).and_return(false)
58
+ @cl.closed?.should == false
59
+
60
+ @sock.should_receive(:closed?).and_return(false)
61
+ @sock.should_receive(:close)
62
+
63
+ @cl.close
64
+
65
+ @sock.should_receive(:closed?).and_return(true)
66
+ @cl.closed?.should == true
67
+ end
68
+
69
+ it 'should give slave object in block' do
70
+ @cl.with_slave(1) do |slave|
71
+ slave.uid = 1
72
+ end
73
+ end
74
+ end
75
+
76
+ it "should tune connection timeout" do
77
+ timeout(0.5) do
78
+ lambda { ModBus::TCPClient.new('81.123.231.11', 1999, :connect_timeout => 0.1) }.should raise_error(ModBusTimeout)
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,99 @@
1
+ require 'rmodbus'
2
+
3
+ describe TCPServer do
4
+ before do
5
+ @server = ModBus::TCPServer.new(8502,1)
6
+ @server.coils = [1,0,1,1]
7
+ @server.discrete_inputs = [1,1,0,0]
8
+ @server.holding_registers = [1,2,3,4]
9
+ @server.input_registers = [1,2,3,4]
10
+ @server.start
11
+ @cl = ModBus::TCPClient.new('127.0.0.1', 8502)
12
+ @slave = @cl.with_slave(1)
13
+ @slave.read_retries = 0
14
+ end
15
+
16
+ it "should silent if UID has mismatched" do
17
+ @cl.close
18
+ ModBus::TCPClient.connect('127.0.0.1', 8502) do |cl|
19
+ lambda { cl.with_slave(2).read_coils(1,3) }.should raise_exception(
20
+ ModBus::Errors::ModBusException,
21
+ "Server did not respond"
22
+ )
23
+ end
24
+ end
25
+
26
+ it "should send exception if function not supported" do
27
+ lambda { @slave.query('0x43') }.should raise_exception(
28
+ ModBus::Errors::IllegalFunction,
29
+ "The function code received in the query is not an allowable action for the server"
30
+ )
31
+ end
32
+
33
+ it "should send exception if quanity of out more 0x7d" do
34
+ lambda { @slave.read_coils(0, 0x7e) }.should raise_exception(
35
+ ModBus::Errors::IllegalDataValue,
36
+ "A value contained in the query data field is not an allowable value for server"
37
+ )
38
+ end
39
+
40
+ it "should send exception if addr not valid" do
41
+ lambda { @slave.read_coils(2, 8) }.should raise_exception(
42
+ ModBus::Errors::IllegalDataAddress,
43
+ "The data address received in the query is not an allowable address for the server"
44
+ )
45
+ end
46
+
47
+ it "should calc a many requests" do
48
+ @slave.read_coils(1,2)
49
+ @slave.write_multiple_registers(0,[9,9,9,])
50
+ @slave.read_holding_registers(0,3).should == [9,9,9]
51
+ end
52
+
53
+ it "should supported function 'read coils'" do
54
+ @slave.read_coils(0,3).should == @server.coils[0,3]
55
+ end
56
+
57
+ it "should supported function 'read discrete inputs'" do
58
+ @slave.read_discrete_inputs(1,3).should == @server.discrete_inputs[1,3]
59
+ end
60
+
61
+ it "should supported function 'read holding registers'" do
62
+ @slave.read_holding_registers(0,3).should == @server.holding_registers[0,3]
63
+ end
64
+
65
+ it "should supported function 'read input registers'" do
66
+ @slave.read_input_registers(2,2).should == @server.input_registers[2,2]
67
+ end
68
+
69
+ it "should supported function 'write single coil'" do
70
+ @server.coils[3] = 0
71
+ @slave.write_single_coil(3,1)
72
+ @server.coils[3].should == 1
73
+ end
74
+
75
+ it "should supported function 'write single register'" do
76
+ @server.holding_registers[3] = 25
77
+ @slave.write_single_register(3,35)
78
+ @server.holding_registers[3].should == 35
79
+ end
80
+
81
+ it "should supported function 'write multiple coils'" do
82
+ @server.coils = [1,1,1,0, 0,0,0,0, 0,0,0,0, 0,1,1,1]
83
+ @slave.write_multiple_coils(3, [1, 0,1,0,1, 0,1,0,1])
84
+ @server.coils.should == [1,1,1,1, 0,1,0,1, 0,1,0,1, 0,1,1,1]
85
+ end
86
+
87
+ it "should supported function 'write multiple registers'" do
88
+ @server.holding_registers = [1,2,3,4,5,6,7,8,9]
89
+ @slave.write_multiple_registers(3,[1,2,3,4,5])
90
+ @server.holding_registers.should == [1,2,3,1,2,3,4,5,9]
91
+ end
92
+
93
+ after do
94
+ @cl.close
95
+ @server.stop unless @server.stopped?
96
+ while GServer.in_service?(8502)
97
+ end
98
+ end
99
+ end
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rmodbus
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 1.0.0
6
+ platform: java
7
+ authors:
8
+ - A.Timin, J. Sanders, K. Reynolds
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-06-27 00:00:00 +06:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rake
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0"
25
+ type: :development
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: "0"
36
+ type: :development
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: rspec
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ type: :development
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: rcov
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ type: :development
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: yard
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
69
+ type: :development
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: rdiscount
73
+ prerelease: false
74
+ requirement: &id006 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: "0"
80
+ type: :development
81
+ version_requirements: *id006
82
+ description:
83
+ email: atimin@gmail.com
84
+ executables: []
85
+
86
+ extensions: []
87
+
88
+ extra_rdoc_files:
89
+ - README.md
90
+ - NEWS.md
91
+ files:
92
+ - lib/rmodbus.rb
93
+ - lib/rmodbus/version.rb
94
+ - lib/rmodbus/errors.rb
95
+ - lib/rmodbus/ext.rb
96
+ - lib/rmodbus/rtu_via_tcp_client.rb
97
+ - lib/rmodbus/sp.rb
98
+ - lib/rmodbus/tcp.rb
99
+ - lib/rmodbus/common.rb
100
+ - lib/rmodbus/client.rb
101
+ - lib/rmodbus/slave.rb
102
+ - lib/rmodbus/tcp_server.rb
103
+ - lib/rmodbus/tcp_client.rb
104
+ - lib/rmodbus/proxy.rb
105
+ - lib/rmodbus/rtu_slave.rb
106
+ - lib/rmodbus/rtu_server.rb
107
+ - lib/rmodbus/rtu.rb
108
+ - lib/rmodbus/rtu_client.rb
109
+ - lib/rmodbus/rtu_via_tcp_server.rb
110
+ - lib/rmodbus/server.rb
111
+ - lib/rmodbus/rtu_via_tcp_slave.rb
112
+ - lib/rmodbus/tcp_slave.rb
113
+ - examples/perfomance_tcp.rb
114
+ - examples/use_tcp_modbus.rb
115
+ - examples/use_rtu_via_tcp_modbus.rb
116
+ - examples/perfomance_rtu.rb
117
+ - spec/tcp_server_spec.rb
118
+ - spec/logging_spec.rb
119
+ - spec/rtu_via_tcp_client_spec.rb
120
+ - spec/rtu_server_spec.rb
121
+ - spec/tcp_client_spec.rb
122
+ - spec/exception_spec.rb
123
+ - spec/rtu_client_spec.rb
124
+ - spec/slave_spec.rb
125
+ - spec/client_spec.rb
126
+ - spec/read_rtu_response_spec.rb
127
+ - spec/proxy_spec.rb
128
+ - spec/ext_spec.rb
129
+ - Rakefile
130
+ - README.md
131
+ - NEWS.md
132
+ has_rdoc: true
133
+ homepage: http://rmodbus.heroku.com
134
+ licenses: []
135
+
136
+ post_install_message:
137
+ rdoc_options:
138
+ - --title
139
+ - RModBus
140
+ - --inline-source
141
+ - --main
142
+ - README.md
143
+ require_paths:
144
+ - lib
145
+ required_ruby_version: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: "0"
151
+ required_rubygems_version: !ruby/object:Gem::Requirement
152
+ none: false
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: "0"
157
+ requirements: []
158
+
159
+ rubyforge_project:
160
+ rubygems_version: 1.5.1
161
+ signing_key:
162
+ specification_version: 3
163
+ summary: RModBus - free implementation of protocol ModBus
164
+ test_files: []
165
+