escalator 0.2.3 → 0.2.4
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.
- checksums.yaml +4 -4
- data/README.md +21 -3
- data/README_jp.md +9 -2
- data/lib/escalator/console.rb +3 -2
- data/lib/escalator/protocol/keyence/kv_protocol.rb +1 -1
- data/lib/escalator/protocol/protocol.rb +2 -0
- data/lib/escalator/version.rb +1 -1
- data/lib/plc/emulator/emu_plc.rb +90 -19
- data/lib/plc/mitsubishi/iq-r/r08/r08.gx3 +0 -0
- data/template/escalator/asm/main.esc +20 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96df485214287d8eb979038fb09affe48df28e64
|
4
|
+
data.tar.gz: e4373e1835a8b56cad7fed3d576fa2174e1b3537
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8aa906b7ecf76177535701a6a2d98a140f23e83d8758a38442f393e3cd8b1d0777cf3c2818aed377eb852ba3ae9d6a493c467147cbf7c728c817ef5a541a3533
|
7
|
+
data.tar.gz: 6af629c1378af4bfde276e48640e9a28b6add1661a399c57a527ba96d5c6d7f266f28fe25a82a22898a84fdaaa8521de6d82c5e509083d7b4e8c1420e0bfbb78
|
data/README.md
CHANGED
@@ -47,8 +47,6 @@ Created files are consisted like the tree below.
|
|
47
47
|
└── r08.gx3
|
48
48
|
```
|
49
49
|
|
50
|
-
[](https://youtu.be/aFEtOIgKLvQ)
|
51
|
-
|
52
50
|
# Connection configuration
|
53
51
|
|
54
52
|
## PLC configuration
|
@@ -92,6 +90,7 @@ Refer [Wiki](https://github.com/ito-soft-design/escalator/wiki/mnemonic) to chec
|
|
92
90
|
|
93
91
|
```
|
94
92
|
# main.esc
|
93
|
+
# |M0|-|M1|----(M2)
|
95
94
|
LD M0
|
96
95
|
AND M1
|
97
96
|
OUT M2
|
@@ -158,8 +157,27 @@ Below example writes values to devices from M0 to M7.
|
|
158
157
|
> w m0 0 0 0 1 1 0 1 1
|
159
158
|
```
|
160
159
|
|
160
|
+
If you want to turn on and off the device like pushing a button, use p command.
|
161
|
+
|
162
|
+
```sh
|
163
|
+
> p m0
|
164
|
+
```
|
165
|
+
|
166
|
+
You can describe turn on time duration after a device. The unit is sec.
|
167
|
+
|
168
|
+
```sh
|
169
|
+
> p m0 1.5
|
170
|
+
```
|
171
|
+
|
172
|
+
```
|
173
|
+
# |M0|---(M1)
|
174
|
+
LD M0
|
175
|
+
OUT M1
|
176
|
+
```
|
177
|
+
|
178
|
+
[](https://gyazo.com/565d24a35887503281a46775f6ccd747)
|
161
179
|
|
162
|
-
[](https://youtu.be/qGbicGLB7Gs)
|
180
|
+
<!-- [](https://youtu.be/qGbicGLB7Gs) -->
|
163
181
|
|
164
182
|
|
165
183
|
# Information related escalator
|
data/README_jp.md
CHANGED
@@ -94,6 +94,7 @@ PLC側の実装がまだ進んでいないので実行できるニーモニッ
|
|
94
94
|
|
95
95
|
```
|
96
96
|
# main.esc
|
97
|
+
# |M0|-|M1|----(M2)
|
97
98
|
LD M0
|
98
99
|
AND M1
|
99
100
|
OUT M2
|
@@ -160,7 +161,7 @@ done uploading
|
|
160
161
|
> w m0 0 0 0 1 1 0 1 1
|
161
162
|
```
|
162
163
|
|
163
|
-
ボタンを押した様にパルス状にデバイスをオンにするには
|
164
|
+
ボタンを押した様にパルス状にデバイスをオンにするにはpコマンドを使用します。
|
164
165
|
|
165
166
|
```sh
|
166
167
|
> p m0
|
@@ -172,9 +173,15 @@ done uploading
|
|
172
173
|
> p m0 1.5
|
173
174
|
```
|
174
175
|
|
176
|
+
```
|
177
|
+
# |M0|---(M1)
|
178
|
+
LD M0
|
179
|
+
OUT M1
|
180
|
+
```
|
175
181
|
|
182
|
+
[](https://gyazo.com/565d24a35887503281a46775f6ccd747)
|
176
183
|
|
177
|
-
[](https://youtu.be/qGbicGLB7Gs)
|
184
|
+
<!-- [](https://youtu.be/qGbicGLB7Gs) -->
|
178
185
|
|
179
186
|
## エスカレーターに関する情報
|
180
187
|
|
data/lib/escalator/console.rb
CHANGED
@@ -46,13 +46,14 @@ module Escalator
|
|
46
46
|
d = protocol.device_by_name EscDevice.new($1)
|
47
47
|
c = $2 ? $2.to_i : 1
|
48
48
|
values = protocol.get_from_devices d, c
|
49
|
+
values = values.map{|v| case v; when true; 1; when false; 0; else; v; end}
|
49
50
|
puts values.join(" ")
|
50
51
|
when /^p\s+(\w+)(\s+(\d+))?/
|
51
52
|
d = protocol.device_by_name EscDevice.new($1)
|
52
53
|
t = $2 ? $2.to_f : 0.1
|
53
|
-
protocol.set_to_devices d,
|
54
|
+
protocol.set_to_devices d, true
|
54
55
|
sleep t
|
55
|
-
protocol.set_to_devices d,
|
56
|
+
protocol.set_to_devices d, false
|
56
57
|
when /^w\s+(\w+)/
|
57
58
|
d = protocol.device_by_name EscDevice.new($1)
|
58
59
|
v = $'.scan(/\d+/).map{|e| e.to_i}
|
@@ -55,7 +55,7 @@ module Keyence
|
|
55
55
|
|
56
56
|
def get_bits_from_device count, device
|
57
57
|
values = get_words_from_device count, device
|
58
|
-
values.map{|v| v == 0 ? false : true}
|
58
|
+
values = values.map{|v| v == 0 ? false : true}
|
59
59
|
values.each do |v|
|
60
60
|
device.bool = v
|
61
61
|
device = device_by_name (device+1).name
|
@@ -86,8 +86,10 @@ module Protocol
|
|
86
86
|
end
|
87
87
|
|
88
88
|
def set_to_devices device, values
|
89
|
+
values = [values] unless values.is_a? Array
|
89
90
|
d = device_by_name device
|
90
91
|
if d.bit_device?
|
92
|
+
values = values.map{|v| case v; when 1; true; when 0; false; else; v; end}
|
91
93
|
set_bits_to_device values, d
|
92
94
|
else
|
93
95
|
set_words_to_device values, d
|
data/lib/escalator/version.rb
CHANGED
data/lib/plc/emulator/emu_plc.rb
CHANGED
@@ -45,6 +45,10 @@ module Emulator
|
|
45
45
|
|
46
46
|
CYCLE_RUN_FLAG = 2
|
47
47
|
|
48
|
+
INDEX_BIT_STACK_COUNT = 4
|
49
|
+
INDEX_BIT_STACK = 5
|
50
|
+
SIZE_OF_BIT_STACK = 3
|
51
|
+
|
48
52
|
def initialize
|
49
53
|
SUFFIXES.each do |k|
|
50
54
|
eval "@#{k}_devices = []"
|
@@ -95,7 +99,7 @@ module Emulator
|
|
95
99
|
when 0
|
96
100
|
status_form_plc.value = CYCLE_RUN_FLAG
|
97
101
|
@program_pointer = 0
|
98
|
-
|
102
|
+
clear_stacks
|
99
103
|
while fetch_and_execution; end
|
100
104
|
sleep 0.0001
|
101
105
|
else
|
@@ -105,18 +109,14 @@ module Emulator
|
|
105
109
|
end
|
106
110
|
|
107
111
|
def bool
|
108
|
-
|
109
|
-
!!@stacks.last.last
|
110
|
-
else
|
111
|
-
nil
|
112
|
-
end
|
112
|
+
(stack_device.word & 1) != 0 ? true : false
|
113
113
|
end
|
114
114
|
|
115
115
|
def bool= value
|
116
|
-
if
|
117
|
-
|
116
|
+
if value
|
117
|
+
stack_device.word |= 1
|
118
118
|
else
|
119
|
-
|
119
|
+
stack_device.word &= 0xfffe;
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
@@ -196,10 +196,71 @@ module Emulator
|
|
196
196
|
|
197
197
|
private
|
198
198
|
|
199
|
-
|
200
|
-
|
199
|
+
# ----------------
|
200
|
+
# stack operations
|
201
|
+
def stack_device index=0
|
202
|
+
device_by_name (device_by_name("SD0") + INDEX_BIT_STACK + index).name
|
203
|
+
end
|
204
|
+
|
205
|
+
def stack_count_device
|
206
|
+
device_by_name (device_by_name("SD0") + INDEX_BIT_STACK_COUNT).name
|
207
|
+
end
|
208
|
+
|
209
|
+
def push_stack flag = false
|
210
|
+
stack_device.word <<= 1
|
211
|
+
if flag
|
212
|
+
stack_device.word |= 1
|
213
|
+
else
|
214
|
+
stack_device.word &= 0xfffe
|
215
|
+
end
|
216
|
+
stack_device.word &= 0xffff
|
217
|
+
end
|
218
|
+
|
219
|
+
def pop_stack
|
220
|
+
stack_device.word >>= 1
|
221
|
+
stack_device.word |= 0x8000
|
201
222
|
end
|
202
223
|
|
224
|
+
def clear_stacks
|
225
|
+
stack_device.word = 0xffff
|
226
|
+
stack_count_device.word = 0
|
227
|
+
end
|
228
|
+
|
229
|
+
def push_stacks
|
230
|
+
if stack_count_device.word > SIZE_OF_BIT_STACK
|
231
|
+
puts "ERROR: stacks overflow pc: H#{program_pointer.to_s(16).rjust(4, "0")}"
|
232
|
+
return
|
233
|
+
end
|
234
|
+
values = []
|
235
|
+
(SIZE_OF_BIT_STACK - 1).downto 0 do |i|
|
236
|
+
values << stack_device(i).word
|
237
|
+
end
|
238
|
+
values.shift
|
239
|
+
values << 0xffff
|
240
|
+
SIZE_OF_BIT_STACK.times do |i|
|
241
|
+
stack_device(i).word = values.pop
|
242
|
+
end
|
243
|
+
stack_count_device.word += 1
|
244
|
+
end
|
245
|
+
|
246
|
+
def pop_stacks
|
247
|
+
if stack_count_device.word <= 0
|
248
|
+
puts "ERROR: stacks underflow pc: H#{program_pointer.to_s(16).rjust(4, "0")}"
|
249
|
+
return
|
250
|
+
end
|
251
|
+
values = []
|
252
|
+
(SIZE_OF_BIT_STACK - 1).downto 0 do |i|
|
253
|
+
values << stack_device(i).word
|
254
|
+
end
|
255
|
+
v = values.pop
|
256
|
+
values.each_with_index do |v, i|
|
257
|
+
stack_device(i).word = v
|
258
|
+
end
|
259
|
+
stack_count_device.word -= 1
|
260
|
+
v
|
261
|
+
end
|
262
|
+
# ----------------
|
263
|
+
|
203
264
|
def sync_input
|
204
265
|
@lock.synchronize {
|
205
266
|
device_dict.values.each do |d|
|
@@ -217,7 +278,10 @@ module Emulator
|
|
217
278
|
end
|
218
279
|
|
219
280
|
def and_join_stack
|
220
|
-
|
281
|
+
d = stack_device
|
282
|
+
b = d.word == 0xffff
|
283
|
+
d.word = 0xffff
|
284
|
+
push_stack b
|
221
285
|
end
|
222
286
|
|
223
287
|
def mnenonic_table
|
@@ -324,7 +388,7 @@ EOB
|
|
324
388
|
def ld inverse=false
|
325
389
|
b = fetch_bool_value inverse
|
326
390
|
return false if b.nil?
|
327
|
-
|
391
|
+
push_stack b
|
328
392
|
true
|
329
393
|
end
|
330
394
|
def ldi; ld true; end
|
@@ -352,12 +416,15 @@ EOB
|
|
352
416
|
def ori; send :or, true; end
|
353
417
|
|
354
418
|
def anb
|
419
|
+
b = self.bool
|
420
|
+
pop_stack
|
421
|
+
self.bool &= b
|
355
422
|
true
|
356
423
|
end
|
357
424
|
|
358
425
|
def orb
|
359
426
|
b = self.bool
|
360
|
-
|
427
|
+
pop_stack
|
361
428
|
self.bool |= b
|
362
429
|
true
|
363
430
|
end
|
@@ -366,13 +433,17 @@ EOB
|
|
366
433
|
|
367
434
|
def mps
|
368
435
|
and_join_stack
|
369
|
-
|
436
|
+
b = self.bool
|
437
|
+
push_stacks
|
438
|
+
push_stack b
|
370
439
|
true
|
371
440
|
end
|
372
441
|
|
373
442
|
def mrd
|
374
|
-
|
375
|
-
|
443
|
+
b = self.bool
|
444
|
+
pop_stacks
|
445
|
+
push_stacks
|
446
|
+
push_stack b
|
376
447
|
true
|
377
448
|
end
|
378
449
|
def mpp; mrd; end
|
@@ -385,7 +456,7 @@ EOB
|
|
385
456
|
return false
|
386
457
|
end
|
387
458
|
d.bool = inverse ? !self.bool : self.bool unless d.input?
|
388
|
-
|
459
|
+
pop_stack
|
389
460
|
true
|
390
461
|
end
|
391
462
|
def outi; out true; end
|
@@ -398,7 +469,7 @@ EOB
|
|
398
469
|
return false
|
399
470
|
end
|
400
471
|
d.bool = !inverse if self.bool unless d.input?
|
401
|
-
|
472
|
+
pop_stack
|
402
473
|
true
|
403
474
|
end
|
404
475
|
def rst; set true; end
|
Binary file
|
@@ -1,5 +1,5 @@
|
|
1
|
-
#
|
2
|
-
#
|
1
|
+
# |X0|-+-|/X1|-|/Y1|---(Y0)
|
2
|
+
# |Y0|-+
|
3
3
|
LD X0
|
4
4
|
OR Y0
|
5
5
|
ANI X1
|
@@ -49,4 +49,22 @@ OUT Y2
|
|
49
49
|
MPP
|
50
50
|
OUTI Y3
|
51
51
|
|
52
|
+
# |M14|---[SET M17]
|
53
|
+
# SET is not implement completely.
|
54
|
+
# If both conditions of set and rst turn on same time, output is not stable.
|
55
|
+
LD M14
|
56
|
+
SET M17
|
57
|
+
|
58
|
+
# |M15|---[RST M17]
|
59
|
+
# RST is not implement completely.
|
60
|
+
# If both conditions of set and rst turn on same time, output is not stable.
|
61
|
+
LD M15
|
62
|
+
RST M17
|
63
|
+
|
64
|
+
# |M16|---[FF M17]
|
65
|
+
# Currently ff is not supported.
|
66
|
+
#LD M16
|
67
|
+
#FF M17
|
68
|
+
|
69
|
+
NOP
|
52
70
|
END
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: escalator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Katsuyoshi Ito
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|