本文へ移動
サポートシェアリングソリューション
OKWAVE Plus

このQ&Aは役に立ちましたか?

締切済み
※ ChatGPTを利用し、要約された質問です(原文:PLC(シーケンサ)での透過型通信)

PLC(シーケンサ)でRS232Cの透過型通信を実現する方法

2023/10/14 05:18

このQ&Aのポイント
  • PLC(シーケンサ)を使用してRS232Cの可変長透過型通信を行う方法について悩んでいます。
  • ボーレートは19.2k以上である必要があり、1バイト読み込みで処理するアルゴリズムは可能ですが、通信速度についていけません。
  • メーカーに問い合わせた結果、パラメータの設定だけでは実現できないことが分かりました。固定長であれば可能な方もいますか?またはアイデアを教えていただけないでしょうか。
※ 以下は、質問の原文です

PLC(シーケンサ)での透過型通信

2005/11/07 13:35

三菱か立石のPLCでRS232Cの可変長透過型通信をやりたいのですが悩んでいますボーレートは19.2k以上でなければなりません、1バイト読み込みで処理すればアルゴリズムとしては可能ですが、通信速度についていけません、メーカーに問い合わせてみましたが、パラメータ等の設定だけではできないとの回答でした。固定長ならなんとか可能ですが、どなたか実績の有る方いらっしゃいませんか。もしくはいいアイデアが有りましたら教えて頂けないでしょうか。

回答 (2件中 1~2件目)

2005/11/14 01:27
回答No.2

http://www.fa.omron.co.jp/product/fasys/plc/279/index.html
SYSMAC-C
sbca-302m_cs_cj_cmd.pdf
3-224シリアルポート入力
固定長受信1バイトに設定した場合にでも100バイト受信可能みたいです
受信完了ビットがONしたまま残り99バイトを受信して受信オーバーフラグがON
A392.06
---||------------[RXD 0000 0100]
エラーが出たまま構わずにこれで読み出しは可能と思う

melsec-Aの場合
http://wwwf3.mitsubishielectric.co.jp/faland/index.html
Aj71c24 sh3495l_1.pdf
固定長受信1バイトの場合は1バイトのみ読み出してのこり99バイトはOS受信エリア
に残り読み出しは出来ないみたいですね

それにしても無手順で100バイト受信とは何に使うのでしょう?
一般的には無手順通信する場合は計測器とかから出力されるデータなのでせいぜい
10バイト程度なので1バイトづつ受信しても通信時間の問題はないのですが
また、無手順通信は文字化け等の場合の自動再送信もしてくれないので長文通信
には向きません

プロトコルマクロはオムロンの商品名です
三菱はユーザ登録フレームと呼びます
QJ71C24 sh080002h.pdf
考え方はどちらも同様で通信電文の抜き出し処理を自動でやってくれます
例電文 stx 313233343536373839 etx bcc
stx スタートコード
etx 終了コード
bcc 水平パリティ(ビットチェックキャラクタ)
例に有るような電文の場合終了コードの後ろにbccがあるので可変長終了コード受信は
出来ません
しかも電文本体(stx,etx,bcc以外の本文)が可変長の場合は固定長受信も出来ません
この電文フォーマットをパラメータ設定することにより自動で電文本体のみラダーに
抜き出してくれます <大変便利

このQ&Aは役に立ちましたか?

この質問は投稿から一年以上経過しています。
解決しない場合、新しい質問の投稿をおすすめします。

質問する
2005/11/09 22:49
回答No.1

基本的にPLCでバイナリー通信する場合は1バイト受信しか出来ませんが
プロトコルマクロ機能によりマクロ内で処理する事によりバイナリ通信は
可能になります(melsec、sysmac共に高級機にのみ装備)

低級機で1バイト通信する場合の注意事項
このPLCはホスト側でしょうか?スレーブ側でしょうか?
(ホスト1局<->スレーブ側多局、所謂マルチポーリング通信)
(RS232C1対1通信も同様)
ホスト側であれば1バイト受信ででもそれほど困難では有りません
何故なら一般的にはホスト側から問い合わせコード送信してスレーブ側から
の応答を待つだけです
1バイト受信と言っても実際に1バイトづつ受信するわけではなくて
256バイト程度のバッファがあってそこに垂れ流し受信したのを1バイト
づつ読み出すだけですのでスレーブ側からの応答電文が全てバッファ内に
溜まっているはずです(ホストが送信して一定のタイマ待ち後)
(但し、1回の電文が長くバッファを越える受信データが有る場合は無理です)
ホストが問い合わせコード(命令コード)送信後スレーブが送信してくるのは
乱暴に言えば普通は2種類、「問い合わせ応答データ」かもしくは「異常コード」
つまりバッファ内には2種類の電文しか無い筈ですしバッファ内にはそれなりに
正常な電文しか溜まっていないはずです

これが スレーブ側だとチョット難しくなる(多数対多数通信も同様)
前出のバッファに溜まってる電文にはホストからの電文と他の局からの電文が
同居してます
これをラダーで分解するのは「勘弁してくれ」の領域 <不可能では無い
プロトコルマクロの使用をお勧めします

お礼

2005/11/10 14:38

ご回答頂きまして誠に有り難う御座います、通信は1:1です、少し間違いがありました、1バイト読み取りの場合通信速度に間にあわないのではなく応答が遅くなるの間違いでした、1スキャンで1バイトですと伝文が100バイトを超えますので10mスキャンですと1秒になってしまいます、できれば遅くとも300ms以内で応答したいと思っています。PLCには素人ですので見当違いな質問でないか心配ですが、プロトコルマクロを使えばDLEの処理をしてくれるのでしょうか、またバッファからの読み出しはターミネーターで読み出せるのでしょうか。意味がうまく伝わっているか心配ですがアドバイスを頂けましたら幸いです。

質問者

お礼をおくりました

さらに、この回答をベストアンサーに選びますか?

ベストアンサーを選ぶと質問が締切られます。
なおベストアンサーを選びなおすことはできません。