ladder_drive 0.5.2 → 0.6.0

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
- SHA1:
3
- metadata.gz: 4f4231540625526b7fd6fbfc169a81e03b1263b9
4
- data.tar.gz: 5564a1fcdacdfa69ac431d70f47043127d492a2b
2
+ SHA256:
3
+ metadata.gz: 2bd6ed103f79bb7083b861a6464f83c668dcbb5c14808d3e702cc5a4206c9c6b
4
+ data.tar.gz: e7c1f12717307d569f203f8c054413cf97c69e66c832247846f675f0405b9d4f
5
5
  SHA512:
6
- metadata.gz: ee8830bcdcea99c2dcb5f81474b5e13458a9cf075c0cbbf13762b9c4d03825a9983ba635aa5de00c4210069ca555f1897875727804ff7016d97cd8236923cd19
7
- data.tar.gz: 5a7a21040c260cee1bf3769e1fef2507e447dfba2990586bc820dba6dbc30250c1e1f20a6c0c64e268337a794d52e24c7f62a0c28cb5931b499a2eaf934aa61b
6
+ metadata.gz: f6b4b164bbeba262f1c57334955ea09e423662b6e63a1b502f953211df9640645731a3970316e376f4545f046a75db2c3c5a0d3705d16725dd033ce3156e3483
7
+ data.tar.gz: a0525951ac3a7d82a1b767806a0b59e2c5a7f95b55621e7ab7fd456689659d3f537f5c90f2baa3cc5cd618c536c66510ccb97cc2bc29b751a5b74a0e2b314518
data/.gitignore CHANGED
@@ -3,7 +3,6 @@
3
3
  /Gemfile.lock
4
4
  /_yardoc/
5
5
  /coverage/
6
- /doc/
7
6
  /pkg/
8
7
  /spec/reports/
9
8
  /tmp/
data/Gemfile CHANGED
@@ -5,7 +5,11 @@ gemspec
5
5
 
6
6
  gem "test-unit"
7
7
 
8
- gem "activesupport", ">=4.2.7"
8
+ gem "activesupport", '~> 4.2', '>= 4.2.7'
9
9
 
10
- gem 'pi_piper'
10
+ gem 'pi_piper', ">= 2.0.0"
11
+ gem "ffi", "~> 1.9.24"
11
12
 
13
+ gem 'serialport'
14
+ gem 'google_drive'
15
+ gem "ruby-trello"
data/Gemfile.lock CHANGED
@@ -1,49 +1,125 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ladder_drive (0.5.2)
4
+ ladder_drive (0.6.0)
5
5
  activesupport (~> 4.2, >= 4.2.7)
6
- pi_piper
6
+ ffi (~> 1.9.24, >= 1.9.24)
7
+ pi_piper (>= 2.0.0)
7
8
  thor (~> 0)
8
9
 
9
10
  GEM
10
11
  remote: https://rubygems.org/
11
12
  specs:
12
- activesupport (4.2.7.1)
13
+ activemodel (4.2.11)
14
+ activesupport (= 4.2.11)
15
+ builder (~> 3.1)
16
+ activesupport (4.2.11)
13
17
  i18n (~> 0.7)
14
- json (~> 1.7, >= 1.7.7)
15
18
  minitest (~> 5.1)
16
19
  thread_safe (~> 0.3, >= 0.3.4)
17
20
  tzinfo (~> 1.1)
21
+ addressable (2.5.2)
22
+ public_suffix (>= 2.0.2, < 4.0)
23
+ builder (3.2.3)
24
+ concurrent-ruby (1.1.3)
25
+ declarative (0.0.10)
26
+ declarative-option (0.1.0)
27
+ domain_name (0.5.20180417)
28
+ unf (>= 0.0.5, < 1.0.0)
18
29
  eventmachine (1.0.9)
19
- ffi (1.9.18)
20
- ffi (1.9.18-x64-mingw32)
21
- i18n (0.7.0)
22
- json (1.8.3)
23
- minitest (5.9.1)
30
+ faraday (0.15.4)
31
+ multipart-post (>= 1.2, < 3)
32
+ ffi (1.9.25)
33
+ google-api-client (0.21.2)
34
+ addressable (~> 2.5, >= 2.5.1)
35
+ googleauth (>= 0.5, < 0.7.0)
36
+ httpclient (>= 2.8.1, < 3.0)
37
+ mime-types (~> 3.0)
38
+ representable (~> 3.0)
39
+ retriable (>= 2.0, < 4.0)
40
+ google_drive (3.0.0)
41
+ google-api-client (>= 0.11.0, < 0.22.0)
42
+ googleauth (>= 0.5.0, < 1.0.0)
43
+ nokogiri (>= 1.5.3, < 2.0.0)
44
+ googleauth (0.6.7)
45
+ faraday (~> 0.12)
46
+ jwt (>= 1.4, < 3.0)
47
+ memoist (~> 0.16)
48
+ multi_json (~> 1.11)
49
+ os (>= 0.9, < 2.0)
50
+ signet (~> 0.7)
51
+ http-cookie (1.0.3)
52
+ domain_name (~> 0.5)
53
+ httpclient (2.8.3)
54
+ i18n (0.9.5)
55
+ concurrent-ruby (~> 1.0)
56
+ json (2.1.0)
57
+ jwt (2.1.0)
58
+ memoist (0.16.0)
59
+ mime-types (3.2.2)
60
+ mime-types-data (~> 3.2015)
61
+ mime-types-data (3.2018.0812)
62
+ mini_portile2 (2.3.0)
63
+ minitest (5.11.3)
64
+ multi_json (1.13.1)
65
+ multipart-post (2.0.0)
66
+ netrc (0.11.0)
67
+ nokogiri (1.8.5)
68
+ mini_portile2 (~> 2.3.0)
69
+ oauth (0.5.4)
70
+ os (1.0.0)
24
71
  pi_piper (2.0.0)
25
72
  eventmachine (= 1.0.9)
26
73
  ffi
27
- power_assert (0.2.7)
74
+ power_assert (1.1.3)
75
+ public_suffix (3.0.3)
28
76
  rake (10.5.0)
29
- test-unit (3.1.7)
77
+ representable (3.0.4)
78
+ declarative (< 0.1.0)
79
+ declarative-option (< 0.2.0)
80
+ uber (< 0.2.0)
81
+ rest-client (2.0.2)
82
+ http-cookie (>= 1.0.2, < 2.0)
83
+ mime-types (>= 1.16, < 4.0)
84
+ netrc (~> 0.8)
85
+ retriable (3.1.2)
86
+ ruby-trello (2.1.0)
87
+ activemodel (>= 3.2.0)
88
+ addressable (~> 2.3)
89
+ json
90
+ oauth (>= 0.4.5)
91
+ rest-client (>= 1.8.0)
92
+ serialport (1.3.1)
93
+ signet (0.11.0)
94
+ addressable (~> 2.3)
95
+ faraday (~> 0.9)
96
+ jwt (>= 1.5, < 3.0)
97
+ multi_json (~> 1.10)
98
+ test-unit (3.2.8)
30
99
  power_assert
31
- thor (0.20.0)
32
- thread_safe (0.3.5)
33
- tzinfo (1.2.2)
100
+ thor (0.20.3)
101
+ thread_safe (0.3.6)
102
+ tzinfo (1.2.5)
34
103
  thread_safe (~> 0.1)
104
+ uber (0.1.0)
105
+ unf (0.1.4)
106
+ unf_ext
107
+ unf_ext (0.0.7.5)
35
108
 
36
109
  PLATFORMS
37
110
  ruby
38
- x64-mingw32
39
111
 
40
112
  DEPENDENCIES
41
- activesupport (>= 4.2.7)
113
+ activesupport
42
114
  bundler (~> 1.11)
115
+ ffi
116
+ google_drive
43
117
  ladder_drive!
44
118
  pi_piper
45
119
  rake (~> 10.0)
120
+ ruby-trello
121
+ serialport
46
122
  test-unit
47
123
 
48
124
  BUNDLED WITH
49
- 1.15.4
125
+ 1.16.6
data/README.md CHANGED
@@ -4,12 +4,12 @@
4
4
 
5
5
  The ladder_drive is a simple abstract ladder for PLC (Programmable Logic Controller).
6
6
 
7
- We aim to design abstraction ladder which is able to run on any PLC with same ladder source or binary and prepare full stack tools.
7
+ We aim to design the abstraction ladder which can run on any PLC with same ladder source or binary and prepare full stack tools.
8
8
 
9
9
  # Getting started
10
10
 
11
11
  It's required the Ruby environment.
12
- To prepare the Ruby environment, please find web sites.
12
+ To prepare the Ruby environment, please find websites.
13
13
 
14
14
  Install LadderDrive at the command prompt.
15
15
 
@@ -19,7 +19,7 @@ $ gem install ladder_drive
19
19
 
20
20
  [![https://gyazo.com/6f00d74612def41fb33d836275b74c24](https://i.gyazo.com/6f00d74612def41fb33d836275b74c24.gif)](https://gyazo.com/6f00d74612def41fb33d836275b74c24)
21
21
 
22
- # Create an LadderDrive project
22
+ # Create a LadderDrive project
23
23
 
24
24
  At the command prompt, create a new LadderDrive project.
25
25
 
@@ -30,7 +30,7 @@ $ cd my_project
30
30
 
31
31
  [![https://gyazo.com/c538f66129aa425e2b1da4f478a10f52](https://i.gyazo.com/c538f66129aa425e2b1da4f478a10f52.gif)](https://gyazo.com/c538f66129aa425e2b1da4f478a10f52)
32
32
 
33
- Created files are consisted like the tree below.
33
+ Created files have consisted like the tree below.
34
34
 
35
35
  ```
36
36
  .
@@ -52,8 +52,8 @@ Created files are consisted like the tree below.
52
52
  ## PLC configuration
53
53
 
54
54
  There is a plc project under the plc directory.
55
- Launch the one of the plc project which you want to use.
56
- (Currently we support the Emulator and MITSUBISHI iQ-R R08CUP only.)
55
+ Launch one of the plc projects which you want to use.
56
+ (Currently, we support the Emulator and MITSUBISHI iQ-R R08CUP only.)
57
57
 
58
58
  Configure ethernet connection by the tool which is provided by plc maker.
59
59
  Then upload settings and plc program to the plc.
@@ -64,8 +64,8 @@ Then upload settings and plc program to the plc.
64
64
  ## LadderDrive configuration
65
65
 
66
66
  There is a configuration file at config/plc.yml.
67
- Currently we support MITSUBISHI iQ-R R08CUP and the Emulator.
68
- You only change host to an ip address of your plc.
67
+ Currently, we support MITSUBISHI iQ-R R08CUP and the Emulator.
68
+ You only change host to an IP address of your plc.
69
69
 
70
70
  ```
71
71
  # plc.yml
@@ -82,9 +82,9 @@ plc: # Beginning of PLC section.
82
82
 
83
83
  ## LadderDrive programming
84
84
 
85
- LadderDrive program file is located under the asm directory.
85
+ The Ladderdrive program file is located under the asm directory.
86
86
  By default, use asm/main.esc.
87
- Edit it and programming.
87
+ Edit it and programming.
88
88
 
89
89
  Refer [Wiki](https://github.com/ito-soft-design/ladder_drive/wiki/mnemonic) to check mnemonic.
90
90
 
@@ -126,7 +126,7 @@ default:
126
126
  ```rake``` is same as ```rake target=iq-r```.
127
127
 
128
128
 
129
- The LadderDrive program runs immediately after uploaded.
129
+ The LadderDrive program runs immediately after upload.
130
130
 
131
131
  ```sh
132
132
  $ rake [target=iq-r]
@@ -141,7 +141,7 @@ done uploading
141
141
  >
142
142
  ```
143
143
 
144
- After uploaded the program, it becomes in to console mode.
144
+ After uploading the program, it becomes in to console mode.
145
145
  You can read and write a device by entering commands.
146
146
 
147
147
  Use the r command if you want to read devices.
@@ -188,9 +188,10 @@ X or Y devices are assigned to GPIOs.
188
188
  ### Installation
189
189
 
190
190
  ```sh
191
+ $ sudo apt-get update
191
192
  $ sudo apt-get install ruby-dev
192
193
  $ sudo apt-get install libssl-dev
193
- $ sudo gem install ladder_drive
194
+ $ sudo gem install ladder_drive --no-ri --no-rdoc
194
195
  ```
195
196
 
196
197
  ### Execution
@@ -198,7 +199,7 @@ $ sudo gem install ladder_drive
198
199
  ```sh
199
200
  $ ladder_drive create project
200
201
  $ cd project
201
- $ rake target=raspberrypi
202
+ $ sudo rake target=raspberrypi
202
203
  ```
203
204
 
204
205
  ### I/O settings
@@ -268,6 +269,38 @@ plc["D0", 10] = [0, 1, 2, ..., 9]
268
269
  plc["D0".."D9"] => [0, 1, 2, ..., 9]
269
270
  ```
270
271
 
272
+ ## Plugin
273
+
274
+ If you want to an enhancement function Ladder drive running on Unix based machine, use a plugin.
275
+
276
+ Put xxx_plugin.rb into your project's plugins directory.
277
+ xxx is the name of the plugin. i.e.) If your plugin name is 'bar' then xxx is 'bar' . -> bar_plugin.rb
278
+
279
+ ### Callbacks
280
+
281
+ Ladder drive calls ```plugin_xxx_init``` function for the initialization. If you need to initialize it, to do here.
282
+
283
+ It also calls ```plugin_xxx_exec``` for execution of your plugin.
284
+
285
+ ### plugins
286
+
287
+ Ladder drive has several plugins by default.
288
+ If you want to use a plugin, execute below command.
289
+
290
+ ```
291
+ $ ladder_drive plugin plugin_name
292
+ ```
293
+
294
+ |Plugin name|description|
295
+ |:--|:--|
296
+ |ifttt|Launch IFTTT's Webhooks trigger service.|
297
+ |google_drive|Writing data to Google spreadsheet.|
298
+ |plc_mapper|Share other PLCs data with Ladder drive device.|
299
+ |slack|Cast the data to the Slack.|
300
+ |trello|Move the card of Trello to specified list.|
301
+
302
+
303
+
271
304
  # Information related ladder_drive
272
305
 
273
306
  - [My japanese diary [ladder_drive]](http://diary.itosoft.com/?category=ladder_drive)
data/README_jp.md CHANGED
@@ -183,6 +183,13 @@ OUT M1
183
183
 
184
184
  <!-- [![](http://img.youtube.com/vi/qGbicGLB7Gs/0.jpg)](https://youtu.be/qGbicGLB7Gs) -->
185
185
 
186
+
187
+ ```warning: constant ::Fixnum is deprecated``` の表示が出る場合は次の様にしてみてください。
188
+
189
+ ```sh
190
+ $ RUBYOPT="-W0" rake
191
+ ```
192
+
186
193
  ## Raspberry Pi
187
194
 
188
195
  Raspberry Pi上で動作させることもできます。
@@ -193,9 +200,10 @@ XとYデバイスはGPIOに割り付けます。
193
200
  OSとしてRaspbianを使用した場合は次の手順でインストールできます。
194
201
 
195
202
  ```sh
203
+ $ sudo apt-get update
196
204
  $ sudo apt-get install ruby-dev
197
205
  $ sudo apt-get install libssl-dev
198
- $ sudo gem install ladder_drive
206
+ $ sudo gem install ladder_drive --no-ri --no-rdoc
199
207
  ```
200
208
 
201
209
  この時の環境は下の通りです。
@@ -211,7 +219,7 @@ Linux raspberrypi 4.9.41+ #1023 Tue Aug 8 15:47:12 BST 2017 armv6l GNU/Linux
211
219
  ```sh
212
220
  $ ladder_drive create project
213
221
  $ cd project
214
- $ rake target=raspberrypi
222
+ $ sudo rake target=raspberrypi
215
223
  ```
216
224
 
217
225
  ### I/O設定
@@ -281,6 +289,47 @@ plc["D0", 10] = [0, 1, 2, ..., 9]
281
289
  plc["D0".."D9"] => [0, 1, 2, ..., 9]
282
290
  ```
283
291
 
292
+ ## プラグイン
293
+
294
+ UnixベースのマシンでLadder Driveを実行した場合にプラグインで機能を拡張できます。
295
+ 例えば各種センサーを読み込みLadder Driveのデバイスにセットしたり、Webサービスと連動させたりという事ができます。
296
+
297
+ プラグインを作成する場合はプロジェクにpluginsディレクトリを作成し、xxx_plugin.rbというファイル名のRubyスクリプトを作成します。xxxはプラグインの名称を示しbarプラグインならbar_plugin.rbになります。
298
+
299
+ ### プラグインのコールバック
300
+
301
+ 起動時にプラグインの初期化をするために```plugin_xxx_init```が呼び出されます。(xxxはプラグインの名称が入り、sample_plugin.rbならxxxにsampleが入ります)
302
+ 初期が必要な場合はここで行なってください。
303
+
304
+ Ladder Driveが1サイクル実行後に```plugin_xxx_exec```を呼び出します。(xxxについては上記の通りです)
305
+ ここでLadder Driveデバイスへの読み書きなどを行います。
306
+
307
+ ### あらかじめ用意されているプラグイン
308
+
309
+ Ladder Driveでは次のプラグインがあらかじめ用意されています。
310
+ Ladder DriveをIoT Gateway として機能させるプラグインになります。
311
+
312
+ |名称|内容|
313
+ |:--|:--|
314
+ |ifttt|IFTTTのWebhooksを起動します。|
315
+ |google_drive|Google spreadsheetにデータを書き込みます。|
316
+ |plc_mapper|複数のPLCのデータをLadder Driveのメモリーに展開します。|
317
+ |slack|Slackにデータの変化を記録します。|
318
+ |trello|trelloのカードを指定のリストに移動します。|
319
+
320
+ これらの用意されているプラグインをインストールするには
321
+
322
+ ```
323
+ $ ladder_drive plugin plugin_name
324
+ ```
325
+
326
+ plugin_nameには上記プラグインの名称を入れます。
327
+ 指定されたプラグインがpluginsディレクトリーに作成されます。
328
+
329
+
330
+ それぞれのプラグインの使い方はWikiの方に記載する予定です。
331
+
332
+
284
333
  ## LadderDriveに関する情報
285
334
 
286
335
  - [一往確認日記 [ladder_drive]](http://diary.itosoft.com/?category=ladder_drive)
data/Rakefile CHANGED
@@ -1,5 +1,8 @@
1
1
  require "bundler/gem_tasks"
2
2
  require 'rake/testtask'
3
+ require 'fileutils'
4
+
5
+ include FileUtils
3
6
 
4
7
  task :default => [:test]
5
8
 
@@ -7,3 +10,31 @@ Rake::TestTask.new do |t|
7
10
  t.test_files = FileList['test/**/test*.rb']
8
11
  t.verbose = true
9
12
  end
13
+
14
+ namespace :doc do
15
+
16
+ desc "Make epub documentation."
17
+ task :epub do
18
+ dst_dir = "tmp/doc"
19
+ FileList['doc/**/*.md'].each do |src|
20
+ dst = dst_dir + src.gsub(/^doc/, "").gsub(/md$/, "epub")
21
+ mkdir_p File.dirname(dst), verbose: false
22
+ cmd = "pandoc -f markdown -t epub3 #{src} -o #{dst}"
23
+ puts `#{cmd}`
24
+ end
25
+ end
26
+
27
+ =begin FIXME:It does not work on my mac.
28
+ desc "Make pdf documentation."
29
+ task :pdf do
30
+ dst_dir = "tmp/doc"
31
+ FileList['doc/**/*.md'].each do |src|
32
+ dst = dst_dir + src.gsub(/^doc/, "").gsub(/md$/, "pdf")
33
+ mkdir_p File.dirname(dst), verbose: false
34
+ cmd = "pandoc #{src} -o #{dst}"
35
+ puts `#{cmd}`
36
+ end
37
+ end
38
+ =end
39
+
40
+ end
@@ -0,0 +1,183 @@
1
+ # Ladder Drive
2
+
3
+ Ladder Driveは仮想的なPLCです。
4
+ Raspberry Piで動作させるとGPIOをX、Yデバイスとして制御できます。
5
+
6
+ # Raspberry Pi編
7
+
8
+ Ladder DriveはRaspberry Pi上で実行させることができます。
9
+ ここではその手順を説明します。
10
+ 詳しいインストールの仕方については、別途Raspberry Piの入門書などをご覧ください。
11
+
12
+ ## Raspberry Piセットアップ
13
+
14
+ ここでは、Raspberry PiのOSとしてメジャーなRaspbianを使用します。
15
+ NOOBSというインストーラでインストールしていきます。
16
+
17
+ ### SDカードの準備
18
+
19
+ [https://www.raspberrypi.org/downloads/](https://www.raspberrypi.org/downloads/) にアクセスし、NOOBSをクリックします。
20
+
21
+ ![https://gyazo.com/30be6038352d507d94b8a4e83c3f305e](https://i.gyazo.com/30be6038352d507d94b8a4e83c3f305e.png)
22
+
23
+ NOOBSのDonwload.zipをクリックしダウンロードします。
24
+
25
+ ![https://gyazo.com/b814dc957234af570526410c2ce676d1](https://i.gyazo.com/b814dc957234af570526410c2ce676d1.png)
26
+
27
+ ダウンロードが完了したらzipファイルを展開します。
28
+ そのファイルを全てフオーマット済み(FAT形式)の micro SD カードにコピーします。
29
+
30
+ ![https://gyazo.com/fb8ed27d51ab48172cbc9a70962cf1dc](https://i.gyazo.com/fb8ed27d51ab48172cbc9a70962cf1dc.png)
31
+
32
+
33
+ ### Raspbianのインスール
34
+
35
+ micro SDカードをRaspberry Piに装着し起動します。
36
+ キーボード、マウスをUSBポートに挿入し、HDMIケーブルでモニターかテレビに接続します。
37
+ 電源を繋いで起動します。
38
+
39
+ NOBSが起動します。
40
+ Raspbianを選択し、画面下の言語選択で日本語を選び、左上のインスールボタンを押します。
41
+
42
+ ![https://gyazo.com/c623af14a4dda765ea4b319f1546496a](https://i.gyazo.com/c623af14a4dda765ea4b319f1546496a.png)
43
+
44
+
45
+ 確認ダイアログが表示されるので、はいを押すとインストールが開始されます。
46
+
47
+ ![https://gyazo.com/1d7f34ca92d72dd0466ba9ff935c07bd](https://i.gyazo.com/1d7f34ca92d72dd0466ba9ff935c07bd.png)
48
+
49
+ インストール中の画面。
50
+
51
+ ![https://gyazo.com/e1dc5ed11f1dfe5c95d81dc96940f290](https://i.gyazo.com/e1dc5ed11f1dfe5c95d81dc96940f290.png)
52
+
53
+ ### 初期設定
54
+
55
+ インストールが完了するとGUI画面が表示されます。
56
+ 左上のメニューから設定 > Raspberry Piの設定を選びます。
57
+
58
+ ![https://gyazo.com/f0b366a941ea722fba9fee008ab07f98](https://i.gyazo.com/f0b366a941ea722fba9fee008ab07f98.jpg)
59
+
60
+ この画面で必要に応じて初期設定を済ませます。
61
+ インストール時に日本語を選択しているので、ローカリゼーションはタイムゾーンの設定くらいですみます。
62
+
63
+ ![https://gyazo.com/0b59ea21a4eb97a4b1a340941839ddd0](https://i.gyazo.com/0b59ea21a4eb97a4b1a340941839ddd0.jpg)
64
+
65
+
66
+ ## ladder_driveのインストール
67
+
68
+ Ladder Driveのインストールはターミナルで行なっていきます。
69
+ 図の様にターミナルを起動します。
70
+
71
+ ![https://gyazo.com/5ab07b8875a820afd6538f7465f7d198](https://i.gyazo.com/5ab07b8875a820afd6538f7465f7d198.jpg)
72
+
73
+
74
+ ターミナルで、以下のコマンドを入力していくとladder_driveがインストールできます。
75
+
76
+ ```
77
+ $ sudo apt-get update
78
+ $ sudo apt-get install ruby-dev
79
+ $ sudo apt-get install libssl-dev
80
+ $ sudo gem install ladder_drive --no-ri --no-rdoc
81
+ ```
82
+
83
+ ## プロジェクト作成
84
+
85
+ Ladder Driveのプロジェクトを作成します。
86
+
87
+ ```ladder_drive create project``` コマンドでプロジェクトを作成、```cd project``` でプロジェクトディレクトリに移動します。
88
+
89
+ ```
90
+ $ ladder_drive create project
91
+ $ cd project
92
+ ```
93
+
94
+ Ladder Driveでは asm/main.asm ファイルに記述されたラダープログラムを実行します。
95
+ asm/main.asmを編集し次の様にします。
96
+
97
+ ```
98
+ LD X0
99
+ OR M0
100
+ OUT Y0
101
+ END
102
+ ```
103
+
104
+ この例ではX0とM0のORの結果をY0に出力します。
105
+
106
+ Raspberry PiではX0、Y0はGPIOに割り当てられています。
107
+ どのGPIOに割り当てるかは confg/plc.yml ファイルで定義でき、デフォルトではGPIO4がX0、GPIO18がY0に割り当てられています。
108
+
109
+ ```
110
+ raspberrypi:
111
+ cpu: Raspberry Pi
112
+ io: # assign gpio to x and y
113
+ inputs:
114
+ x0:
115
+ pin: 4
116
+ pull: :up
117
+ x1:
118
+ pin: 17
119
+ pull: :up
120
+ x2:
121
+ pin: 27
122
+ pull: :up
123
+ outputs:
124
+ y0:
125
+ pin: 18
126
+ y1:
127
+ pin: 23
128
+ y2:
129
+ pin: 42
130
+ ```
131
+ GPIO4にスイッチを配線し、GPIO18にLEDを配線します。
132
+
133
+ ![https://gyazo.com/ecd45a1a1cbdd71e52d79604bed05ba9](https://i.gyazo.com/ecd45a1a1cbdd71e52d79604bed05ba9.png)
134
+
135
+
136
+ ## プロジェクト実行
137
+
138
+ ```sudo rake target=raspberrypi``` を実行するとプロジェクトが起動し、コンソール入力待ちになります。
139
+
140
+ ```
141
+ $ sudo rake target=raspberrypi
142
+ launching respberrypi plc ...
143
+ done launching
144
+ uploading build/main.hex ...
145
+ done uploading
146
+
147
+ LadderDrive is an abstract PLC.
148
+ This is a console to communicate with PLC.
149
+
150
+ >
151
+ ```
152
+
153
+ wコマンドにてデバイスの書き込みができます。
154
+ ```w m0 1``` と入力するとM0がONになります。
155
+ main.asmでプログラミングした内容では、M0がONになるとY0もONになり、LEDが点灯します。
156
+ ```w m0 0``` と入力すると消灯します。
157
+
158
+ ```
159
+ > w m0 1
160
+ > w m0 0
161
+ ```
162
+
163
+ main.asmでプログラミングした内容ではX0がONになってもY0がONになります。
164
+ X0はGPIO4のことですから、スイッチを押すとLEDが点灯します。
165
+ 離すと消灯します。
166
+
167
+
168
+ ## サービスとして Ladder Drive を起動
169
+
170
+ 電源投入でLadder Driveが起動する様にサービスとして立ち上げることができます。 Ladder Driveプロジェクのディレクトリで以下のコマンドを実行することでサービスを立ち上げることができます。
171
+
172
+ ```
173
+ $ sudo rake service:install
174
+ $ sudo rake service:enable
175
+ $ sudo rake service:start
176
+ ```
177
+
178
+ ## デモ
179
+
180
+ Ladder Driveの動画をYouTubeにアプロードしています。
181
+ スイッチを押すとLEDが点灯する様子が見れます。
182
+
183
+ https://youtu.be/UBhSaRNp_gM
data/ladder_drive.gemspec CHANGED
@@ -16,7 +16,8 @@ Gem::Specification.new do |spec|
16
16
 
17
17
  spec.add_runtime_dependency 'thor', '~> 0'
18
18
  spec.add_runtime_dependency 'activesupport', '~> 4.2', '>= 4.2.7'
19
- spec.add_runtime_dependency 'pi_piper'
19
+ spec.add_runtime_dependency 'ffi', '~> 1.9.24', '>= 1.9.24'
20
+ spec.add_runtime_dependency 'pi_piper', '~> 2.0', '>= 2.0.0'
20
21
 
21
22
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
22
23
  spec.bindir = "exe"