ユーザ用ツール

サイト用ツール


ja-jp_products:mp_studio:user_protocol

MP STUDIO 2 · ユーザープロトコル

ユーザープロトコルは、Modbusを使わない機器(CO2センサー、バーコード・QRリーダー、ASCIIコマンドで通信するインバーター・温度調節器、数値表示器など)と、決まったバイト形式でデータをやり取りするための機能です(V1.3.0以降)。やり取りするバイトの形式と送信のタイミングをユーザープロトコルウィンドウで設定すると、機器がプログラムとあわせてその通信を実行します。ラダーでPUT・GETを使ってバイトを1つずつ扱う必要はなく、受信した値はチェックサムまで一致した後で、指定したメモリに書き込まれます。

  • フレームとトランザクションの定義: やり取りするバイトをチップとして並べてフレームを作り、送信するフレーム・待つフレーム・開始条件をトランザクションとしてまとめられます。
  • 4つの通信パターン: 「問い合わせ・受信」「受信のみ」「受信したら応答」「送信のみ」を、1つのポートで併用できます。
  • ラダーからの開始: UPTRIGファンクションで、必要なタイミングにトランザクションを1回実行できます。結果は状態ワードと完了ビットで確認できます。
  • 確認ツール: 送信バイトのプレビュー、受信バイトの解析、一致するチェックサムの種類の検索、シミュレーションの仮想相手、モニタリング中の状態と通信記録、そしてPLCを使わずにPCのCOMポートから相手機器とやり取りするPC直接試験があります。

図1. ユーザープロトコルウィンドウで設定したフレームとトランザクションが機器で実行される流れ

対応製品と通信ポート

ユーザープロトコルは、機器のシリアルチャンネル(通信ポート1~通信ポート3)に設定します。使用できる通信ポートの数は機種によって異なります。

通信ポート 機種
通信ポート1 MPS-8A4R(T)-S · MPS-8A8R(T)-S · MPS-16A8R(T)-R2 · MPS-16A16R(T)
通信ポート1~通信ポート3 MPS-8A8R · MPS-16A8R(T) · MPS-16A8R8T · MPAシリーズ

通信ポートにつながる端子(RS-232・RS-485・UART)とコネクタの図は、製品ページで確認してください: MPS-8A4R-S · MPS-8A4T-S · MPS-8A8R-S · MPS-8A8T-S · MPS-16A16R · MPS-8A8R · MPS-16A8R · MPS-16A8R8T · MPA Series。MPAシリーズは、通信ポート1がRS-232、通信ポート2がRS-485、通信ポート3がUARTです。

  • ボーレート・データビット・パリティ・ストップビットは、相手機器と同じにする必要があります。ASCII機器でよく使われる7データビット(例: 7-E-1)も使用できます。
  • RS-485端子の送信・受信の切り替えは機器が行うため、ラダーで扱う必要はありません。
  • MPAシリーズで7セグメントのFINIを実行すると、通信ポート3(シリアル3)がオフになります(7セグメント表示を参照)。7セグメントと併用する場合は、ユーザープロトコルを通信ポート1・通信ポート2に設定してください。

動作の仕組み

ユーザープロトコルは、通信ポートごとにフレームとトランザクションで設定します。

  • フレーム: やり取りするひとまとまりのバイトの形式です。固定バイト、PLCのメモリの値、文字列、長さ、チェックサムなどのフィールドを順に並べて作ります。
  • トランザクション: どのフレームをいつ送り、どのフレームを待つかを決めたものです。トランザクションごとに、通信パターン、開始条件、応答待ち、再試行、結果を受け取る状態ワードと完了ビットを設定できます。
通信パターン 開始 動作 使用例
問い合わせ・受信 周期・ラダーのUPTRIG・値が変わったとき 送信フレームを送り、受信フレームを待ちます。 CO2センサー、インバーターの状態読み出し、温度調節器
受信のみ 常時待ち受け 一致するフレームが来ると値を書き込みます。送信はしません。 バーコード・QRリーダー、連続出力の計量器
受信したら応答 常時待ち受け 一致するフレームが来ると、決めた応答フレームをすぐに送ります。 PCのプログラム、Modbus非対応のHMI
送信のみ 周期・ラダーのUPTRIG・値が変わったとき 送信フレームを送り、応答は待ちません。 数値表示器、プリンター、設定コマンド

図2. 4つの通信パターンで機器と相手機器がやり取りする順序

機器では、次のように実行されます。

  • 1つの通信ポートで一度に実行するトランザクションは1つだけです。実行するタイミングになったトランザクションが複数ある場合は、トランザクション一覧の順に1つずつ実行し、「受信したら応答」の応答は優先して送ります。
  • 受信したバイトは、フレーム全体が一致した後でまとめてメモリに書き込まれます。チェックサムや値の形式が合わない場合、そのフレームの値は1つも書き込みません。ラダーは、受信した値を次のスキャンから読み取ります。
  • 受信したバイトがどのフレームにも一致しない場合は、先頭の1バイトを破棄して照合し直します。応答の前にノイズのバイトが混じっても、後ろに一致するフレームがあれば受信します。
  • ユーザープロトコルは、プログラムと一緒に機器へダウンロードされます。ウィンドウで変更した内容は、OKを押してダウンロードし直すと機器に反映されます。

通信ポートの準備

ユーザープロトコルを使うシリアルチャンネルは、モードがUser Protocolで、このチャンネルをダウンロードに使うがオフになっている必要があります。

図3. 通信ポートウィンドウでシリアル1のモードをUser Protocolに設定した状態

  1. 設定 → 通信ポートを選択し、使用するシリアルチャンネルのタブ(例: シリアル 1)で、ボーレート・データビット・パリティ・ストップビットを相手機器に合わせます。115200以外のボーレートを使う場合は、先にこのチャンネルをダウンロードに使うをオフにしてください。
  2. モードは、このウィンドウでUser Protocolを選んでも、そのままにしてもかまいません。ユーザープロトコルウィンドウでOKを押すと、NormalモードだったポートはUser Protocolに変わり、そのポートのダウンロードの使用がオフになります。
  • Normal以外のモード(例: Modbus RTU Slave)に設定したポートは、自動では変わりません。ユーザープロトコルウィンドウの上部に表示されるユーザープロトコルに切り替えを押すと変わります。
  • Modbus機器テーブルを使う通信ポートには、ユーザープロトコルを同時に設定できません。1つのポートの受信バッファを両方が読むとどちらも動作しないため、どちらかを別の通信ポートに移す必要があります。
  • ユーザープロトコルを削除したポートは、OKを押したときにNormalモードに戻ります。
  • 通信ポートウィンドウの各項目については、Phase 6 · 通信ポートで説明します。

ユーザープロトコルウィンドウ

ウィンドウを開く

  • 設定 → ユーザープロトコル…を選択すると開きます。
  • ラダーのUPTRIGの番号セルでユーザープロトコルを開くを押しても開きます(下記)。
  • インスペクターや使用データ一覧ウィンドウで、ユーザープロトコルが使うセルを押すと、そのセルを使うトランザクション・フレーム・フィールドを選んだ状態でウィンドウが開きます。

図4. 設定メニューのユーザープロトコル…

ウィンドウは開いたままでラダーを編集できます。定義のない通信ポートでは、+ このポートに作成とテンプレートの一覧が表示されます。

図5. 定義のない通信ポートで、空のポートから始めるかテンプレートを選ぶ画面

テンプレート 含まれる内容
CO2・ガスセンサ — 1 秒ごとに問い合わせ 「問い合わせ・受信」(1秒周期)のトランザクションと、ゼロ点コマンドをUPTRIG 3で送る「送信のみ」のトランザクション。2進の値はD100、チェックサムは2の補数和
CO2・ガスセンサ — 受信のみ(センサ通信例・センサが自分で送るとき) 同じCO2の応答フレームを、要求なしで常に待ち受ける「受信のみ」のトランザクション
バーコード・QR リーダ 「受信のみ」のトランザクション。終端文字CR LFまでの文字列をD200から書き込み、文字数をD190に書き込む
インバータ・温度調節器(ASCII 局番コマンド) 「問い合わせ・受信」(0.5秒周期)。ASCII 10進・16進の値、和のチェックサム(ASCII 16進2桁)、NAKのエラー応答

テンプレートの名前とセル(D100・M100など)は、追加した後で自由に変更できます。定義のあるポートにも+ テンプレートから読み込む…で追加でき、名前が重複する場合は末尾に番号が付きます。

画面構成

図6. ユーザープロトコルウィンドウ(CO2センサーのテンプレートで「問い合わせ・受信」のトランザクションを選んだ状態)

  • ① 通信ポートのタブ: 定義する通信ポートを選ぶタブです。定義のあるポートには、ユーザープロトコルと回線設定(例: 9600 · 8-N-1)が一緒に表示されます。
  • ② ビュー: 定義・PC 直接試験・通信記録から選べます。シミュレーション中はシミュ仮想相手が加わります。回線設定…を押すと、通信ポートウィンドウが開きます。
  • ③ トランザクション: トランザクションのカードに、名前、通信パターン、開始条件、送信フレーム → 受信フレーム、状態ワード・完了ビットが表示されます。モニタリング中は、最後の結果もあわせて表示されます。+ トランザクション追加を押して通信パターンを選ぶと、トランザクションが追加されます。
  • ④ フレーム: このポートのフレーム一覧です。フレームごとに送信・受信・未使用とバイト数が表示されます。+ フレームで追加し、フレームを選ぶと複製・フレーム削除を使えます。
  • ⑤ ポートの設定: 文字間の隙間を許す(下記)とモニタ中の通信記録(下記)を設定する欄です。ポートを空にするを押すと、このポートの定義がすべて削除されます。
  • ⑥ トランザクションの設定: 選んだトランザクションの名前・通信パターン・開始・応答待ち・再試行・状態ワード・完了ビットを設定する欄です(トランザクション)。
  • ⑦ チップ帯: トランザクションが送るフレーム(送信)と待つフレーム(受信・エラー応答)がチップで表示されます(フレーム)。
  • ⑧ プレビュー: 送信するバイトを16進で表示し、受信したバイトを貼り付けると解析します(下記)。
  • ⑨ プロパティ: 選んだチップ(フィールド)のプロパティを変更します。チップを選んでいないときは、トランザクションまたはフレームの説明が表示されます。
  • ⑩ RAM・フラッシュ・1回: ユーザープロトコルが使う機器のRAMとフラッシュ(ユーザー領域に対する割合)と、選んだトランザクション1回分の送信時間の計算値です。送信時間には、スキャン時間と相手機器の処理時間は含まれません。直す箇所があるときは、RAMとフラッシュは表示されません。
  • ⑪ 下部: ポート・トランザクション・フレームの数と、直す箇所の数が表示されます。OKを押すと定義がプロジェクトに反映され、キャンセルを押すと変更が破棄されます。ファイルに残すには、プロジェクトを保存する必要があります。

ショートカットキーと元に戻す

キー 動作
Ctrl+Enter OK
Esc ウィンドウを閉じます。変更がある場合は、変更を破棄しますか?と確認します。
Ctrl+Z / Ctrl+Y ウィンドウ内での変更を1段階ずつ元に戻す、またはやり直します。ウィンドウ内に戻せる変更がないときは、プログラム全体の元に戻す・やり直しになります。
Ctrl+S プロジェクトを保存します。OKを押す前にウィンドウで変更した内容は保存されません。
Ctrl+T / Ctrl+M ダウンロード / モニタリング
← → · Alt+← Alt+→ · Delete · Insert チップ帯でのチップ間の移動 · チップの並べ替え · チップの削除 · チップの追加
  • 文字入力欄の中でCtrl+Zを押すと、その欄の入力が元に戻ります。同じ欄に続けて入力した文字は、1段階でまとめて元に戻ります。
  • OKを押す操作は、プログラム全体の元に戻す履歴の1段階になります。OKを押した後でも、編集 → 元に戻す(Ctrl+Z)で、OKを押す前の定義に戻せます。

フレーム

フレームは、バイトの順に並べたチップ(フィールド)で作ります。チップの下にはバイトの位置(1バイト目から)が表示され、チェックサムのチップを選ぶと、チェックサムの計算範囲がチップ帯に色付けされます。チップ帯の末尾の+を押してフィールドの種類を選ぶと、チップが追加されます。

図7. チップ帯の+でフィールドの種類を選ぶ様子

フィールド 送信時 受信時
固定 入力したバイトをそのまま送ります。 同じバイトの場合だけ、このフレームとみなします(チップに一致必須と表示)。
値 PLCのセルの値を、決めた形式のバイトに変換して送ります。 バイトを値に変換して、PLCのセルに書き込みます。
文字列 PLCのセルの文字を送ります。 受信した文字をPLCのセルに書き込みます。文字数を別のセルに書き込むこともできます。
読み飛ばし 埋め用のバイトを、決めた数だけ送ります。 その位置のバイトは見ません。
長さ 指定したフィールドのバイト数を入れて送ります。 実際のバイト数と一致するかを確認し、長さが変わるフレームの終わりを決めます。
チェックサム 計算して入れます。 計算して照合します(チップに照合と表示)。一致しない場合は値を書き込みません。

図8. CO2の応答フレーム(9バイト)のフィールドとチェックサムの範囲

固定バイト

バイト欄には、16進、ダブルクォーテーションで囲んだ文字、制御文字名をスペースで区切って入力してください。下に実際のバイトとバイト数が表示されます。

書き方 例 バイト
16進2桁 FF 01 86 FF 01 86
ダブルクォーテーションで囲んだ文字(ASCII) “01R” 30 31 52
制御文字名(NUL~US・SP・DEL) STX ETX CR LF ACK NAK 02 03 0D 0A 06 15
繰り返し(*N、1~255) 00*5 00 00 00 00 00

1つのチップには255バイトまで入力できます。ASCII以外の文字は、16進で入力する必要があります。FFは16進のバイト0xFFとして読みます(フォームフィードの制御文字名としては扱いません)。

値

PLC アドレスに、値をやり取りするセル(例: D100)またはシンボル名を入力し、形式を選んでください。

図9. 値フィールドのプロパティ(2進2バイト、ビッグエンディアン)

形式 設定 例
2 進 バイト数1・2・4、順序(ビッグエンディアン・リトルエンディアン)、符号(なし・あり) 2バイト、ビッグエンディアン: 01 9A ↔ 410
ASCII 10 進 桁数(1~10、空欄で可変)、埋め(0埋め・空白)、符号(なし・負数のみ -・常に +/-)、小数桁(0~9)、小数点(なし・あり) 4桁、0埋め: 100 ↔ “0100” · 小数桁2、小数点あり: 1234 ↔ “12.34”
ASCII 16 進 桁数、送信時の文字(大文字・小文字) 4桁: 6699 ↔ “1A2B”
BCD バイト数1・2・4、順序 2バイト: 1234 ↔ 12 34
REAL 順序(4バイトの実数) 実数のセル(Rなど)とやり取りします。
  • ASCII 10進の受信では、前後の空白、+・-、決めた桁数より短い小数(“12.3” → 1230)を読み取ります。数字以外の文字や、決めた小数桁より長い0以外の小数(“12.345”)が来ると、値を書き込まず、状態ワードが値変換失敗(F4)になります。可変桁数の場合、受信できるのは1~12文字です。
  • 受信した値がPLCのセルに収まらないほど大きい場合は、値を書き込まずにF4になります。このような組み合わせでは、チップに警告が表示されます。
  • データビットが7の場合、0x7Fより大きいバイトは最上位ビットが失われます。7データビットのポートで、2進の値や0x7Fより大きい固定バイトを使うと、チップが赤く表示されます。

文字列

  • PLC アドレス(先頭セル)から、1ワードに2文字ずつ書き込みます。下位バイトが先です(D200の下位バイト = 1文字目)。
  • 長さ: 終端文字まで・最大 Nは、すぐ後ろの固定フィールド(例: CR LF)が来るまで、最大N文字を受信します。常に N 文字は、常にN文字です。Nは1~255です。
  • 受信文字数を置くセルにワードアドレスを入力すると、受信した文字数が書き込まれます。余りの埋め(16 進)は、N文字より短いときに余った位置を埋めるバイトです。

長さ

形式(2進1バイト・2進2バイト・ASCII 10進・ASCII 16進)と数える範囲(何番目から何番目までのフィールドか)を設定してください。送信時はその範囲のバイト数を入れ、受信時は実際のバイト数と一致するかを確認します。相手機器がバイト数に別の数を加えて送る場合は、補正(加える数)にその数を入力してください。

チェックサム

種類 計算
和(8 ビット) · 和(16 ビット) 範囲のバイトを足した値の下位8ビット・16ビット
2 の補数和 バイトの和の2の補数(和を0x100から引いた値)
1 の補数和 バイトの和のビットを反転した値
XOR(BCC) 範囲のバイトの排他的論理和(XOR)
CRC-16 下記の種類のいずれか、または手動で設定した値
LRC 範囲のASCII 16進文字を2文字ずつバイトに変換し、足した和の2の補数(Modbus ASCII方式)
  • 範囲の始まり: 1 バイト目から・2 バイト目からのほか、何バイト目からかを数値で入力できます。先頭バイト(STXなど)を除いて計算する機器には、2 バイト目からを選んでください。
  • 範囲の終わり: 既定はチェックサムの直前までです。チェックサムの後ろに終端文字が来るフレームでも、この既定値のまま使えます。
  • 格納形式: 1バイト・2バイト(ビッグエンディアン・リトルエンディアン)、またはASCII 16進2桁・4桁です。ASCII 16進は、送信時に大文字・小文字を選べます。受信時は大文字・小文字を区別しません。

CRC-16は、機器によって計算方式が異なります。CRC-16 の種類を選ぶと、多項式・初期値・入力反転・出力反転・最終XORの5つの欄が埋まり、文字列“123456789”で計算したチェック値が表示されます。チェック値が相手機器の取扱説明書にあるcheck値と同じになる種類を選んでください。5つの欄のいずれかを変更すると、手動設定になります。

図10. チェックサムのプロパティにあるCRC-16の種類の一覧

種類 多項式 初期値 反転(入力・出力) 最終XOR チェック値
MODBUS 8005 FFFF あり 0000 4B37
CCITT-FALSE 1021 FFFF なし 0000 29B1
XMODEM 1021 0000 なし 0000 31C3
KERMIT 1021 0000 あり 0000 2189
X-25 1021 FFFF あり FFFF 906E
ARC 8005 0000 あり 0000 BB3D
USB 8005 FFFF あり FFFF B4C8
DNP 3D65 0000 あり FFFF EA82

格納形式の既定は、MODBUSだけがリトルエンディアンで、ほかの種類はすべてビッグエンディアンです。

受信フレームの終わり

受信フレームがどこで終わるかはフレームの形から決まり、チップ帯の上に終わり: …と表示されます。

表示 終わりを決めるもの
終わり: 固定長 N すべてのフィールドの長さが決まっているフレーム
終わり: 長さフィールド(フィールド N) 前にある長さフィールドの値
終わり: 終端文字 … 長さが変わるフィールドの直後にある固定バイト(例: CR LF、ETX)
終わり: N ms 無通信で フレームの末尾の無通信時間 (ms)の間、バイトが来ないこと
終わり: 不明 終わりを決められないため、直す箇所として表示されます。

末尾の無通信時間 (ms)は、フレームを選ぶと右側のプロパティに表示され、20~10000 msの範囲で設定できます(空欄の場合は使いません)。長さが分からない最後のフィールドは、この時間だけ通信がないと終わったものとみなします。受信途中のバイトが残ったまま回線に100 ms以上通信がない場合も、そのバイトを先頭から破棄します。

図11. 受信フレームの終わりを決める4つの方法と、1バイトずつずらして照合し直す仕組み

プレビューと受信バイトの解析

ウィンドウ下部のプレビューには、送信フレームのバイトが16進で表示されます(値のセルは0、長さとチェックサムは計算値)。その下の入力欄に、相手機器が送ったバイト列を1行に1つずつ貼り付けると、受信フレームとして解析し、フィールドごとに値と結果を表示します。16進(FF 86 01)と、STX “01” ETXのような固定バイトの書き方のどちらも使えます。

図12. CO2の応答バイトを貼り付け、D100 = 410と解析した状態

結果 意味
✓ … 固定バイト・長さ・チェックサムがすべて一致しています。✓ の後に、書き込まれる値がフィールドごとに表示されます(図12)。値フィールドのないフレームではこのフレームに一致しますと表示されます。
… 未着です フレームが終わるには、さらにバイトが必要です。
✕ … バイト目が決めた固定バイトと違います このフレームではありません。
✕ チェックサム — 期待値 … チェックサムが一致しません。計算した値もあわせて表示されます。
✕ … 値に変換できません 数字でないか、セルに収まりません。

一致するチェックサムの種類を探す

相手機器の取扱説明書にチェックサムの方式が書かれていない場合や、チェック値が合わない場合に使います。相手機器が実際に送ったフレームを2つ以上貼り付けてください。チェックサムが一致しない場合は、チェックサムの種類・CRC-16の種類・格納形式・範囲の始まりを変えながら、すべてのサンプルに一致する組み合わせを自動で探し、一致する種類を探すの行に候補ごとの「…」に変更ボタンを表示します。サンプルが1つだけでは偶然一致する組み合わせがあり得るため、「…」に変更はサンプルが2つ以上のときだけ押せるようになります。変更した内容は、OKを押すと定義に反映されます。

図13. 2つのサンプルから「2 の補数和 · 2 バイト目から」を見つけた状態

トランザクション

トランザクション一覧でトランザクションを選ぶと、中央の上部にトランザクションの設定が、その下に送信フレームと受信フレームのチップ帯が表示されます。

図14. ASCIIの局番読み取りトランザクション — 送信フレーム、受信フレーム、エラー応答(NAK)

項目 既定値 説明
名前 通信パターンの名前 トランザクションの名前です。ポート内で重複しないようにする必要があります。
通信パターン — 問い合わせ・受信 · 受信のみ · 受信したら応答 · 送信のみ
開始 周期 「問い合わせ・受信」「送信のみ」: 周期 · ラダー UPTRIG 番号 · 値が変わったとき / 「受信のみ」「受信したら応答」: 常時待ち受け
周期 (ms) 1000 10 ms~1時間。前回の開始時点から数えます。
番号 1 ラダーのUPTRIGの番号(1~255)
見るセル · セル数 — 「値が変わったとき」: 見るセルからセル数(1~32)分のいずれかの値が変わると送信します。機器の起動時にも1回送信します。
応答待ち (ms) 200 「問い合わせ・受信」で応答を待つ時間(20~60000 ms)
再試行 2 応答がないとき、または正しくない応答だけが来たときに再送信する回数(0~10)
状態ワード 空欄(使わない) トランザクションの結果を受け取るワードアドレス(下記)
完了ビット 空欄(使わない) トランザクションが終わると1スキャンの間ONになるビットアドレス
受信数セル 空欄(使わない) 「受信のみ」「受信したら応答」: 一致するフレームを受信するたびに1ずつ増えるワードアドレス(65535の次は0)
  • 送信フレームと受信フレームは、チップ帯の先頭にある一覧から選べます。+ 新しいフレームを選ぶと、空のフレームが作成されます。受信フレームは、+ 受信フレームで2つ以上設定できます。
  • 「問い合わせ・受信」では、+ エラー応答(NAK など)で相手機器のエラー応答フレームを設定できます。エラー応答を受信すると、トランザクションはエラー応答(F6)で終わります。
  • 「受信したら応答」では、送信のフレームが応答になります。応答に入れる値は、PLCのセルから読み出します。

パターン別の動作

  • 問い合わせ・受信: 送信後、応答待ちの時間内に受信フレームが来れば成功です。応答がない場合や正しくない応答だけが来た場合は、応答待ちの時間が過ぎてから再送信し、再試行の回数を使い切ると失敗で終わります。相手機器が正しくない応答だけを送る場合、1回のトランザクションに「応答待ち ×(再試行 + 1)」の時間がかかります。エラー応答を受信した場合は、再送信せずにすぐ終わります。
  • 送信のみ: フレームをすべて送信すると、成功で終わります。
  • 受信のみ: 一致するフレームを受信したスキャンで、値を書き込み、状態ワードに成功を書き込み、完了ビットを1スキャンの間ONにして、受信数セルを1増やします。
  • 受信したら応答: 「受信のみ」と同じように値を書き込んだ後、応答フレームをすぐに送ります。受信フレームが一致しない場合(先頭バイトが違う、チェックサムが一致しないなど)は応答しません。

状態ワード

状態ワードは1ワードで、そのトランザクションの最後の結果を表します。

値(16進) 画面の表示 意味
0000 まだ一度も成功していない 機器の起動後、このトランザクションがまだ一度も終わっていません。この定義が機器のプログラムにない場合も0です。
0001 最後のトランザクション成功 最後のトランザクションがエラーなく終わりました。
F000 応答なし(F0) 応答が来ませんでした。
F100 チェックサム誤り(F1) チェックサムが一致しない応答が来ました。
F200 形の違うバイトだけが来ました(F2) 受信フレームと形の違うバイトだけが来ました。
F300 回線ビジー(F3) 送信が進まず、送れませんでした。
F400 値変換失敗(F4) 受信した値が数字でないか、セルに収まりません。送信する値をフレームにできない場合もF4です。
F500 受信バッファあふれ(F5) 応答を待つ間に、受信バッファがあふれました。
F600 エラー応答(F6) エラー応答として設定したフレーム(NAKなど)を受信しました。
  • 失敗したトランザクションでは、受信値のセルを変更しません。前に受信した値がそのまま残ります。
  • 応答待ちが終わった時点で、それまでに破棄したバイトがあれば、F1 → F4 → F2の優先順でその原因を状態として書き込みます。破棄したバイトがなければF0です。
  • 状態ワードは、トランザクションごとに別のワードを使う必要があります。受信値のセルと重なると、警告が表示されます。

図15. 応答待ち・再試行と、状態ワード・完了ビットが変わるタイミング

文字間の隙間を許す

ポートごとの設定で、新しいポートではオンになっています。

  • オン: 1スキャンに1バイトずつ送信します。スキャン時間は延びませんが、要求がバイト数分のスキャンにわたって送信されます(スキャン5 msで10バイトなら約50 ms)。ほとんどのASCII機器は、文字間の隙間を問題にしません。
  • オフ: フレームを一度に続けて送信します。そのスキャンは、フレームの送信にかかる時間だけ長くなります。文字間に隙間があると要求を破棄する機器では、オフにする必要があります。

図16. 文字間の隙間を許すをオンにしたときとオフにしたときの、要求バイトの送られ方

ラダーからの開始(UPTRIG)

トランザクションの開始をラダー UPTRIG 番号にすると、ラダーのUPTRIGファンクションがそのトランザクションを実行します。ボタンを押したときだけ設定コマンドを送ったり、必要なときだけ値を読み出したりする場合に使います。

  1. トランザクションの開始でラダー UPTRIG 番号を選び、番号(1~255)を入力します。必要に応じて、完了ビットと状態ワードも入力します。
  2. OKを押します。
  3. ラダーにUPTRIGファンクションを挿入し、同じ番号を入力します。ファンクションパネルのSerialport分類にあるUPTRIG: Start User Protocol Triggerを選ぶか、ファンクションの挿入ウィンドウ(Ctrl+E)にUPTRIG 3のように入力して挿入できます。

図17. M3がONになったときにトリガー3のトランザクション(ゼロ点コマンド)を送るラング

UPTRIGの番号セルを編集すると、ユーザープロトコルで設定したトリガー番号が通信ポート・トランザクション名と一緒に表示され、押して選べます。同じ場所のユーザープロトコルを開くを押すと、ユーザープロトコルウィンドウが開きます。

図18. UPTRIGの番号セルで、定義済みのトリガー番号を選ぶ様子

  • UPTRIGの入力がOFFからONに変わるたびに、その番号のトランザクションを1回実行します。入力をONにしたままでは、繰り返し実行しません。
  • 実行前に複数回呼び出された場合は1回だけ実行し、実行中に呼び出された場合は、終わった後にもう1回実行します。
  • 完了ビットは、成功・失敗に関係なく、トランザクションが終わった後に1スキャンの間ONになります。失敗の理由は、状態ワードで確認できます。
  • 同じ通信ポートで番号が同じトランザクションは、まとめて実行されます。別の通信ポートのトランザクションに、同じ番号は使えません。
  • トリガーで開始するトランザクションは、機器の起動後やダウンロード後に自動では実行されません。
  • UPTRIGの番号は1~255の定数で、ユーザープロトコルにその番号で開始するトランザクションがある必要があります。そうでない場合はセルが赤く表示され、コンパイルされません。逆に、トリガー番号を設定したトランザクションに対応するUPTRIGがラダーにない場合は、「トリガー番号 3 を呼ぶ UPTRIG セルがないため、このトランザクションは始まりません」という警告が表示されます。

チェックと警告

ユーザープロトコルウィンドウは、直す箇所のチップや欄を赤またはオレンジ色で示し、ウィンドウ下部の行に最初のメッセージを表示します。メッセージを押すとその場所に移動し、ほか N 件を押すとすべてのメッセージが展開されます。赤い直す箇所があると、直す箇所 N — 直すまでプログラムを作りませんと表示され、ダウンロードできません。直す箇所があってもOKは押せるため、作成中の定義が失われることはありません。

図19. ウィンドウ下部の直す箇所と、赤く表示された欄

ラダーとほかの機能については、次の場合をチェックします。

場合 表示
同じ通信ポートでPUT・GET・PUT_LEN・GET_LENを使用 チャンネルが定数なら赤いセル、変数なら警告。同じ受信バッファを両方が読むと、やり取りするバイトが混ざります。
ユーザープロトコルが受信するセルにラダーが書き込む 警告。ラダーが書き込んだ値は、次の受信時に上書きされます。
受信するセル同士が重なる · 状態・完了・受信数のセルが受信するセルと重なる 警告
Modbus機器テーブルや機器の時計(RTC)ブロックが使うセルと重なる 警告
ポートのモードがUser Protocolでない · モードはUser Protocolだが定義がない · ダウンロードの使用がオン エラー。ユーザープロトコルウィンドウでOKを押すと、ほとんどの場合はあわせて修正されます。
機器のRAMが足りない · プログラムがフラッシュに収まらない エラー。ポート・トランザクション・フレームを減らすか、メモリ領域のサイズを小さくする必要があります。
フレームが255バイトを超える、またはフィールドが32個を超える エラー
送受信バッファがフレームより小さい エラー。設定 → データメモリのSERIAL欄でバッファを増やすか、フレームを小さくする必要があります。

ユーザープロトコルが使うセルは、検索・すべて置換・インスペクターの使用箇所・使用データ一覧にも表示されます。すべて置換でアドレスを置き換えると、ユーザープロトコルのセルも一緒に変わります。

シミュレーション

シミュレーション中は、各通信ポートのユーザープロトコルに仮想相手がつながり、ウィンドウにシミュ仮想相手ビューが加わります。相手機器がなくても、ラダーの動作と状態ワード・完了ビットを確認できます。

図20. シミュ仮想相手ビュー(ASCIIの局番読み取りトランザクションの応答と通信記録)

  • トランザクション — 状態セル・応答例: トランザクションを選び、仮想相手の動作(応答・応答なし・チェックサム誤り・エラー応答)を選べます。応答の場合は、PLCが受信する値を入力してください。応答例を設定するまでは応答がありません(状態ワードはF0)。
  • 仮想相手が自分から送る — 受信のみ・受信したら応答: 受信フレームの値を入力して入れるを押すと、仮想相手がそのフレームを送ります。
  • バイトをそのまま入れる(ゴミ・再同期の試験): 入力したバイトをそのまま入れて、ノイズのバイトを破棄して照合し直す動作を確認します。
  • 通信記録(仮想時刻): PLCが送ったバイトと仮想相手が送ったバイトが、1行ずつ表示されます。

シミュレーションには、OKを押した定義だけが反映されます。直す箇所がある定義はシミュレーションされません。回線ビジー(F3)と受信バッファあふれ(F5)はシミュレーションされず、スキャン時間と相手機器の処理時間も含まれません。仮想相手の設定は保存されません。

モニタリング

トランザクションカードの状態

モニタリング中にユーザープロトコルウィンドウを開くと、状態ワードを設定したトランザクションのカードに最後の結果が表示されます。「受信のみ」「受信したら応答」のトランザクションには、受信数セルの値と、最後に増えてからの経過時間も表示されます。状態は、選択した通信ポートのトランザクションのものだけを読み出します。

図21. モニタリング中のトランザクションカードの状態(CO2 濃度の読み取り — 最後のトランザクション成功)

カードの表示は、状態ワードの表にある画面の表示と同じです。表示された状態を信頼できないときは、灰色でその理由が表示されます。

灰色の表示 意味
PLC のプログラムが異なる 機器のプログラムが、現在のプロジェクトと異なる可能性があります。ダウンロードすると読み出します。
ダウンロード前の設定 モニタリング開始時の定義にないトランザクションです。OKを押してダウンロードし、モニタリングを再開すると読み出します。
PLC 応答なし · 値は不明 · 新しい値なし · 値は不明 モニター通信で新しい値が届いていません。
制限モニタ · 読みません プログラムのチェックエラーがある間は、ユーザーメモリの状態ワードを読み出しません。
ランタイムが書かない値 ユーザープロトコルが書き込まない値です。機器のプログラムが異なるか、ラダーがこのセルに書き込んでいます。

シミュレーション中は、カードに仮想もあわせて表示されます。OKを押していないトランザクションは確定前の設定、停止したシミュレーションはシミュレーション停止 · …と表示されます。

通信記録

ポートのモニタ中の通信記録をオンにしてOKを押し、ダウンロードすると、モニタリング中の通信記録ビューに、機器がその通信ポートで送受信したバイトが1行ずつ表示されます。通信記録をオンにすると、機器のRAMとフラッシュの使用量が少し増えます。

図22. 通信記録ビュー(CO2の要求と応答)

  • ① 方向と時刻: →は機器が送ったバイト、←は受信したバイトです。行は機器が送受信した順に並び、時刻はPCが記録を読み出した時点です。
  • ② バイト: 送受信したバイトです。下の行に、トランザクション・フレームの名前と、解析した値(例: ✓ D100 = 410 · ✓ チェックサム DF)が表示されます。
  • ③ 結果: 送信の行は成功・応答待ち・再送 N・送信できずまたは失敗の理由、受信の行は応答・受信・エラー応答(F6)・破棄など、そのバイトの結果です。破棄は、どのフレームにも一致しなかったバイトです。
  • ④ バイトの表示: 16 進・文字・両方から選べます。文字の表示では、制御文字が‹STX›のように表示されます。
  • ⑤ コピー・ログを消去: 表示されている行を文字としてコピーするか、画面の記録を消去します。いちばん下までスクロールしておくと、新しい行を追って表示します。
  • 通信記録をオフにしたままダウンロードしたプログラムや、現在のプロジェクトと異なるプログラムが機器にある場合は、記録を読み出さずに、その理由が表示されます。
  • モニターが読み出す前に機器が新しい記録を書き込むと、「… その間に N 件を取りこぼし」と表示されます。
  • シミュレーション中は、同じビューに仮想相手との通信が仮想時刻で表示されます。

PC直接試験

PC直接試験は、PLCの代わりにPCのCOMポート(USB-RS485・USB-RS232変換器など)を使って、相手機器と直接やり取りする機能です。相手機器をPLCに接続する前に、フレームとチェックサムが正しいかを確認する場合に使います。ウィンドウで変更した定義(OKを押す前の内容)で試験し、デスクトップアプリでのみ使用できます。

図23. PC直接試験ビュー

  • ① PC の COM ポート: PCのCOMポートの一覧です。USB機器は「COM10 — USB Serial Port」のように機器名が一緒に表示され、Bluetoothのポートは「COM23 (Bluetooth)」と表示されます。最初は(ポートを選んでください)と表示され、前回この通信ポートで開いたCOMがあれば、あらかじめ選ばれます。再読み込みで一覧を読み込み直します。
  • ② 開く・閉じる: 選んだCOMポートを開きます。回線には、その通信ポートの通信ポート設定(ボーレート・データビット・パリティ・ストップビット)をそのまま使います。別のビューに移るかウィンドウを閉じると、ポートは閉じます。
  • ③ トランザクション 1 回 — 問い合わせ・受信/送信のみ: 左側でトランザクションを選び、送信する値(例の値)を入力して1 回送るを押すと、応答待ち・再試行も含めて機器と同じ方式で1回やり取りし、結果を表示します。
  • ④ 待ち受け — 受信のみ・受信したら応答: 待ち受け開始を押すと、相手機器が送るバイトを受信して解析します。バーコードリーダーが実際に何を送っているかを確認する場合に使います。「受信したら応答」のトランザクションでは、③で入力した例の値を使ってPCが応答します。
  • ⑤ 通信記録: 送受信したバイトが、通信記録ビューと同じ形式で表示されます。チェックサムが一致しない応答が届くと、一致する種類を探すの行に一致するチェックサムの候補が表示され、応答が2つ以上たまると「…」に変更を押せます。
  • モニタリング・ダウンロードが使っているCOMは「— モニタ・ダウンロードが使用中」と表示され、開けません。モニタリング・ダウンロードを終了してから開いてください。
  • 通信ポート設定でダウンロードに使うCOMは「— ダウンロードポート」と表示され、選ぶと、PLCに接続されたポートの可能性があるという案内が表示されます。
  • PC直接試験は、PC側の回線と相手機器を確認するための機能です。スキャン時間による動作は、機器で改めて確認してください。

例

以下の例は、MPS-8A8Rの通信ポート1~通信ポート3に、3つのテンプレートを1つずつ設定した構成です。ほかの機種でも、通信ポートの番号だけを変えて同じ方法で使用できます。

例1. CO2センサーの値を1秒ごとに読み出す

通信ポート1(9600 · 8-N-1)にCO2センサーを接続して1秒ごとに濃度を読み出し、ボタン入力でゼロ点コマンドを送る例です。

  1. 設定 → 通信ポートのシリアル 1を、ボーレート9600、データビット8、パリティなし、ストップビット1に設定します。
  2. 設定 → ユーザープロトコル…で通信ポート1タブを選び、テンプレートのCO2・ガスセンサ — 1 秒ごとに問い合わせを押します。
  3. OKを押します。通信ポート1がUser Protocolモードに変わります。
  4. ゼロ点コマンドを送るラングをラダーに追加します。
ラング 入力 ファンクション 内容
0 M3(NO) UPTRIG 3 M3がONになると、ゼロ点コマンドを1回送ります。
フレーム バイト
CO2 要求 FF 01 86 00 00 00 00 00 79(固定FF・01・86・00*5 + 2の補数和、2バイト目から)
CO2 応答 FF 86 + 濃度2バイト(ビッグエンディアン → D100) + 読み飛ばし4 + 2の補数和
ゼロ点コマンド FF 01 87 00 00 00 00 00 78

センサーがFF 86 01 9A 00 00 00 00 DFを送ると、D100は410(ppm)になり、状態ワードD101は0001(10進で1)になって、完了ビットM100が1スキャンの間ONになります。

図24. 例1をモニタリングしている様子(ウォッチパネルのD100の濃度・D101の状態・M100の完了ビット)

例2. バーコードリーダーの文字を受信する

通信ポート2(9600 · 8-N-1)にバーコードリーダーを接続し、読み取った文字をD200から受信する例です。

  1. シリアル 2を9600 · 8-N-1に設定します。
  2. ユーザープロトコルの通信ポート2タブでテンプレートのバーコード・QR リーダを選び、OKを押します。
項目 値
フレーム「バーコード」 文字列(D200 · 終端文字まで · 最大32 · 受信文字数D190) + 固定CR LF
トランザクション「バーコード受信」 受信のみ · 常時待ち受け · 完了ビットM101 · 受信数セルD191

リーダーがILOGICS-1234とCR LFを送ると、D190は12になり、D200から2文字ずつ(D200 = I・L)書き込まれます。M101が1スキャンの間ONになり、D191が1増えます。空行(CR LFだけ)が来た場合は、文字数0のフレームとして受信します。

図25. 例2の通信記録(文字の表示)と受信数

例3. ASCII局番コマンドでインバーターの値を読み出す

通信ポート3(9600 · 7-E-1)に局番01のASCIIコマンド機器を接続し、番地100の値を0.5秒ごとにD11へ読み出す例です。

  1. シリアル 3を、ボーレート9600、データビット7、パリティ偶数、ストップビット1に設定します。
  2. ユーザープロトコルの通信ポート3タブでテンプレートのインバータ・温度調節器(ASCII 局番コマンド)を選び、OKを押します。
  3. 読み出す番地を入れるラングをラダーに追加します。
ラング 入力 ファンクション 内容
0 @ON MOVE 100 D10 読み出す番地100をD10に入れます。
フレーム 形 例
局番要求 STX “01” “R” + 番地(ASCII 10進4桁 · D10) + ETX + 和(8ビット)ASCII 16進2桁(2バイト目から) 02 “01R0100” 03 “77”
局番応答 ACK “01” “R” + 値(ASCII 16進4桁 · D11) + ETX + 和(8ビット)ASCII 16進2桁(2バイト目から) 06 “01R03E8” 03 “96” → D11 = 1000
局番エラー(NAK) NAK “01” ETX 受信すると状態ワードD12 = F600

トランザクション「局番読み取り」は、「問い合わせ・受信」、周期500 ms、応答待ち300 ms、再試行3回、状態ワードD12です。このテンプレートは文字間の隙間を許すがオフになっているため、要求を一度に続けて送信します。

図26. 例3の通信記録(両方の表示 — 16進と制御文字)

トラブルシューティング

症状 確認すること
状態ワードが0000のまま ダウンロードしたプログラムにユーザープロトコルが含まれているか、トランザクションの開始がトリガーの場合はラダーのUPTRIGの入力がOFF → ONに変わったかを確認してください。
F000(応答なし) PC直接試験で、同じフレームに相手機器が応答するかを確認してください。応答する場合は、通信ポートの番号と端子(RS-232・RS-485・UART)、RS-485の+・-の配線、通信ポート設定を確認してください。相手機器の応答が遅い場合は、応答待ち (ms)を長くしてください。
F100(チェックサム誤り) 相手機器が送ったバイトを2つ以上貼り付け、一致するチェックサムの種類を探すで確認してください。
F200(形の違うバイトだけが来た) 相手機器が送ったバイトをプレビューに貼り付けて、何バイト目が違うかを確認してください。あわせて、局番・先頭バイト、データビット(7・8)とパリティを確認してください。
F400(値変換失敗) プレビューで、値フィールドの形式(桁数・小数桁・16進)とPLCのセルのサイズを確認してください。
F500(受信バッファあふれ) ボーレートに対してスキャン時間が長いと、1スキャンの間に受信バッファを超えるバイトがたまります。スキャン時間を短くするか、設定 → データメモリのSERIAL欄で受信バッファを増やしてください。128バイトのバッファと115200 bpsでは、スキャン時間が約11 msを超えないようにする必要があります。
要求は送信されるが、相手機器が応答しない(文字間の隙間) 相手機器が文字間の隙間を許容していない可能性があります。ポートの文字間の隙間を許すをオフにしてダウンロードし、もう一度確認してください。
長いバーコードの後半だけが入る 文字列の最大文字数より長いコードが来ると、後ろから最大文字数分だけが書き込まれます。Nを最も長いコードより大きく設定してください。
ノイズがあるのに値が入る 機器はパリティエラーをチェックしません。チェックサムのあるフレームで定義してください。
PC直接試験でポートが開かない モニタリング・ダウンロードやほかのプログラムが、そのCOMを使っていないかを確認してください。

確認事項

  • ユーザープロトコルやUPTRIGを使った.mpxプロジェクトは、V1.2.0以前では開けません。
  • 受信値のセルは、ラダーが読み取るだけになるように構成してください。

関連文書

ja-jp_products/mp_studio/user_protocol.txt · 最終更新: by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki