UBシリーズ リレー出力ボード Node.jsサンプルプログラム
ソフトウェアマニュアルにNode.jsのサンプルコードは記載しておりません。また、ソフトウェアパックにもNode.jsのサンプルプログラムは含まれておりませんので、Node.jsで使用される場合は以下を参考にしてください。
必要なパッケージ
(参考)弊社で動作確認したバージョン
node: 14.16.0
ffi-napi: 4.0.3
ref-napi: 3.0.2
サンプルプログラム
// ES6 import
import ffi from 'ffi-napi';
import ref from 'ref-napi';
// CommonJS
//const ffi = require('ffi-napi');
//const ref = require('ref-napi');
// ライブラリ
let libName = 'libydci'; // Linux
if (process.platform === 'win32') {
libName = 'Ydci'; // Windows
}
const ydci = ffi.Library(libName, {
'YdciOpen': ['int32', ['uint16', 'string', 'uint16 *', 'uint16']],
'YdciClose': ['int32', ['uint16']],
'YdciDioInput': ['int32', ['uint16', 'uint8 *', 'uint16', 'uint16']],
'YdciRlyOutput': ['int32', ['uint16', 'uint8 *', 'uint16', 'uint16']],
'YdciRlyOutputStatus': ['int32', ['uint16', 'uint8 *', 'uint16', 'uint16']]
});
// エラーコード(戻り値)
const YDCI_RESULT_SUCCESS = 0; // 正常終了
// YdciOpen
const YDCI_OPEN_NORMAL = 0; // 通常オープン
//const YDCI_OPEN_OUT_NOT_INIT = 1; // 出力初期化しない
// ボード識別スイッチが0のボードをオープンします
const boardIdPtr = ref.alloc(ref.types.uint16);
let result = ydci.YdciOpen(0, 'RLY-P4/2/0B-UBT', boardIdPtr, YDCI_OPEN_NORMAL);
if (result !== YDCI_RESULT_SUCCESS) {
console.log('オープンできません');
process.exit(1);
}
const boardId = ref.deref(boardIdPtr);
// IN1の入力
{
const inputData = Buffer.alloc(1);
const inputNo = 1;
result = ydci.YdciDioInput(boardId, inputData, inputNo, 1);
if (result === YDCI_RESULT_SUCCESS) {
console.log(`IN${inputNo}: ${inputData[0]}`);
}
}
// IN0-1の入力
{
const inputData = Buffer.alloc(2);
result = ydci.YdciDioInput(boardId, inputData, 0, 2);
if (result === YDCI_RESULT_SUCCESS) {
inputData.forEach((v, i) => {
console.log(`IN${i}: ${v}`);
});
}
}
// RY3の出力
{
const outputData = Buffer.alloc(1);
outputData[0] = 1;
result = ydci.YdciRlyOutput(boardId, outputData, 2, 1);
}
// RY1-4の出力
{
const outputData = Buffer.alloc(4);
outputData[0] = 1;
outputData[1] = 1;
outputData[2] = 0;
outputData[3] = 1;
result = ydci.YdciRlyOutput(boardId, outputData, 0, 4);
}
// RY4の出力状態
{
const outputStatus = Buffer.alloc(1);
const outputNo = 3;
result = ydci.YdciRlyOutputStatus(boardId, outputStatus, outputNo, 1);
if (result === YDCI_RESULT_SUCCESS) {
console.log(`RY${outputNo + 1}: ${outputStatus[0]}`);
}
}
// RY1-4の出力状態
{
const outputStatus = Buffer.alloc(4);
result = ydci.YdciRlyOutputStatus(boardId, outputStatus, 0, 4);
if (result === YDCI_RESULT_SUCCESS) {
outputStatus.forEach((v, i) => {
console.log(`RY${i + 1}: ${v}`);
});
}
}
// ボードをクローズ
result = ydci.YdciClose(boardId);