この文書の現在のバージョンと選択したバージョンの差分を表示します。
weatherstation-action [2011/06/25 00:05] sugakoubou [アクション定義ファイルの例] |
weatherstation-action [2011/07/11 00:19] (現在) sugakoubou |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | ====== ウェザーステーションのアクション定義ファイル ====== | + | * **[[weatherstation-il|IL(Instruction List)ファイル]]へ移動** |
- | SDメモリーカードまたは本体のUSBディスクへ保存したアクション定義ファイルにより、ウェザーステーションの計測値を条件式に従って、Pachube・Twitter等へのデータ投稿や、オープンコレクタ出力の制御をすることができます。 | ||
- | |||
- | アクション定義ファイルはメモ帳等のテキストエディタで編集し保存します。ファイル中のほとんどの文字は半角英数字です。 | ||
- | |||
- | 書式はPLCのニーモニック(Instruction List)と似ています。ラダーチャートから検討するとわかりやすいでしょう。 | ||
- | |||
- | ※基本の動作は [[weatherstation-config|設定ファイル]] を参照。 | ||
- | |||
- | ===== アクション定義ファイルの例 ===== | ||
- | |||
- | ファイル名: sequence.asm (0.1秒毎に実行されるファイル) | ||
- | |||
- | ファイル名: weather.asm (計測 Interval 毎に実行されるファイル) | ||
- | |||
- | DEF T0=3600 ・・・タイマー時間を60分にセット | ||
- | LD 1 | ||
- | OUT P ・・・計測後毎回Pachubeへ投稿 | ||
- | OUT S ・・・計測後毎回Weather Stationsへ投稿 | ||
- | LD A5>0 | ||
- | OUT T0 ・・・雨量を観測している間タイマーを動作 | ||
- | LDP T0 | ||
- | OUT W0 ・・・タイマーが経過したらTwitterへ投稿 | ||
- | RST T0 ・・・タイマーが経過したらタイマーをリセット | ||
- | LD A2>=70 | ||
- | OUT Q0 ・・・湿度が70%以上の間出力をON | ||
- | |||
- | 各条件はLD等から始まり、ANDやORで条件が追加され、OUT等で終わります。 | ||
- | |||
- | |||
- | ===== 定義ファイルの詳細 ===== | ||
- | |||
- | ==== DEF ==== | ||
- | |||
- | タイマーやカウンタの値を設定します。(起動時のみ) | ||
- | |||
- | DEF T0=10 | ||
- | |||
- | DEF C1=100 | ||
- | |||
- | ^記号^設定先^備考^ | ||
- | ^Tn=m|タイマー|n=0~9、m=タイマー秒数| | ||
- | ^Cn=m|カウンター|n=0~9、m=カウントしきい値| | ||
- | |||
- | ==== LD ==== | ||
- | |||
- | 条件式の始まりです。 | ||
- | |||
- | LD X==1 | ||
- | OUT A | ||
- | |||
- | | X=1 | | ||
- | |---| |-------[A]---| | ||
- | | | | ||
- | |||
- | (X == 1) | ||
- | |||
- | 条件式の書式は[[#条件式]]を参照。 | ||
- | |||
- | ==== LDI ==== | ||
- | |||
- | 条件式の始まりです。 | ||
- | |||
- | 条件は反転されます。 | ||
- | |||
- | LDI X==1 | ||
- | OUT A | ||
- | ラダーチャートやC言語風に書くと次のようになります。 | ||
- | | X=1 | | ||
- | |---|/|-------[A]---| | ||
- | | | | ||
- | |||
- | !(X == 1) | ||
- | |||
- | 条件式の書式は[[#条件式]]を参照。 | ||
- | |||
- | ==== LDP ==== | ||
- | |||
- | 条件式の始まりです。 | ||
- | |||
- | 条件の立ち上がりを判定します。 | ||
- | |||
- | LDP X==1 | ||
- | OUT A | ||
- | |||
- | | X=1 | | ||
- | |---|^|-------[A]---| | ||
- | | | | ||
- | |||
- | !(X == 1) --> (X == 1) | ||
- | |||
- | 条件式の書式は[[#条件式]]を参照。 | ||
- | |||
- | === @LDP === | ||
- | |||
- | 計測毎(Interval設定間隔)に使われる条件式です。 | ||
- | |||
- | ==== LDF ==== | ||
- | |||
- | 条件式の始まりです。 | ||
- | |||
- | 条件の立ち下がりを判定します。 | ||
- | |||
- | LDI X==1 | ||
- | OUT A | ||
- | ラダーチャートやC言語風に書くと次のようになります。 | ||
- | | X=1 | | ||
- | |---|v|-------[A]---| | ||
- | | | | ||
- | |||
- | (X == 1) --> !(X == 1) | ||
- | |||
- | 条件式の書式は[[#条件式]]を参照。 | ||
- | |||
- | ==== AND ==== | ||
- | |||
- | 直前の条件とパラメータに指定された条件を and でつなぎます。 | ||
- | |||
- | LD X==1 | ||
- | AND Y==2 | ||
- | OUT A | ||
- | |||
- | ラダーチャートやC言語風に書くと次のようになります。 | ||
- | |||
- | | X=1 Y=2 | | ||
- | |---| |-------| |-------[A]---| | ||
- | | | | ||
- | |||
- | (X == 1) and (Y == 2) | ||
- | |||
- | ==== ANI ==== | ||
- | |||
- | 直前の条件と、パラメータに指定された条件を反転したものを and でつなぎます。 | ||
- | |||
- | LD X==1 | ||
- | ANI Y==2 | ||
- | OUT A | ||
- | |||
- | ラダーチャートやC言語風に書くと次のようになります。 | ||
- | |||
- | | X=1 Y=2 | | ||
- | |---| |-------|/|-------[A]---| | ||
- | | | | ||
- | |||
- | (X == 1) and !(Y == 2) | ||
- | |||
- | ==== ANDP, ANDF ==== | ||
- | |||
- | ==== OR ==== | ||
- | |||
- | 直前の条件とパラメータに指定された条件を or でつなぎます。 | ||
- | |||
- | LD X==1 | ||
- | OR Y==2 | ||
- | OUT A | ||
- | |||
- | ラダーチャートやC言語風に書くと次のようになります。 | ||
- | |||
- | | X=1 | | ||
- | |---| |---+---[A]---| | ||
- | | | | | ||
- | | Y=2 | | ||
- | |---| |---+ | ||
- | | | ||
- | |||
- | (X == 1) or (Y == 2) | ||
- | |||
- | ==== ORI ==== | ||
- | |||
- | 直前の条件と、パラメータに指定された条件を反転したものを or でつなぎます。 | ||
- | |||
- | LD X==1 | ||
- | ORI Y==2 | ||
- | OUT A | ||
- | |||
- | ラダーチャートやC言語風に書くと次のようになります。 | ||
- | |||
- | | X=1 | | ||
- | |---| |---+---[A]---| | ||
- | | | | | ||
- | | Y=2 | | ||
- | |---|/|---+ | ||
- | | | ||
- | |||
- | (X == 1) or !(Y == 2) | ||
- | |||
- | ==== ORP, ORF ==== | ||
- | |||
- | ==== ANB ==== | ||
- | |||
- | 直前の二つの条件ブロックを and でつなぎます。 | ||
- | |||
- | LD X==1 | ||
- | OR Y==2 | ||
- | LD Z==3 | ||
- | OR W==4 | ||
- | ANB | ||
- | OUT A | ||
- | |||
- | ラダーチャートやC言語風に書くと次のようになります。 | ||
- | |||
- | | X=1 Z=3 | | ||
- | |---| |---+---| |---+---[A]---| | ||
- | | | | | | ||
- | | Y=2 | W=4 | | ||
- | |---| |---+---| |---+ | ||
- | | | ||
- | |||
- | ( (X == 1) or (Y == 2) ) and ( (Z == 3) or (W == 4) ) | ||
- | |||
- | ==== ORB ==== | ||
- | |||
- | 一つ前の条件ブロックと処理中の条件ブロックを and でつなぎます。 | ||
- | |||
- | LD X==1 | ||
- | OR Y==2 | ||
- | LD Z==3 | ||
- | AND W==4 | ||
- | ORB | ||
- | OUT A | ||
- | |||
- | ラダーチャートやC言語風に書くと次のようになります。 | ||
- | |||
- | | X=1 | | ||
- | |---| |---+---------+---[A]---| | ||
- | | | | | | ||
- | | Y=2 | | | ||
- | |---| |---+ | | ||
- | | | | ||
- | | Z=3 W=4 | | ||
- | |---| |-------| |---+ | ||
- | | | ||
- | |||
- | ( (X == 1) or (Y == 2) ) or ( (Z == 3) and (W == 4) ) | ||
- | |||
- | === ANB ORB 理解のキモ === | ||
- | |||
- | 処理の途中でLD命令が出てくると、そこまでの処理はいったん保存され、次にANB・ORB命令が出てきたときに合わせて条件が評価される。 | ||
- | |||
- | ==== INV ==== | ||
- | |||
- | 処理中の条件を反転します。 | ||
- | |||
- | LD X==1 | ||
- | AND Y==2 | ||
- | INV | ||
- | OUT A | ||
- | |||
- | ラダーチャートやC言語風に書くと次のようになります。 | ||
- | |||
- | | X=1 Y=2 | | ||
- | |---| |-------| |------- / -------[A]---| | ||
- | | | | ||
- | |||
- | !( (X == 1) and (Y == 2) ) | ||
- | |||
- | ==== MPS, MRD, MPP ==== | ||
- | |||
- | 真・偽をスタックへ保存、読み取り、破棄します。 | ||
- | |||
- | |||
- | ==== OUT ==== | ||
- | |||
- | 真・偽をそのまま出力へ反映させます。 | ||
- | |||
- | LD T>=10 | ||
- | OUT A | ||
- | |||
- | 気温≧10のとき出力をセット、それ以外のとき出力をリセット | ||
- | |||
- | ^記号^出力先^真^偽^備考^ | ||
- | ^P|Pachubeへ投稿|投稿|-| | | ||
- | ^Wn|Twitterへ投稿|投稿|-|n=メッセージ番号 TWITTER_MESG[n]| | ||
- | ^S|Weather Stationsへ投稿|投稿|-| | | ||
- | ^X|XBeeで送信|送信|-| | | ||
- | ^Qn|出力ポート|セット|リセット|n=0~1| | ||
- | ^Mn|補助リレー|セット|リセット|n=0~9| | ||
- | ^Tn|タイマー|動作|リセット|n=0~9| | ||
- | ^Cn|カウンター|加算/減算|保持|n=0~9| | ||
- | ^Rn|カウンター方向|減算|加算|n=0~9| | ||
- | |||
- | n を省略すると 0 を指定したとみなされます。 | ||
- | |||
- | ==== SET ==== | ||
- | |||
- | 真のとき出力をセット(1、High)します。 | ||
- | |||
- | 例:気温≧10のとき出力をセット | ||
- | |||
- | LD T>=10 | ||
- | SET A | ||
- | |||
- | ^記号^出力先^真^偽^備考^ | ||
- | ^Qn|出力ポート|セット|-|n=0~1| | ||
- | ^Mn|補助リレー|セット|-|n=0~9| | ||
- | |||
- | n を省略すると 0 を指定したとみなされます。 | ||
- | |||
- | ==== RST ==== | ||
- | |||
- | 真のとき出力をリセット(0、Low)します。 | ||
- | |||
- | 例:気温≧10のとき出力をリセット | ||
- | |||
- | LD T>=10 | ||
- | RST A | ||
- | |||
- | ^記号^出力先^真^偽^備考^ | ||
- | ^Qn|出力ポート|リセット|-|n=0~1| | ||
- | ^Mn|補助リレー|リセット|-|n=0~9| | ||
- | ^Tn|タイマー|リセット|-|n=0~9| | ||
- | ^Cn|カウンター|リセット|-|n=0~9| | ||
- | |||
- | n を省略すると 0 を指定したとみなされます。 | ||
- | |||
- | ===== 条件式 ===== | ||
- | |||
- | 条件式へは式を書くかまたは左項のみを書きます。 | ||
- | 比較演算子のある式を書くとその真(True)・偽(False)、左項のみを書くとその値の真(0以外、High)・偽(0、Low)を判別します。 | ||
- | |||
- | 式の場合:左辺 比較演算子 右辺 (スペースなし) | ||
- | |||
- | LD T>=0 ・・・ 気温≧0のとき、真となる | ||
- | |||
- | 項目の場合:左辺 | ||
- | |||
- | LD T ・・・ 気温が0以外のとき、真となる | ||
- | |||
- | ==== 左辺 ==== | ||
- | |||
- | 計測値をあらわす記号を指定します。 | ||
- | |||
- | <html><table><tr><td valign="top"></html> | ||
- | ^記号^値^ | ||
- | ^A0|気圧| | ||
- | ^A1|気温| | ||
- | ^A2|湿度| | ||
- | ^A3|風速| | ||
- | ^A4|風向| | ||
- | ^A5|雨量| | ||
- | ^A6|照度| | ||
- | ^A7|紫外線量| | ||
- | ^A8|湿り気/カウント| | ||
- | <html></td><td valign="top"></html> | ||
- | ^記号^値^ | ||
- | ^y|西暦| | ||
- | ^m|月| | ||
- | ^d|日| | ||
- | ^h|時| | ||
- | ^i|分| | ||
- | ^s|秒| | ||
- | <html></td><td valign="top"></html> | ||
- | ^記号^値^ | ||
- | ^0|常に偽| | ||
- | ^1|常に真| | ||
- | ^In|入力ポート n=0~1| | ||
- | ^Qn|出力ポート n=0~1| | ||
- | ^Mn|補助リレー n=0~9| | ||
- | ^Tn|タイマー(設定時間経過) n=0~9| | ||
- | ^Cn|カウンター(しきい値以上) n=0~9| | ||
- | <html></td></tr></table></html> | ||
- | |||
- | n を省略すると 0 を指定したとみなされます。 | ||
- | |||
- | ==== 比較演算子 ==== | ||
- | |||
- | 比較記号を指定します。 | ||
- | |||
- | ^式|==|!=|<|%%<=%%|>|%%>=%%|%|!%| | ||
- | ^備考|一致|非一致|未満|以下|超|以上|商が0以外|商が0| | ||
- | |||
- | ==== 右辺 ==== | ||
- | |||
- | 比較する数値(小数可)を指定します。 | ||
- | |||
- | |||
- | ===== タイマー ===== | ||
- | |||
- | タイマーは、一定時間後の出力制御や、間欠動作などに使えます。 | ||
- | |||
- | タイマーは秒で値をセットする(0.1秒単位まで可)と、毎秒カウントダウンします。 | ||
- | |||
- | |||
- | 例:10秒をセットする。 | ||
- | |||
- | DEF T=10 | ||
- | |||
- | |||
- | 例:次のどの表記も、タイマーがカウント動作中に真となる | ||
- | |||
- | LI T | ||
- | |||
- | ANI T | ||
- | |||
- | LD T!=0 | ||
- | |||
- | 例:次のどの表記も、タイマー時間経過後に真となる | ||
- | |||
- | LD T | ||
- | |||
- | AND T | ||
- | |||
- | LD T==0 | ||
- | |||
- | === タイマーの例 === | ||
- | |||
- | 気温≧10のときタイマーへ20秒をセットする。 | ||
- | |||
- | タイマー時間経過すればXをセットする。 | ||
- | |||
- | DEF T=20 | ||
- | LD T>=10 | ||
- | OUT T | ||
- | LD T | ||
- | SET Q0 | ||
- | |||
- | === 間欠動作の例 === | ||
- | |||
- | 気温≧20のときタイマーへ5秒をセットする、同時に出力Cをセットする。 | ||
- | |||
- | タイマー時間経過し、Xがセットされているとき、タイマーへ10秒をセットする、同時に出力Cをリセットする。 | ||
- | |||
- | タイマー時間経過し、Xがリセットされているとき、タイマーへ5秒をセットする、同時に出力Cをセットする。 | ||
- | |||
- | DEF T0=5 | ||
- | DEF T1=10 | ||
- | LD A1>=20 | ||
- | OUT T0 | ||
- | SET Q0 | ||
- | LD T0 | ||
- | AND Q0 | ||
- | OUT T1 | ||
- | RST Q0 | ||
- | LD T1 | ||
- | ANI Q0 | ||
- | SET Q0 | ||
- | RST T0 | ||
- | |||
- | 上記は、次の条件式と同じ動作をします。 | ||
- | |||
- | 気温≧10のときタイマーをスタートする。 | ||
- | |||
- | タイマー時間経過しているとき、タイマーをリセットする。 | ||
- | |||
- | タイマー残り時間≧10のとき、Q0へ出力する。 | ||
- | |||
- | DEF T=15 | ||
- | LD A1>=20 | ||
- | OUT T | ||
- | LD T | ||
- | RST T | ||
- | LD T>=10 | ||
- | OUT Q0 | ||
- | |||
- | ===== 備考 ===== | ||
- | |||
- | |||
- | ---- | ||
- | [[weatherstation|--> 戻る]] |