プログラミングコース06 ーPLCとの通信・制御ー

プログラム課題

背景

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

システム構成

要求機能

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

プログラム画面

スイッチBOX

I/O表

 PLC DMPLC I/OQX40 ※入力ユニット[スイッチ]
RD000X20X0手動 / 自動
D001X21X1開始
D002X22X2
D003X23X3ポンプON
D004X24X4
D005X25X5ヒータON
D006X26X6
RD007X27X7非常停止
D008X28X8
D009X29X9
D010X2AXA
D011X2BXB
D012X2CXC
D013X2DXD
D014X2EXE
D015X2FXF
 PLC DMPLC I/OQY ※出力ユニット[ランプ]
D100Y30Y0
RD101Y31Y1開始(ランプ)
D102Y32Y2
RD103Y33Y3ポンプ ON(ランプ)
D104Y34Y4
RD105Y35Y5ヒータ ON(ランプ)
D106Y36Y6
RD107Y37Y7満水ランプ
D108Y38Y8
D109Y39Y9
WD110Y3AYAポンプ ON
WD111Y3BYBヒータ ON
D112Y3CYC
D113Y3DYD
D114Y3EYE
D115Y3FYF

プログラミング解説

プログラミング講座06 サンプルVIをダウンロード

プログラムの階層構造

用語

PLC(Programmable Logic Controller)

機械・設備の制御を担う装置のこと。シーケンサとも呼ばれる。制御や外部との通信にあたっては、PLCが定義する入出力の番号と、設備の入力信号および出力信号を対応付ける必要がある。対応関係を記入した表のことをI/O表と呼ぶ。

TCP

インターネットで標準的に利用されている通信プロトコル。

NI

計測・制御分野において標準的な開発環境「LabVIEW」を提供する計測器メーカーであり、種々の計測器に対するドライバを公式ホームページにて配布している。

ドライバ

コンピュータに接続されている周辺機器をコンピュータから管理・制御するためのプログラム

製作の流れ

STEP1:PLC通信ドライバVIを作成する

①これから製作するドライバVIを動作させる前提として、PLC側の設定が必要となる。設定の手順はPLCごとに異なるため、適宣、取扱説明書などを参照する。

②下記の4つのTPC VIおよび関数を使用して、PLCと通信を行う。

  • TPC 接続を開く
  • TPC 読み取り
  • TPC 書き込み
  • TPC 接続を閉じる
フロントパネル
ブロックダイアグラム

③VIの処理を以下のケースに分割し、タイプ定義に指定した列挙体でケースを選択できるようにしておく。

  • Open
  • Read
  • Write
  • Close
動画:PLC通信ドライバVIを作成する

STEP2:テストプログラムでPLCとの通信を確認する

教育用.vi:フロントパネル

制御BOXにLANケーブルを接続してスイッチBOXの状態をモニタする。WRITEは実行しないでください。制御BOXのリレーが破損する場合があります。

動画:テストプログラムでPLCとの通信を確認する-①
動画:テストプログラムでPLCとの通信を確認する-②
動画:テストプログラムでPLCとの通信を確認する-③

STEP3:温度調節計通信ドライバを作成する

①これから製作するドライバVIを動作させる前提として、温度調節計測の設定が必要となる。設定の手順は、適宣、取扱説明書などを参照する。

フロントパネル
ブロックダイアグラム

②RS-485トランシーバ制御のサンプルVIを参考に作成する。

  • RS-485モード  :Wire2-Auto
  • ボーレート   :19200
  • データビット  :8
  • パリティ    :None
  • ストップビット :1
  • フロー制御   :なし
動画:温度調節計通信ドライバを作成する

STEP4:テストプログラムで温度調整計との通信を確認する

フロントパネル
ブロックダイアグラム

温度調節計にUSB-RS485変換ケーブルを接続して計測温度をモニタする。タイミングループで1秒間隔に計測温度がグラフ表示されるようにする。

動画:テストプログラムで温度調整計との通信を確認する

STEP5:生産者/消費者デザインパターンでメインVIを作成する

ブロックダイアグラム ※完成形

LabVIEWのテンプレートから、「生産者/消費者デザインパターン(イベント)」を呼び出し、メインVIを作成する。

動画:生産者/消費者デザインパターンでメインVIを作成する

STEP6:キューで送信するデータを列挙体で作成する

消費者ループの処理を以下のケースに分割し、タイプ定義に指定した列挙体でケースを選択できるようにしておく。

  • initialize:初期化処理
  • wait:Idle loop
  • monitor:計測データ保存処理
  • pomp control:ポンプ制御処理
  • heater control:ヒータ制御処理
  • exit:プログラム終了処理

STEP7:生産者ループのイベント処理を作成する

生産者ループに以下のイベントケースを作成し、それぞれのケースでキューに【STEP6】で作成した項目を要素として追加する。

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

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

②スタックシーケンス1: 画面の初期化とPLC通信ドライバのOpenを実行する

動画:消費者ループ:intializeを作成する

STEP9:消費者ループ:waitを作成する

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

動画:消費者ループ:waitを作成する

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を実行して消費者ループを終了させる。

動画:消費者ループ:exitを作成する

RS-485とMODBUSプロトコル

RS-232C,RS-422,RS-485 比較RS-232CRS-422RS-485
動作モードシングルエンド差動差動
ドライバとレシーバの数1ドライバ、1レシーバ1ドライバ10レシーバ32ドライバ、32レシーバ
通信距離(最大)15メートル1200メートル1200メートル
伝送速度(最大)20Kbps10Mbps10Mbps

MODBUS RTU メッセージフレーム

アドレス
(1byte)
ファンクション
(1byte)
データ
(N byte)
CRC
(2byte)

主なファンクション

コード名称概要
1Read Coll StatusスレーブのDOのON/OFF状態を読み出す
2Read Input StatusスレーブのDIのON/OFF状態を読み出す
3Read Holding Registersスレーブの保持レジスタの内容を読み出す
4Read Input Registersスレーブの入力レジスタの内容を読み出す
5Force Single CoilスレーブのDO状態を変更する
6Preset Single Registerスレーブの保持レジスタの内容を更新する
8Diagnosticsマスタースレーブ間の通信診断、スレーブ機器の診断に使用する
11Fetch Comm.Event Ctr.スレーブが正しくメッセージを処理したことを知る目的で使用する
12Fetch Comm.Event Logスレーブの通信イベントログを読み出す
15Force Multiple Coilsスレーブの連続した複数のDOの状態を変更する
16Preset Multiple Registersスレーブの連続した複数の保持レジスタの内容を変更する
17Report 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に関する有償技術サポートおよび受託開発サービスを提供しております。本講座で得た知識を実務に活かしたい方や、実際の業務に即した開発支援をお求めの方は、ぜひお気軽にご相談ください。
専門のエンジニアが、お客様の課題解決をサポートいたします。