シーケンサでシリアル通信をしてみよう~後編~

シーケンサ

以前、シリアル通信時のデータの動きを、固定長の観点からご紹介しました。
シーケンサでシリアル通信をしよう~中編~

引き続き QJ71C24N-R2 を使用して、可変長通信 を念頭にそれぞれの動きを更に見ていきましょう。

どうも! ずぶ です。今回は  シーケンサでシリアル通信をしてみよう~後編~

※続きで書いている為、所々説明を端折っている箇所があります。

可変長で通信をしてみよう

前回のプログラムを流用して、少ない文字を通信してみます。

受信はもちろん、こうですよね。

隙間がありますね・・・

終了コード を 5ワード目 に入れ込んで、5ワード送信 しているからですよね。

↓ ここの箇所

[ MOV H0A0D D15 ]

ならば、3ワード目 に入れ込んで、3ワード送信 にしてみますか

[ MOV H0A0D D13 ]

それでも、隙間ができて しまいます。

文字(バイト)をシーケンサの ワード で扱っているのですから当然ですよね。

隙間があっても通信が OK になる場合も多いのですが、NG になる場合もあります。
通信が通るかどうかは、お相手次第 なのです。

文字をピッチリ引っ付けて、その数分送信する。
それが 可変長 ですね。

可変長にする手順としては、

1.文字列の最後に終了文字を引っ付けて

2.長さを数える

文字の結合は
[ $+   ]

長さの計算は 
[ LEN      ]

を使えば良いのでしたね。

以上をふまえて、プログラムを変更します。

こんな感じでどうでしょう?

終了コードの場所が近すぎちゃいました。(><)

[ LEN  ] のモニター数値を見ると、きちんと 5 を表示しています。
( 3文字と終了文字2文字で計5文字です。)

ここで来たらあと少し

ですが、少し説明書きを見てみましょう。

[ LEN  ]の説明はご覧のとおり。

00H が来るまでの、文字の数を返す と書いてありますね

ということは、返り値は バイト

~中編~ を思い出して下さい。

[ G.OUTPUT   ] は、ワード数 で動いていました。
このまま [ LEN   ] の返り値を放り込んだら、ワードと認識されてしまいます。

なので、設定を変更してバイトで動く ようにしましょう。

ここを バイト単位 に変更するだけ

[ G.OUTPUT ] に掛けたいので、CH1側 を変更しましたよ。

※テストの流れで、CH2の受信終了データ数指定が6だった場合、511(デフォルト)に戻しておいて下さいね。

以上をふまえて、送信ドーン

お~ 引っ付いた!

もういっちょう、ドーン

きれいに引っ付いて、可変長の完成 です。

まとめ

文字の結合は [ $+   ]

長さの計算は [ LEN      ]

設定を バイトで動く ように変更

あわせて読みたい
シーケンサでシリアル通信をしよう~中編~

シーケンサの文字データの扱い方

シーケンサでロギングをしてみよう

シーケンサでMODBUS_RTU通信をしよう(1)