RaspberryPi上のelectronとKeyencePLCをserial通信

今回はRaspberryPi上のelectronとKeyenceのPLCをNode SerialPortを利用して、シリアル通信をしていきます。
わかりやすく説明するために無手順での通信を行います。

使用する機器

・RaspberryPi
・CONTEC COM-1(USB)H
・Keyence KV-Nano (内臓シリアルポートRS-232Cを利用)

構成



RaspberyPiの設定

①USBドライバをインストールする。

インストールドライバはこちらにあります。
ドライバをダウンロードすると、READMEの中にインストール方法も記載されています。

引用
---------------------------------------------------------
    4-1. suでrootに移行。
    4-2. modprobe ftdi_sio vendor=0x06ce product=0x83x1を実行(注1、(注2
        COM-1(USB)H     ... product=0x8311
        COM-1P(USB)H    ... product=0x8321
        COM-1PD(USB)H   ... product=0x8331    
    4-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スキャンON
MOV $0 CM6515
MOV $0 CM6516
MOV $0 CM6518
MOV $0D0A CM6519
MOV $0 CM6520
MOV $0D0A CM6521
SET CR6700 ; Port1 通信許可
;テキストデータの送信"KEYENCE CR LF"
LD CR6600 ; Port1 通信可能
ANP MR1000
MOV #7 CM6001
MOV $4B45 CM6002
MOV $5945 CM6003
MOV $4E43 CM6004
MOV $4500 CM6005
SET CR6701 ; Port1 送信要求
LD CR6601 ; Port1 送信完了
RES CR6701 ; Port1 送信要求
;テキストデータの受信
LD CR2002
LDA CM6258
CON
EXT
CON
DIV #2
CON
MPS
AND= TM1 #0
STA DM100
MPP
AND= TM1 #1
ADD #1
CON
STA DM100
LD CR6602 ; Port1 受信データ読出要求
BMOV CM6259 DM1000 DM100 ; Port1 受信データ1
SET CR6702 ; Port1 受信データ読出完了
LDB CR6602 ; Port1 受信データ読出要求
RES CR6702 ; Port1 受信データ読出完了
;通信エラーが発生すると出力R500をONする
LD CR6604 ; Port1 通信エラー
OUT R500
;受信処理エラーが発生すると出力R501がONする
LD CR6603 ; Port1 処理エラー
OUT R501 
---------------------------------------------------------

これで設定が完了しました。
あとはPLCはオンラインエディットモードで送信を開始させ、electronのコンソールに表示されれば、成功です。

コンソールとは下記の画面のことです。



コメント