UBシリーズ デジタル入出力ボード Node.jsサンプルプログラム

ソフトウェアマニュアルにNode.jsのサンプルコードは記載しておりません。また、ソフトウェアパックにもNode.jsのサンプルプログラムは含まれておりませんので、Node.jsで使用される場合は以下を参考にしてください。

必要なパッケージ

node-ffi-napi
ref-napi

(参考)弊社で動作確認したバージョン

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);

関連情報

製品情報
ソフトウェアマニュアル