urua 0.99.5001 → 0.99.5006

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cb03e28f7cf9f13710564999e2f420b8a997f4422f713a23ae6a4625ae6f32f1
4
- data.tar.gz: 82e5e450594a99b4f72e520b49a3c1c4fe500b0534f693d41b7486dcda0aa21d
3
+ metadata.gz: ef831aa78f63c91a670b4a08cb3f3d82ca1a17254457d5f26298f12d355ee051
4
+ data.tar.gz: aedecc718d8e02e5080d4b876c15e20250212402fb585b4a92e44bc688f0941b
5
5
  SHA512:
6
- metadata.gz: f796f7cfa4fe3bbea5da71355f44380c17308843ada4cafaa699c1d8940c7b969de7da034b439e19fd725e1f559dcfed3ff05f9a1a24572d7f1a47c0aa284096
7
- data.tar.gz: efe373ebff31e345b405fd0e2ddc0551b4391c7e854731e255afdb510dbcd4edcd56c34bad8d1dd84c9eddea0806ba0b7fed0ec1c275af874397fa50276cf38a
6
+ metadata.gz: a5cf5db8189f86c2f6a72f66dea1661c7d5e5b102832f2a7c6b2d745485792b0d4045df4c90f4724ff64a18d3b8953da484700a27e42d225299243640bff43f7
7
+ data.tar.gz: dc27fae57b64c1caf4ef6ae8805180696e7b2a89c688cdfee7ebb72568dbc02560c7afd73387724bb2b40521ba86603040cf07012a1d71481ccbcc0827b91684
data/README.md CHANGED
@@ -2,28 +2,68 @@
2
2
 
3
3
  # URUA
4
4
 
5
- OPC UA Server for Universal Robots
5
+ A simple OPC UA server for Universal robots in ruby, which uses the ur-sock and opcua-smart library.
6
6
 
7
7
  ## Getting Started
8
8
 
9
- A simple ruby server, which uses th ur-sock and opcua-smart library.
9
+ A simple ruby server, which uses the ur-sock and opcua-smart library.
10
10
 
11
11
  ### Prerequisites & Intallation
12
12
 
13
- To run the server we need the following packages:
13
+ For this server the OPC UA installation of the opcua-smart gem is required.
14
+ Please follow the instructions at https://github.com/etm/opcua-smart and install the opcua gem.
14
15
 
15
- * ruby gems:
16
+ Additionally you have to install the URUA gem with:
17
+
18
+ ```
19
+ gem install urua
20
+ ```
21
+
22
+ If you want to develop or extend the server, just use the following instruction
23
+ ```
24
+ git clone https://github.com/fpauker/urua
25
+ git clone https://github.com/fpauker/ur-sock
26
+ git clone https://github.com/etm/opcua-smart
16
27
  ```
17
- gem install opcua
18
- gem install ur-sock
28
+
29
+ Just follow the install instructions of the 3 projects.
30
+ After installing all packages do
31
+
32
+ ```
33
+ cd urua/server
19
34
  ```
35
+ in this directory the devserver.rb and the devserver.config are located.
36
+
37
+ ### Starting the server
38
+
39
+ To start the server type in the following commands:
40
+
41
+ ```
42
+ cd urua/server
43
+ ./uruaserver.rb start
44
+ ```
45
+ or
46
+ ```
47
+ cd urua/server
48
+ ./devserver.rb start
49
+ ```
50
+ to start the developing server.
51
+
20
52
 
21
53
  ## Adress space
22
54
 
23
- ![Architecture](adressspace/ur1.png?raw=true | width=50)
24
- ![Architecture](adressspace/ur2.png?raw=true | width=50)
25
- ![Architecture](adressspace/ur3.png?raw=true | width=50)
26
- ![Architecture](adressspace/ur5.png?raw=true | width=50)
55
+ The server's adress space is shown in the pictures below.
56
+
57
+ ![Architecture](https://github.com/fpauker/urua/blob/master/adressspace/ur1.png?raw=true)
58
+ ![Architecture](https://github.com/fpauker/urua/blob/master/adressspace/ur2.png?raw=true)
59
+ ![Architecture](https://github.com/fpauker/urua/blob/master/adressspace/ur3.png?raw=true)
60
+ ![Architecture](https://github.com/fpauker/urua/blob/master/adressspace/ur5.png?raw=true)
61
+
62
+ It offers several features combining 3 different interfaces of the Universal robot. It uses the
63
+
64
+ * Primary Secondary Interface for direct execution of UR scripts
65
+ * Dashboard server for orchestration functions e.g. starting/stopping a program
66
+ * RTDE interface for getting the robot states
27
67
 
28
68
  ## Contributing
29
69
 
data/lib/rtde.conf.xml CHANGED
@@ -1,10 +1,32 @@
1
1
  <?xml version="1.0"?>
2
2
  <rtde_config>
3
3
  <recipe key="speed">
4
- <field name="speed_slider_mask" type="UINT32"/>
5
- <field name="speed_slider_fraction" type="DOUBLE"/>
6
- </recipe>
7
-
4
+ <field name="speed_slider_mask" type="UINT32"/>
5
+ <field name="speed_slider_fraction" type="DOUBLE"/>
6
+ </recipe>
7
+ <recipe key="inbit">
8
+ <!--Only put Input Registers here which are used-->
9
+ <field name="input_bit_register_64" type="BOOL"/>
10
+ <field name="input_bit_register_65" type="BOOL"/>
11
+ </recipe>
12
+ <recipe key="inint">
13
+ <!--Only put Input Registers here which are used-->
14
+ <field name="input_int_register_0" type="INT32"/>
15
+ <field name="input_int_register_1" type="INT32"/>
16
+ <field name="input_int_register_2" type="INT32"/>
17
+ <field name="input_int_register_3" type="INT32"/>
18
+ <field name="input_int_register_4" type="INT32"/>
19
+ <field name="input_int_register_5" type="INT32"/>
20
+ <field name="input_int_register_6" type="INT32"/>
21
+ <field name="input_int_register_7" type="INT32"/>
22
+ <field name="input_int_register_8" type="INT32"/>
23
+ <field name="input_int_register_9" type="INT32"/>
24
+ </recipe>
25
+ <recipe key="indoub">
26
+ <!--Only put Input Registers here which are used-->
27
+ <field name="input_double_register_0" type="DOUBLE"/>
28
+ <field name="input_double_register_1" type="DOUBLE"/>
29
+ </recipe>
8
30
  <recipe key="out">
9
31
  <field name="timestamp" type="DOUBLE"/>
10
32
  <field name="target_q" type="VECTOR6D"/>
@@ -37,6 +59,8 @@
37
59
  <field name="actual_joint_voltage" type="VECTOR6D"/>
38
60
  <field name="actual_digital_output_bits" type="UINT64"/>
39
61
  <field name="runtime_state" type="UINT32"/>
62
+ <field name="output_bit_register_64" type="BOOL"/>
63
+ <field name="target_speed_fraction" type="DOUBLE"/>
40
64
 
41
65
  <!-- field name="output_bit_registers0_to_31" type="UINT32"/-->
42
66
  <!-- field name="output_bit_registers32_to_63" type="UINT32"/-->
data/lib/urua.rb CHANGED
@@ -28,18 +28,35 @@ module URUA
28
28
  opts['dash'] = UR::Dash.new(opts['ipadress']).connect rescue nil
29
29
  end #}}}
30
30
 
31
+ def self::start_psi(opts)
32
+ opts['psi'] = UR::Psi.new(opts['ipadress']).connect rescue nil
33
+ end
34
+
31
35
  def self::start_rtde(opts) #{{{
32
36
  ### Loading config file
33
37
  conf = UR::XMLConfigFile.new opts['rtde_config']
34
38
  output_names, output_types = conf.get_recipe opts['rtde_config_recipe_base']
35
39
  opts['rtde'] = UR::Rtde.new(opts['ipadress']).connect
36
40
 
37
- ### Set Speed to very slow
41
+ ### Set Speed
38
42
  if opts['rtde_config_recipe_speed']
39
43
  speed_names, speed_types = conf.get_recipe opts['rtde_config_recipe_speed']
40
44
  opts['speed'] = opts['rtde'].send_input_setup(speed_names, speed_types)
41
45
  opts['speed']['speed_slider_mask'] = 1
42
- opts['ov'].value = opts['speed']['speed_slider_fraction'].to_i
46
+ end
47
+
48
+ ### Set register
49
+ if opts['rtde_config_recipe_inbit']
50
+ bit_names, bit_types = conf.get_recipe opts['rtde_config_recipe_inbit']
51
+ opts['inbit'] = opts['rtde'].send_input_setup(bit_names,bit_types)
52
+ end
53
+ if opts['rtde_config_recipe_inint']
54
+ int_names, int_types = conf.get_recipe opts['rtde_config_recipe_inint']
55
+ opts['inint'] = opts['rtde'].send_input_setup(int_names,int_types)
56
+ end
57
+ if opts['rtde_config_recipe_indoub']
58
+ doub_names, doub_types = conf.get_recipe opts['rtde_config_recipe_indoub']
59
+ opts['indoub'] = opts['rtde'].send_input_setup(doub_names,doub_types)
43
60
  end
44
61
 
45
62
  ### Setup output
@@ -49,6 +66,17 @@ module URUA
49
66
  if not opts['rtde'].send_start
50
67
  puts 'Unable to start synchronization'
51
68
  end
69
+
70
+ ###Initialize all inputs
71
+ bit_names.each do |i|
72
+ opts['inbit'][i] = false
73
+ end
74
+ int_names.each do |i|
75
+ opts['inint'][i] = 0
76
+ end
77
+ doub_names.each do |i|
78
+ opts['indoub'][i] = 0.0
79
+ end
52
80
  end #}}}
53
81
 
54
82
  def self::protect_reconnect_run(opts) #{{{
@@ -56,22 +84,34 @@ module URUA
56
84
  begin
57
85
  yield
58
86
  rescue UR::Dash::Reconnect => e
87
+ puts e.message
59
88
  tries += 1
60
89
  if tries < 2
61
90
  URUA::start_dash opts
62
91
  retry
63
92
  end
93
+ rescue UR::Psi::Reconnect => e
94
+ puts e.message
95
+ tries += 1
96
+ if tries < 2
97
+ URUA::start_psi opts
98
+ retry
99
+ end
64
100
  end
65
101
  end #}}}
66
102
 
67
103
  def self::ssh_start(opts) #{{{
68
- opts['ssh'] = opts['password'] ? Net::SSH.start(opts['ipadress'], opts['username'], password: opts['password']) : Net::SSH.start(opts['ipadress'], opts['username'])
104
+ if opts['certificate']
105
+ opts['ssh'] = Net::SSH.start(opts['ipadress'], opts['username'], :port => opts['sshport'], :keys => [ opts['certificate'] ])
106
+ else
107
+ opts['ssh'] = opts['password'] ? Net::SSH.start(opts['ipadress'], opts['username'], :port => opts['sshport'], password: opts['password']) : Net::SSH.start(opts['ipadress'], opts['username'], :port => opts['sshport'])
108
+ end
69
109
  end #}}}
70
110
 
71
111
  def self::download_program(opts,name) #{{{
72
112
  counter = 0
73
113
  begin
74
- opts['ssh'].scp.download File.join(opts['url'],name)
114
+ opts['ssh'].scp.download! File.join(opts['url'],name)
75
115
  rescue => e
76
116
  counter += 1
77
117
  URUA::ssh_start opts
@@ -102,9 +142,19 @@ module URUA
102
142
  progs
103
143
  end #}}}
104
144
 
145
+ def self::robotprogram_running?(opts)
146
+ opts['ps'].value == 'Playing'
147
+ end
148
+
105
149
  def self::implementation_startup(opts) #{{{
150
+ opts['sshport'] ||= 22
151
+
106
152
  opts['rtde_config'] ||= File.join(__dir__,'rtde.conf.xml')
107
153
  opts['rtde_config_recipe_base'] ||= 'out'
154
+ opts['rtde_config_recipe_speed'] ||= 'speed'
155
+ opts['rtde_config_recipe_inbit'] ||= 'inbit'
156
+ opts['rtde_config_recipe_inint'] ||= 'inint'
157
+ opts['rtde_config_recipe_indoub'] ||= 'indoub'
108
158
 
109
159
  Proc.new do
110
160
  on startup do |opts|
@@ -113,6 +163,7 @@ module URUA
113
163
  opts['dash'] = nil
114
164
  opts['rtde'] = nil
115
165
  opts['programs'] = nil
166
+ opts['psi'] = nil
116
167
 
117
168
  # ProgramFile
118
169
  opts['pf'] = opts['server'].types.add_object_type(:ProgramFile).tap{ |p|
@@ -123,10 +174,20 @@ module URUA
123
174
  end
124
175
  end
125
176
  p.add_method :StartProgram do |node|
126
- a = node.id.to_s.split('/')
127
- URUA::protect_reconnect_run(opts) do
128
- opts['dash'].load_program(a[-2])
129
- opts['dash'].start_program
177
+ unless URUA::robotprogram_running?(opts)
178
+ a = node.id.to_s.split('/')
179
+ URUA::protect_reconnect_run(opts) do
180
+ opts['dash'].load_program(a[-2])
181
+ opts['dash'].start_program
182
+ end
183
+ end
184
+ end
185
+ p.add_method :StartAsUrScript do |node|
186
+ unless URUA::robotprogram_running?(opts)
187
+ a = node.id.to_s.split('/')
188
+ URUA::protect_reconnect_run(opts) do
189
+ opts['psi'].execute_ur_script(URUA::download_program(opts, a[-2]+".script"))
190
+ end
130
191
  end
131
192
  end
132
193
  }
@@ -144,17 +205,76 @@ module URUA
144
205
  a.add_object(:ActualVoltage, opts['server'].types.folder).tap { |p| URUA::add_axis_concept p, :AxisVoltage }
145
206
  a.add_object(:ActualMomentum, opts['server'].types.folder).tap { |p| p.add_variable :AxisMomentum }
146
207
  }
208
+ # RegitsterType
209
+ reg = opts['server'].types.add_object_type(:RegType).tap {|r|
210
+ r.add_object(:Inputs, opts['server'].types.folder).tap {|i|
211
+ i.add_object(:Bitregister, opts['server'].types.folder).tap {|b|
212
+ 64.upto(127) do |z|
213
+ b.add_variable_rw :"Bit#{z}" do |node,value,external|
214
+ if external
215
+ opts['inbit']["input_bit_register_" + z.to_s] = value
216
+ opts['rtde'].send(opts['inbit'])
217
+ end
218
+ end
219
+ end
220
+ }
221
+ i.add_object(:Intregister, opts['server'].types.folder).tap {|b|
222
+ 0.upto(47) do |z|
223
+ b.add_variable_rw :"Int#{z}" do |node,value,external|
224
+ if external
225
+ opts['inint']["input_int_register_" + z.to_s] = value.to_i
226
+ opts['rtde'].send(opts['inint'])
227
+ end
228
+ end
229
+ end
230
+ }
231
+ i.add_object(:Doubleregister, opts['server'].types.folder).tap {|b|
232
+ 0.upto(47) do |z|
233
+ b.add_variable_rw :"Double#{z}" do |node,value,external|
234
+ if external
235
+ opts['indoub']["input_double_register_" + z.to_s] = value.to_f
236
+ opts['rtde'].send(opts['indoub'])
237
+ end
238
+ end
239
+ end
240
+ }
241
+ }
242
+ r.add_object(:Outputs, opts['server'].types.folder).tap {|o|
243
+ o.add_object(:Bitregister, opts['server'].types.folder).tap {|b|
244
+ 64.upto(127) do |z|
245
+ b.add_variable :"Bit#{z}"
246
+ end
247
+ }
248
+ o.add_object(:Intregister, opts['server'].types.folder).tap {|b|
249
+ 0.upto(47) do |z|
250
+ b.add_variable :"Int#{z}"
251
+ end
252
+ }
253
+ o.add_object(:Doubleregister, opts['server'].types.folder).tap {|b|
254
+ 0.upto(47) do |z|
255
+ b.add_variable :"Double#{z}"
256
+ end
257
+ }
258
+ }
259
+ }
260
+
147
261
 
148
262
  # RobotObjectType
149
263
  rt = opts['server'].types.add_object_type(:RobotType).tap { |r|
150
264
  r.add_variables :SerialNumber, :RobotModel
151
265
  r.add_object(:State, opts['server'].types.folder).tap{ |s|
152
266
  s.add_variables :CurrentProgram, :RobotMode, :RobotState, :JointMode, :SafetyMode, :ToolMode, :ProgramState, :SpeedScaling, :Remote, :OperationalMode
153
- s.add_variable_rw :Override
267
+ s.add_variable_rw :Override do |node,value,external|
268
+ if external
269
+ opts['speed']['speed_slider_fraction'] = value / 100.0
270
+ opts['rtde'].send(opts['speed'])
271
+ end
272
+ end
154
273
  }
155
274
  r.add_object(:SafetyBoard, opts['server'].types.folder).tap{ |r|
156
275
  r.add_variables :MainVoltage, :RobotVoltage, :RobotCurrent
157
276
  }
277
+
158
278
  r.add_object(:Programs, opts['server'].types.folder).tap{ |p|
159
279
  p.add_object :Program, opts['pf'], OPCUA::OPTIONAL
160
280
  p.add_variable :Programs
@@ -172,8 +292,10 @@ module URUA
172
292
  end
173
293
  end
174
294
  r.add_method :StartProgram do
175
- URUA::protect_reconnect_run(opts) do
176
- nil unless opts['dash'].start_program
295
+ unless URUA::robotprogram_running?(opts)
296
+ URUA::protect_reconnect_run(opts) do
297
+ nil unless opts['dash'].start_program
298
+ end
177
299
  end
178
300
  end
179
301
  r.add_method :StopProgram do
@@ -186,6 +308,13 @@ module URUA
186
308
  opts['dash'].pause_program
187
309
  end
188
310
  end
311
+ r.add_method :RunUrScript, content: OPCUA::TYPES::STRING do |node, content|
312
+ unless URUA::robotprogram_running?(opts)
313
+ URUA::protect_reconnect_run(opts) do
314
+ opts['psi'].execute_ur_script(content)
315
+ end
316
+ end
317
+ end
189
318
  r.add_method :PowerOn do
190
319
  if opts['rm'].value.to_s != 'Running'
191
320
  Thread.new do
@@ -232,7 +361,7 @@ module URUA
232
361
  }
233
362
  ### populating the adress space
234
363
  ### Robot object
235
- robot = opts['server'].objects.manifest(:UR10e, rt)
364
+ robot = opts['server'].objects.manifest(File.basename(opts['namespace']), rt)
236
365
 
237
366
  opts['sn'] = robot.find(:SerialNumber)
238
367
  opts['model'] = robot.find(:RobotModel)
@@ -257,6 +386,50 @@ module URUA
257
386
  opts['mo'] = st.find(:Remote)
258
387
  opts['op'] = st.find(:OperationalMode)
259
388
 
389
+ ### register
390
+ register = robot.manifest(:Register, reg)
391
+ inputs = register.find :Inputs
392
+ ibitreg = inputs.find :Bitregister
393
+ opts['b_bits'] = 64.upto(127).map{|b|
394
+ ib = ibitreg.find :"Bit#{b}"
395
+ ib.value = false
396
+ ib
397
+ }
398
+ iintreg = inputs.find :Intregister
399
+ opts['i_int'] = 0.upto(47).map{|b|
400
+ ii = iintreg.find :"Int#{b}"
401
+ ii.value = 0
402
+ ii
403
+ }
404
+ #extend it with other registers
405
+ idoubreg = inputs.find :Doubleregister
406
+ opts['i_doub'] = 0.upto(47).map{|b|
407
+ id = idoubreg.find :"Double#{b}"
408
+ id.value = 0.0
409
+ id
410
+ }
411
+ #Output register
412
+ outputs = register.find :Outputs
413
+ obitreg = outputs.find :Bitregister
414
+ opts['o_bit'] = 64.upto(127).map{|b|
415
+ ob = obitreg.find :"Bit#{b}"
416
+ ob.value = false
417
+ ob
418
+ }
419
+ ointreg = outputs.find :Intregister
420
+ opts['o_int'] = 0.upto(47).map{|b|
421
+ oi = ointreg.find :"Int#{b}"
422
+ oi.value = 0
423
+ oi
424
+ }
425
+
426
+ odoubreg = outputs.find :Doubleregister
427
+ opts['o_doub'] = 0.upto(47).map{|b|
428
+ od = odoubreg.find :"Double#{b}"
429
+ od.value = 0.0
430
+ od
431
+ }
432
+
260
433
  ### Axes
261
434
  axes = robot.manifest(:Axes, ax)
262
435
  aapf, avelf, acurf, avolf, amomf = axes.find :ActualPositions, :ActualVelocities, :ActualCurrents, :ActualVoltage, :ActualMomentum
@@ -288,9 +461,12 @@ module URUA
288
461
  opts['af'] = aff.find :TCPForce
289
462
  opts['afa'] = aff.find :Axis1, :Axis2, :Axis3, :Axis4, :Axis5, :Axis6
290
463
 
464
+ ### Register
465
+
291
466
  ### Connecting to universal robot
292
467
  URUA::start_rtde opts
293
468
  URUA::start_dash opts
469
+ URUA::start_psi opts
294
470
 
295
471
  ### Manifest programs
296
472
  opts['programs'] = robot.find(:Programs)
@@ -298,7 +474,7 @@ module URUA
298
474
  opts['progs'] = []
299
475
  opts['semaphore'] = Mutex.new
300
476
  ### check if interfaces are ok
301
- raise if !opts['dash'] || !opts['rtde'] ##### TODO, don't return, raise
477
+ raise if !opts['dash'] || !opts['rtde'] || !opts['psi']
302
478
 
303
479
  # Functionality for threading in loop
304
480
  opts['doit_state'] = Time.now.to_i
@@ -308,6 +484,17 @@ module URUA
308
484
  # Serious comment (we do the obvious stuff)
309
485
  opts['sn'].value = opts['dash'].get_serial_number
310
486
  opts['model'].value = opts['dash'].get_robot_model
487
+ rescue Errno::ECONNREFUSED => e
488
+ print 'ECONNREFUSED: '
489
+ puts e.message
490
+ rescue UR::Dash::Reconnect => e
491
+ URUA::start_dash opts
492
+ puts e.message
493
+ puts e.backtrace
494
+ rescue UR::Psi::Reconnect => e
495
+ URUA::start_psi opts
496
+ puts e.message
497
+ puts e.backtrace
311
498
  rescue => e
312
499
  puts e.message
313
500
  puts e.backtrace
@@ -338,14 +525,12 @@ module URUA
338
525
  # check every 10 seconds for new programs
339
526
  progs = URUA::get_robot_programs(opts)
340
527
  delete = opts['progs'] - progs
341
- # puts 'Missing Nodes: ' + delete.to_s
342
528
  delete.each do |d|
343
529
  d = d[0..-5]
344
530
  opts['prognodes'][d].delete!
345
531
  opts['prognodes'].delete(d)
346
532
  end
347
533
  add = progs - opts['progs']
348
- # puts 'New nodes: ' + add.to_s
349
534
  add.each do |a|
350
535
  a = a[0..-5]
351
536
  opts['prognodes'][a] = opts['programs'].manifest(a, opts['pf'])
@@ -365,6 +550,13 @@ module URUA
365
550
  opts['rc'].value = data['actual_robot_current']
366
551
  opts['ss'].value = data['speed_scaling']
367
552
 
553
+ #register
554
+
555
+ #bitregister
556
+ # 64.upto(127).map{|r|
557
+ # opts[]
558
+ # }
559
+
368
560
  # State objects
369
561
  opts['rm'].value = UR::Rtde::ROBOTMODE[data['robot_mode']]
370
562
  opts['sm'].value = UR::Rtde::SAFETYMODE[data['safety_mode']]
@@ -383,29 +575,32 @@ module URUA
383
575
  URUA::split_vector6_data(data['actual_qd'],opts['as'], opts['asa']) # Actual TCP Speed
384
576
  URUA::split_vector6_data(data['actual_qd'],opts['af'], opts['afa']) # Actual TCP Force
385
577
 
386
- # Write values
387
- if opts['rtde_config_recipe_speed']
388
- opts['speed']['speed_slider_fraction'] = opts['ov'].value / 100.0
389
- opts['rtde'].send(opts['speed'])
578
+ #speed slider or override
579
+ if opts['ov'].value != (data['target_speed_fraction'] * 100).to_i
580
+ opts['ov'].value = (data['target_speed_fraction'] * 100).to_i
390
581
  end
582
+
391
583
  else
392
584
  if Time.now.to_i - 10 > opts['doit_rtde']
393
585
  opts['doit_rtde'] = Time.now.to_i
394
586
  URUA::start_rtde opts
395
587
  end
396
588
  end
397
-
398
589
  rescue Errno::ECONNREFUSED => e
399
- puts 'ECONNREFUSED:'
590
+ print 'ECONNREFUSED: '
400
591
  puts e.message
401
592
  rescue UR::Dash::Reconnect => e
402
593
  URUA::start_dash opts
594
+ puts e.message
595
+ puts e.backtrace
596
+ rescue UR::Psi::Reconnect => e
597
+ URUA::start_psi opts
598
+ puts e.message
599
+ puts e.backtrace
403
600
  rescue => e
404
- unless opts['dash']
405
- URUA::start_dash opts
406
- end
407
- p e.message
408
- p e.backtrace
601
+ puts e.message
602
+ puts e.backtrace
603
+ raise
409
604
  end
410
605
  end
411
606
  end #}}}
@@ -1,17 +1,18 @@
1
1
  ### OPC UA specific config
2
2
  ### --------------------------------------------------------------------------
3
- namespace: https://centurio.work/ur10evva
3
+ namespace: https://centurio.work/urwst51
4
4
 
5
5
  ### UR specific config
6
6
  ### --------------------------------------------------------------------------
7
- ipadress: 192.168.1.26
7
+ ipadress: 192.168.1.25
8
+ sshport: 22
8
9
  username: ur
9
- password: easybot
10
+ certificate: /home/mangler/Projects/urua/server/devserver.rsa
10
11
  url: /programs
11
12
 
12
13
  ### UR simulation specific config
13
14
  ### --------------------------------------------------------------------------
14
15
  ### if no password, password has to entered when server is started
15
- # ipadress: localhost
16
- # username: myusername
16
+ # ipadress: 192.168.1.25
17
+ # username: ur
17
18
  # url: /home/myusername/somedirectory/ursim-current/programs.UR10
@@ -0,0 +1,49 @@
1
+ -----BEGIN OPENSSH PRIVATE KEY-----
2
+ b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAACFwAAAAdzc2gtcn
3
+ NhAAAAAwEAAQAAAgEAtXjKzO8SKL38RmcIPnoqDWGphjchJPkoNg2P6+ZubURgGD0IZX1X
4
+ RjhFSwN6kK7WmwxIxA6fm/DuNUaQOH1AIFPet2y/bGcxlxV4/ws/XNbpjOkV8rmeoGhX1I
5
+ Xsoqes2hQwI1osneShzpYuYbrFfHfvly6XFN8Gh6l9ld97FhyzMM9xNXR7D25M6mYEyk78
6
+ z+1yOKppd738pj0lmI8COJ8OtMTbP/+ehr2I0t+VAcBM/XM6pfyDLe8vZRDfa5KP4kTtac
7
+ 2Qzr0LG1h5XSjSe9kgjKnEHSl0oEwtq1gQyzDgnykT7q+ju9IlmUXxvnul3qdBpTWCMkil
8
+ ohcNsZ6Ejy7hiwaTTdEJXYalXt7F2fxnMOr+BnWBM4RIEmtpfaWbd3HIGvT/N9Zc1VyRKc
9
+ OJnEqzLPjhZa+MnEydvaCLCcPiOw8tIh5B19JkG4IkJW4aPhsSocOkbNSTVwbX2Hx0Sg8r
10
+ EjtcO0cK5K0HyyGFAqbKqi/tF8Gfwvn0+cH/98vCZ2DnKvcFNzyVAoY+XWwr4MhPTbVe05
11
+ Ttjc/GVhGOKSVDuC2bHBerFI/PyVnFsLsiLlmahW0Wkq0zI038oYtkyuxRNLT/PJAGcFjD
12
+ reiuKQxS/95ot/h3gPvikhozCkM+XzHRIL70diQVExe6MwIPsutQGWxzi5Pg9f4lJ55OvU
13
+ MAAAdQEe8n6xHvJ+sAAAAHc3NoLXJzYQAAAgEAtXjKzO8SKL38RmcIPnoqDWGphjchJPko
14
+ Ng2P6+ZubURgGD0IZX1XRjhFSwN6kK7WmwxIxA6fm/DuNUaQOH1AIFPet2y/bGcxlxV4/w
15
+ s/XNbpjOkV8rmeoGhX1IXsoqes2hQwI1osneShzpYuYbrFfHfvly6XFN8Gh6l9ld97Fhyz
16
+ MM9xNXR7D25M6mYEyk78z+1yOKppd738pj0lmI8COJ8OtMTbP/+ehr2I0t+VAcBM/XM6pf
17
+ yDLe8vZRDfa5KP4kTtac2Qzr0LG1h5XSjSe9kgjKnEHSl0oEwtq1gQyzDgnykT7q+ju9Il
18
+ mUXxvnul3qdBpTWCMkilohcNsZ6Ejy7hiwaTTdEJXYalXt7F2fxnMOr+BnWBM4RIEmtpfa
19
+ Wbd3HIGvT/N9Zc1VyRKcOJnEqzLPjhZa+MnEydvaCLCcPiOw8tIh5B19JkG4IkJW4aPhsS
20
+ ocOkbNSTVwbX2Hx0Sg8rEjtcO0cK5K0HyyGFAqbKqi/tF8Gfwvn0+cH/98vCZ2DnKvcFNz
21
+ yVAoY+XWwr4MhPTbVe05Ttjc/GVhGOKSVDuC2bHBerFI/PyVnFsLsiLlmahW0Wkq0zI038
22
+ oYtkyuxRNLT/PJAGcFjDreiuKQxS/95ot/h3gPvikhozCkM+XzHRIL70diQVExe6MwIPsu
23
+ tQGWxzi5Pg9f4lJ55OvUMAAAADAQABAAACAQCzSjUrRePuBs4xDGhzuaTEdcHUTbFcYyHc
24
+ TYfs7Ewbfltmdx5Njwlj4gJr+3LjcSmsI/XcZgpBOkdOsXmZpf1uMw6usC1rv4SaHWfeq1
25
+ Edu2MhicPafJOBLbXgzbQee4TmLN3mf5fnI1TN00jd23Zz49b9ydUQlMxRyh2+rf5guVg8
26
+ mCbkRkGy3Cn3x3ViH6ndEF4yKANtf3IXGACF+nyaTmNsK7XmQ/lua+G7XZRNF525JlhCV/
27
+ mOr2pm8sWZ9UJcrfbV+nfgGZvYl4/If6V9IObssmmE2klUeg8A41AsQA0ckqwTvMoKrbPh
28
+ +928cVNOaHcN75DDd0zVmOs5mkChvh/Y1Yn/4/J24okRzXJ0WreOKresN4YZ+01o6tpyTM
29
+ 7499d+Wz6abgCq2QsUuDPnkvi5CMj7FRu2XpbkGAYilb6KycpVEQvo1w9thYm5nPWiXJRy
30
+ XshXZOOwo3SGyJYockUUkL4HnnCNRhl6qb+rmcg9h/IdWTTTxOihaEFcfTY3Y7+mZzVoSm
31
+ MH7BeLUS8WW96njIlIfjReWM7gQxh18VSACElc8GE5BYyq4C8rKexs8veaK9zLFS0/ASTL
32
+ 1kq2h3ADrPiVHMPTm0ebjEFsOr0aoXaRgerh4oOJGmddLSbzPgBTClEmOCuung3BOqhppV
33
+ NGRJnqaYdZ4rbGiXh6gQAAAQAzQxsvdgMg7JBpynuSWF7ehK/OC2Zw5YD/bYD1DV7DDLpQ
34
+ xtVVLQA5vmnyUYTMNs6k5tBDNnyzfuoKGard4dhU4bCn1ET6ZRhaDF7ywWiDwNo8haTU9D
35
+ 5sYRDmtD6D4p0toNWUbTORUCxWWfLa6qYBbD3rhXQpJ1JQ3ULw3fWtMpCBWFkiTVecsLYx
36
+ +M6UWpMwAK/HndzlGDYDbGRjNkWgNSy4VOrYWTabFk4TlRQBvuZRIKKfxTMh0c/AsqHSZE
37
+ vamoA5huUWLpv9ZYkFVF2mzlmxVeOzAsaRxYGMNSEqQBdqnpDwfpfhaVXSreC4sRMJvh9k
38
+ PIMJl2BkQkNJu7EjAAABAQDtvX1SlMcb+GUY9BaH5Bc/+3x2clQbTQckbTF1Ao58ENzRm+
39
+ 35a7DxCQgaOnqp/hAo2gqTE0R7gl8eRlhS79XQgW1HFdmS+ueFYV5W+FIDN5TqngVbV4CN
40
+ YVbTU28VWw0j/FH5ia5rLEjCNrZSoCfFaF+U4+U85v3cDigDzwFSV+wN0DrlQ4NaPbIqfu
41
+ +6cZRVV79yfMvlMz+2BKkDziIVHzE0Y4kPQTqlNfJXJxL29EJyeA1cJQlAZGV2cEh15C6o
42
+ ZBMfGx8T9ol5bBZx+hWMkLUAKgrGfKcsaffcyas85GPf9XSBL+A0oXdH9ZPz/Oz0jl7/6g
43
+ be4G7Sl4l4qvpBAAABAQDDaPCD4MXPG6yARnSXZ90ymRkevRExkfAfOMpy7WNZeK2+IM3T
44
+ TcK+tf1CMEtRgvoBwCmfgoLeMYiAl/833B7p009D0Yc+p2f58x+UvyQlYLtwWDYmtpTrZ7
45
+ vcRw2Ijylox1V+ymJk2o6/rrlsu8Et673YHlUzBGqyMUxkWwUFkJ/70p7lWmLELD+oSD7k
46
+ HczLkvCGx+5slALTKnEOVRhKT+j6uM4XOjsepyuQtWJpnu91rR8tNnprtgq6hlKUazq24f
47
+ 04G4vO34rVSXc1rzkYLIQNeayYpxmJ/ZVvtIR169hXYBE1hg0no3APiEZAqaeAXtzlo6D2
48
+ a+DF8plVmS6DAAAAFHBhdWtlcmY4N0BoYWlyeWNoZXN0AQIDBAUG
49
+ -----END OPENSSH PRIVATE KEY-----
@@ -1,10 +1,11 @@
1
1
  ### OPC UA specific config
2
2
  ### --------------------------------------------------------------------------
3
- namespace: https://centurio.work/ur10evva
3
+ namespace: https://centurio.work/ur10
4
4
 
5
5
  ### UR specific config
6
6
  ### --------------------------------------------------------------------------
7
7
  ipadress: 10.0.31.22
8
+ sshport: 22
8
9
  username: root
9
10
  password: easybot
10
11
  url: /programs
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: urua
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.99.5001
4
+ version: 0.99.5006
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Pauker
8
8
  - Juergen eTM Mangler
9
- autorequire:
9
+ autorequire:
10
10
  bindir: tools
11
11
  cert_chain: []
12
- date: 2020-06-05 00:00:00.000000000 Z
12
+ date: 2021-10-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: opcua
@@ -29,14 +29,14 @@ dependencies:
29
29
  name: ur-sock
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - ">="
32
+ - - "~>"
33
33
  - !ruby/object:Gem::Version
34
34
  version: '1.0'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ">="
39
+ - - "~>"
40
40
  - !ruby/object:Gem::Version
41
41
  version: '1.0'
42
42
  - !ruby/object:Gem::Dependency
@@ -46,6 +46,9 @@ dependencies:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
48
  version: '0.5'
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: 0.5.9
49
52
  type: :runtime
50
53
  prerelease: false
51
54
  version_requirements: !ruby/object:Gem::Requirement
@@ -53,6 +56,71 @@ dependencies:
53
56
  - - "~>"
54
57
  - !ruby/object:Gem::Version
55
58
  version: '0.5'
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 0.5.9
62
+ - !ruby/object:Gem::Dependency
63
+ name: net-ssh
64
+ requirement: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '5.2'
69
+ type: :runtime
70
+ prerelease: false
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '5.2'
76
+ - !ruby/object:Gem::Dependency
77
+ name: net-scp
78
+ requirement: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
90
+ - !ruby/object:Gem::Dependency
91
+ name: ed25519
92
+ requirement: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1'
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: '1.2'
100
+ type: :runtime
101
+ prerelease: false
102
+ version_requirements: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - "~>"
105
+ - !ruby/object:Gem::Version
106
+ version: '1'
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '1.2'
110
+ - !ruby/object:Gem::Dependency
111
+ name: bcrypt_pbkdf
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '1'
117
+ type: :runtime
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '1'
56
124
  description: OPC UA Server for Universal Robots. See https://github.com/fpauker/urua
57
125
  email: florian.pauker@gmail.com
58
126
  executables:
@@ -69,6 +137,7 @@ files:
69
137
  - lib/urua.rb
70
138
  - server/devserver.conf
71
139
  - server/devserver.rb
140
+ - server/devserver.rsa
72
141
  - server/uruaserver.conf
73
142
  - server/uruaserver.rb
74
143
  - tools/urua
@@ -76,7 +145,7 @@ homepage: https://github.com/fpauker/urua
76
145
  licenses:
77
146
  - GPL-3.0
78
147
  metadata: {}
79
- post_install_message:
148
+ post_install_message:
80
149
  rdoc_options: []
81
150
  require_paths:
82
151
  - lib
@@ -91,8 +160,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
160
  - !ruby/object:Gem::Version
92
161
  version: '0'
93
162
  requirements: []
94
- rubygems_version: 3.1.2
95
- signing_key:
163
+ rubygems_version: 3.2.22
164
+ signing_key:
96
165
  specification_version: 4
97
166
  summary: OPC UA Server for Universal Robots
98
167
  test_files: []