今回はRaspberryPi上のelectronとKeyenceのPLCをNode SerialPortを利用して、シリアル通信をしていきます。
わかりやすく説明するために無手順での通信を行います。
使用する機器
・RaspberryPi
・CONTEC COM-1(USB)H
・Keyence KV-Nano (内臓シリアルポートRS-232Cを利用)
・Keyence RS-232Cストレートケーブル 2.5M OP-26487
・Keyence 変換コネクタ D-sub 9ピン OP-26486
構成
RaspberyPiの設定
①USBドライバをインストールする。
インストールドライバはこちらにあります。
ドライバをダウンロードすると、READMEの中にインストール方法も記載されています。
引用
---------------------------------------------------------
4-1. suでrootに移行。4-2. modprobe ftdi_sio vendor=0x06ce product=0x83x1を実行(注1、(注2COM-1(USB)H ... product=0x8311COM-1P(USB)H ... product=0x8321COM-1PD(USB)H ... product=0x83314-3. 一般userに戻る。4-4. 終了。(注1)複数の製品(COM-1(USB)HとCOM-1PD(USB)Hなど)を同時に使用することはできません。(注2)通信ができない場合、コマンド「modprobe ftdi_sio」を実行後、「echo 06ce 83x1 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id」を実行してください。
---------------------------------------------------------
②electronの設定
npmでモジュールをインストールし、モジュールのリビルドをします。
npm install serialport
./node_modules/.bin/electron-rebuild
プログラムはmain.jsに書き込む必要はなく、renderer.jsに書き込んでいきます。
const { SerialPort } = require('serialport')
const { ReadlineParser } = require('@serialport/parser-readline')
var path = '/dev/ttyUSB0';
var baudRate = 9600;
const port = new SerialPort({
path: path,
baudRate: baudRate,
})
const parser = port.pipe(new ReadlineParser({ delimiter: '\r\n'}))
parser.on('data', data => {
console.log({ parser: data });
feedamount = data;
publoop();
})
port.on('error', err => console.log({ porterror: err.message }))
PLCの設定
無手順のシリアル通信設定をします。下記のニモニックを読み込んでください。
Keyenceの「KV-nanoシリーズ シリアル通信機能 内臓シリアルポート
ユーザマニュアル」をもとに作成しました。高度なことがやりたい場合はこちらの説明書をキーエンスから入手してください。アカウントがあれば、webからダウンロードできます。
ニモニック
---------------------------------------------------------
電源投入時に通信の初期設定をおこない、通信を許可する;データ格納単位 :バイト単位 モード設定 :ノーマルモード;送信ヘッダ :なし 送信デリミタ:CR LF;受信ヘッダ :なし 受信デリミタ:CR LF;受信データ長 :512バイトLD CR2008 ; 運転開始時1スキャンONMOV $0 CM6515MOV $0 CM6516MOV $0 CM6518MOV $0D0A CM6519MOV $0 CM6520MOV $0D0A CM6521SET CR6700 ; Port1 通信許可;テキストデータの送信"KEYENCE CR LF"LD CR6600 ; Port1 通信可能ANP MR1000MOV #7 CM6001MOV $4B45 CM6002MOV $5945 CM6003MOV $4E43 CM6004MOV $4500 CM6005SET CR6701 ; Port1 送信要求LD CR6601 ; Port1 送信完了RES CR6701 ; Port1 送信要求;テキストデータの受信LD CR2002LDA CM6258CONEXTCONDIV #2CONMPSAND= TM1 #0STA DM100MPPAND= TM1 #1ADD #1CONSTA DM100LD CR6602 ; Port1 受信データ読出要求BMOV CM6259 DM1000 DM100 ; Port1 受信データ1SET CR6702 ; Port1 受信データ読出完了LDB CR6602 ; Port1 受信データ読出要求RES CR6702 ; Port1 受信データ読出完了;通信エラーが発生すると出力R500をONするLD CR6604 ; Port1 通信エラーOUT R500;受信処理エラーが発生すると出力R501がONするLD CR6603 ; Port1 処理エラーOUT R501
---------------------------------------------------------
これで設定が完了しました。
あとはPLCはオンラインエディットモードで送信を開始させ、electronのコンソールに表示されれば、成功です。
コンソールとは下記の画面のことです。
コメント
コメントを投稿