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']],
'YdciDioOutput': ['int32', ['uint16', 'uint8 *', 'uint16', 'uint16']],
'YdciDioOutputStatus': ['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, 'DIO-8/8B-UBT', boardIdPtr, YDCI_OPEN_NORMAL);
if (result !== YDCI_RESULT_SUCCESS) {
console.log('オープンできません');
process.exit(1);
}
const boardId = ref.deref(boardIdPtr);
// IN2の入力
{
const inputData = Buffer.alloc(1);
const inputNo = 2;
result = ydci.YdciDioInput(boardId, inputData, inputNo, 1);
if (result === YDCI_RESULT_SUCCESS) {
console.log(`IN${inputNo}: ${inputData[0]}`);
}
}
// IN0-7の入力
{
const inputData = Buffer.alloc(8);
result = ydci.YdciDioInput(boardId, inputData, 0, 8);
if (result === YDCI_RESULT_SUCCESS) {
inputData.forEach((v, i) => {
console.log(`IN${i}: ${v}`);
});
}
}
// OUT3の出力
{
const outputData = Buffer.alloc(1);
outputData[0] = 1;
result = ydci.YdciDioOutput(boardId, outputData, 3, 1);
}
// OUT0-7の出力
{
const outputData = Buffer.alloc(8);
outputData[0] = 1;
outputData[1] = 0;
outputData[2] = 1;
outputData[3] = 0;
outputData[4] = 1;
outputData[5] = 0;
outputData[6] = 0;
outputData[7] = 1;
result = ydci.YdciDioOutput(boardId, outputData, 0, 8);
}
// OUT4の出力状態
{
const outputStatus = Buffer.alloc(1);
const outputNo = 4;
result = ydci.YdciDioOutputStatus(boardId, outputStatus, outputNo, 1);
if (result === YDCI_RESULT_SUCCESS) {
console.log(`OUT${outputNo}: ${outputStatus[0]}`);
}
}
// OUT0-7の出力状態
{
const outputStatus = Buffer.alloc(8);
result = ydci.YdciDioOutputStatus(boardId, outputStatus, 0, 8);
if (result === YDCI_RESULT_SUCCESS) {
outputStatus.forEach((v, i) => {
console.log(`OUT${i}: ${v}`);
});
}
}
// ボードをクローズ
result = ydci.YdciClose(boardId);