忍者ブログ

おっさんの備忘録

 いい年なのに職種を変え四苦八苦 そんなこんなで備忘録として作成

オムロンのシーケンサ

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

オムロンのシーケンサ

今まで運がいいのか悪いのか三菱をメインで使ってきたのですが、お客様の指定でオムロンを使うことになりました。ラダーだけなら過去に触ったこともあるのですが通信とかも含めて初めてのことが多くえらく苦労しました。

 ひとえにマニュアルを良く読まないのが悪いのですが、これだけ苦労しても次に使う頃には忘れそうなので備忘録としてこのブログを作りました。



先ずはFOR

何故FOR文かというと、ハードトラブルでしか発生しないらしい(オムロンさんのサポートセンター情報)シーケンサエラーを発生させた思い出深い命令だからですorz

 w100.00をIR0に、D100をIR1にセットし ,IR1+ <= 100なら,IR0+をONにするだけの単純なFOR文しかも回数は11回だけ、これで前記したレベルのトラブルが出る理由が正直分からない。
わからないから悩むのをやめて11回書きました。はい書きました(大した量じゃないけど)

 とにかく時間がなくトラブった所はトラブらない方法で書き直しましたが、本当はこの辺りをきちんとしておきたかった。

閑話休題

  • インデックスレジスタ(IR)
    早い話がポインタ アドレスを触りたい時は IRn 中身を弄りたい時は,IRnと書く
    nは数字0-15
  • IRのインクリメント
    ,IR0+ ,IR0++のように書く。2以上増やしたい時は +L IRn &m IRn のようにする
    アドレスをいじる時はDWORDの命令で
  • IRのアドレスを変えずに任意の場所を見る
    10,IRn のように頭に数字を書く。これ大事。DIM命令と併用すると最強
  • IRにアドレスをセットする命令
    MOVR とか SETR  他もあるかもしれないけど使ってないから分かんない
MOVR D100 IR0
MOVR W100,01 IR1
for &10
 = ,IR0+ &0  なら  OUT ,IR1+
next

 ラダーでなくても何となく分かるよね、よね?>未来の自分

でもって、例えばコントローラーユニットが13個のユニットから情報を得ていて
ユニットごとに17個のデータをD1000から順番に・・・

UNIT
1        D1000~D1016
2        D1017~D1033

こんな感じに並んでいた場合

DIM 1 &17 &13 D1000

と先ずはテーブル攻勢を設定します。早い話が構造体の配列みたいなもので
テーブル1の構造は D1000から1レコードあたり17WORDのデータが13個並んでいるというもので、レコードの戦闘番号は0 レコード番号×13+D1000 でアドレス出してると思えばいい感じ

SETR 1 xx IRn (XXはレコード番号)

を使ってレコード先頭のアドレスをIRにセットします

つまりは

DIM 1 &17 &13 D1000
mov &0 D1
movr D100 IR1
for &13
  SETR 1 D1 IR0

   mov 4,IR0 ,IR1+
   mov 6,IR0 ,IR1+
   mov 12,IR0 ,IR1+

  ++ D1
next

このようにかけば任意の情報だけを連続して並べることが出来ます
個人的にはこの書き方のほうが、各ユニットの必要な情報を読みに行く形に見えて好きなのですが

movr D1000 IR0
movr D100 IR1
for &13

   mov 4,IR0 ,IR1+
   mov 6,IR0 ,IR1+
   mov 12,IR0 ,IR1+

  +L IR0 &17 IR0
next

でも同じ結果になります。

コントローラーユニットで収集するデータ数が変わった時に前者ははDIMを書き換える・・・つまりはデータ構造の定義を変えるだけですが、後者はアドレスを意識する感じで何となく苦手です。

 まぁ、今にしてみれば単純な話ですね
次は日まで来たら通信かな?
PR

コメント

  • Home

プロフィール

HN:
おっさん
性別:
非公開

カテゴリー

最新記事

P R