プログラミングコース06 ーPLCとの通信・制御ー
プログラム課題
背景
あなたはプログラマです。一緒にプロジェクトに参加している先輩エンジニアから、以下に示す「温度制御装置」と通信するPC用のプログラムを製作するよう頼まれました。プログラミングの前段階で用意できているものは、システム構成、要求機能のリスト、プログラム画面、スイッチBOX、およびI/O表の5つです。
システム構成

要求機能
- LabVIEW TCP関数を使用して、PLC内データメモリのRead/Writeを行うプログラムを製作する
- PLCとの通信周期が設定できること
- PLCに接続されているスイッチBOXの状態がモニタできること
- 画面にポンプ ON/OFF スイッチを配置してポンプの ON/OFF が制御できること
- 画面にヒータ ON/OFF スイッチを配置してヒータの ON/OFF が制御できること
- 温度調節計から温度データを取得して数値表示、グラフ表示すること
- キューメッセージハンドラ(生産者/消費者デザインパターン)を使用すること
プログラム画面

スイッチBOX

I/O表
PLC DM | PLC I/O | QX40 ※入力ユニット | [スイッチ] | |
---|---|---|---|---|
R | D000 | X20 | X0 | 手動 / 自動 |
D001 | X21 | X1 | 開始 | |
D002 | X22 | X2 | ||
D003 | X23 | X3 | ポンプON | |
D004 | X24 | X4 | ||
D005 | X25 | X5 | ヒータON | |
D006 | X26 | X6 | ||
R | D007 | X27 | X7 | 非常停止 |
D008 | X28 | X8 | ||
D009 | X29 | X9 | ||
D010 | X2A | XA | ||
D011 | X2B | XB | ||
D012 | X2C | XC | ||
D013 | X2D | XD | ||
D014 | X2E | XE | ||
D015 | X2F | XF |
PLC DM | PLC I/O | QY ※出力ユニット | [ランプ] | |
---|---|---|---|---|
D100 | Y30 | Y0 | ||
R | D101 | Y31 | Y1 | 開始(ランプ) |
D102 | Y32 | Y2 | ||
R | D103 | Y33 | Y3 | ポンプ ON(ランプ) |
D104 | Y34 | Y4 | ||
R | D105 | Y35 | Y5 | ヒータ ON(ランプ) |
D106 | Y36 | Y6 | ||
R | D107 | Y37 | Y7 | 満水ランプ |
D108 | Y38 | Y8 | ||
D109 | Y39 | Y9 | ||
W | D110 | Y3A | YA | ポンプ ON |
W | D111 | Y3B | YB | ヒータ ON |
D112 | Y3C | YC | ||
D113 | Y3D | YD | ||
D114 | Y3E | YE | ||
D115 | Y3F | YF |
プログラミング解説
プログラムの階層構造

用語
製作の流れ

STEP1:PLC通信ドライバVIを作成する
①これから製作するドライバVIを動作させる前提として、PLC側の設定が必要となる。設定の手順はPLCごとに異なるため、適宣、取扱説明書などを参照する。
②下記の4つのTPC VIおよび関数を使用して、PLCと通信を行う。

- TPC 接続を開く
- TPC 読み取り
- TPC 書き込み
- TPC 接続を閉じる
フロントパネル

ブロックダイアグラム


③VIの処理を以下のケースに分割し、タイプ定義に指定した列挙体でケースを選択できるようにしておく。
- Open
- Read
- Write
- Close
STEP2:テストプログラムでPLCとの通信を確認する
教育用.vi:フロントパネル

制御BOXにLANケーブルを接続してスイッチBOXの状態をモニタする。WRITEは実行しないでください。制御BOXのリレーが破損する場合があります。
STEP3:温度調節計通信ドライバを作成する
①これから製作するドライバVIを動作させる前提として、温度調節計測の設定が必要となる。設定の手順は、適宣、取扱説明書などを参照する。
フロントパネル

ブロックダイアグラム

②RS-485トランシーバ制御のサンプルVIを参考に作成する。
- RS-485モード :Wire2-Auto
- ボーレート :19200
- データビット :8
- パリティ :None
- ストップビット :1
- フロー制御 :なし
STEP4:テストプログラムで温度調整計との通信を確認する
フロントパネル

ブロックダイアグラム

温度調節計にUSB-RS485変換ケーブルを接続して計測温度をモニタする。タイミングループで1秒間隔に計測温度がグラフ表示されるようにする。
STEP5:生産者/消費者デザインパターンでメインVIを作成する
ブロックダイアグラム ※完成形

LabVIEWのテンプレートから、「生産者/消費者デザインパターン(イベント)」を呼び出し、メインVIを作成する。
STEP6:キューで送信するデータを列挙体で作成する

消費者ループの処理を以下のケースに分割し、タイプ定義に指定した列挙体でケースを選択できるようにしておく。
- initialize:初期化処理
- wait:Idle loop
- monitor:計測データ保存処理
- pomp control:ポンプ制御処理
- heater control:ヒータ制御処理
- exit:プログラム終了処理
STEP7:生産者ループのイベント処理を作成する
生産者ループに以下のイベントケースを作成し、それぞれのケースでキューに【STEP6】で作成した項目を要素として追加する。

STEP8:消費者ループ:initializeを作成する

①スタックシーケンス0: プログラム終了時、ファイルに保存した画面設定データを読み込んで再現する処理を作成する。

②スタックシーケンス1: 画面の初期化とPLC通信ドライバのOpenを実行する
STEP9:消費者ループ:waitを作成する

通信周期で設定されている時間(msec)待機する。monitor処理をキューに入れて次の計測を起動する。
STEP10:消費者ループ:monitorを作成する

画面上の温度計測スイッチがONの時、温度調節計から温度データをReadする。
PLCからデータメモリをReadしてスイッチBOXの状態を更新する。
wait処理をキューに入れて起動する。
STEP11:消費者ループ:pomp controlを作成する

画面上のポンプスイッチの状態に応じて該当するPLCのデータメモリを ON/OFF する。(スイッチBOXの状態が自動で開始 OFFの時のみ実行する)
STEP12:消費者ループ:heater controlを作成する

画面上のヒータスイッチの状態に応じて該当するPLCのデータメモリを ON/OFFする。(スイッチBOXの状態が自動で開始 OFFの時のみ実行する)
STEP13:消費者ループ:exitを作成する

PLC通信ドライバのCloseを実行して消費者ループを終了させる。
RS-485とMODBUSプロトコル
RS-232C,RS-422,RS-485 比較 | RS-232C | RS-422 | RS-485 |
---|---|---|---|
動作モード | シングルエンド | 差動 | 差動 |
ドライバとレシーバの数 | 1ドライバ、1レシーバ | 1ドライバ10レシーバ | 32ドライバ、32レシーバ |
通信距離(最大) | 15メートル | 1200メートル | 1200メートル |
伝送速度(最大) | 20Kbps | 10Mbps | 10Mbps |
MODBUS RTU メッセージフレーム
アドレス (1byte) | ファンクション (1byte) | データ (N byte) | CRC (2byte) |
主なファンクション
コード | 名称 | 概要 |
---|---|---|
1 | Read Coll Status | スレーブのDOのON/OFF状態を読み出す |
2 | Read Input Status | スレーブのDIのON/OFF状態を読み出す |
3 | Read Holding Registers | スレーブの保持レジスタの内容を読み出す |
4 | Read Input Registers | スレーブの入力レジスタの内容を読み出す |
5 | Force Single Coil | スレーブのDO状態を変更する |
6 | Preset Single Register | スレーブの保持レジスタの内容を更新する |
8 | Diagnostics | マスタースレーブ間の通信診断、スレーブ機器の診断に使用する |
11 | Fetch Comm.Event Ctr. | スレーブが正しくメッセージを処理したことを知る目的で使用する |
12 | Fetch Comm.Event Log | スレーブの通信イベントログを読み出す |
15 | Force Multiple Coils | スレーブの連続した複数のDOの状態を変更する |
16 | Preset Multiple Registers | スレーブの連続した複数の保持レジスタの内容を変更する |
17 | Report Slave ID | スレーブ機器の情報を読み出す |
RS-485 2線式伝送の配線図

画像およびピンアサインはメーカー資料を参照しています。
National Instruments, SPECIFICATIONS AND FEATURES GUIDE NI Serial Hardware
2線式伝送(半二重)では、マスタ側のTransmit Date(TXD+)およびReceive Data(RXD+)を、スレーブ側のTXD+およびRXD+へ合わせて配線する。同様に、マスタ側のTXD-およびRXD-も、スレーブ側のTXD-およびRXD-へ合わせて配線する。
ポイントのまとめ
- TPCネットワーク上に接続されたPLCは、TCP関数を使用して内部メモリのRead/Writeを行うドライバを作成する。PLC側の設定(IPアドレス、ポート番号、プロトコル選択)が必要となる
- RS-485通信は、RS-485 トランシーバ制御のサンプルVIを利用する
- MODBUSメッセージフレームの表現には、ASCLIIとRTU(バイナリ)が存在する。RTU(バイナリ)の場合には、終端文字列(デリミタ)がないので受信データ数をあらかじめ算出しておく必要がある
- キューメッセージハンドラ(生産者/消費者デザインパターン)を使用し、キューで送信するメッセージはタイプ定義された列挙定数を使用する
- 画面の再現には、デフォルトデータディレクトリを利用する
LabVIEW講座データの販売について
本講座で使用した動画・テキスト・プログラム一式は、プログラムデータとしての販売やDVDメディアでの販売を行っております。
自習や復習、社内研修などにご活用いただけます。
LabVIEWに関する開発支援・技術サポートのご案内
ペリテックでは、LabVIEWに関する有償技術サポートおよび受託開発サービスを提供しております。本講座で得た知識を実務に活かしたい方や、実際の業務に即した開発支援をお求めの方は、ぜひお気軽にご相談ください。
専門のエンジニアが、お客様の課題解決をサポートいたします。