コスモリサーチの凄腕エンジニアたちが日々、難題と格闘した記録
Copyright Cosmo Research Corp.

直流安定化電源(TEXIO PDS-Aシリーズ)の電源OFF/ONプログラムを作る

前提

提供されているドライバのAPI調査

  • IF-70GUのドライバのzipファイルが公開されているので中身を眺めてみるが、どうやら、GUIのサンプルしか入っておらず、自作プログラムに組み込むのが面倒くさそう。
  • 一応、上記のドライバをインストールするとC:\Windows\System32\IF_60.dllがインストールされる模様。

なので、IF_60.dllの中にあるAPIコマンドラインから呼べるようにすれば良い。
dll内のAPIpexportsを使えば、以下のように抜き出すことができる。

# `.def`ファイルを作成
pexports IF_60.dll > IF_60.def
# gcc用のライブラリファイルを作成(`dlltool`はmsys2のものを使った)
dlltool IF_60.dll -d IF_60.def -l libIF_60.a

これで、あとはgcc実行時に-L. -lif_60としてdllとリンクすれば良い。

電源ONするサンプル

IF70_on.cとして以下を作成した。(OFFしたいときはOUTPUT 0とすれば良い) コンパイルしたIF70_on.exeを実行すれば電源ONできる!捗る!

#include <windows.h>
#include <tchar.h>

#include <stdio.h>
#include "IF70.h"

#define ADDR (1)

/* msys2でのコンパイルの方法

事前に以下の2つを実行して必要なものをインストールしておく
(コンパイルするPCでは後述の.dllファイル以外は不要)
   PSA_Dr_API310\API\setup64.exe
   PSA_Dr_API310\Driver\Setup64.exe

以下の.dllファイルから、ライブラリファイルを作る
C:\Windows\System32\IF_60.dll

ここからpexportsのWindowsバイナリをダウンロード
https://sourceforge.net/projects/mingw/files/MinGW/Extension/pexports/
以下のコマンドで、.defファイルを作る
   pexports IF_60.dll >IF_60.def

以下コマンドでライブラリファイルを作る
   dlltool IF_60.dll -d IF_60.def -l libIF_60.a

以下のコマンドで実行ファイルを作る
   gcc -o IF70_on.exe IF70_on.c -L. -lif_60
*/

int main(int argc, char *argv[]) {

    int ret;

    // addrを引数に取るが、何を指定するのか不明
    ret = USB488_DeviceOpen(ADDR);
    if (ret <= 0) {
        printf("USB488_DeviceOpen() Error!\n");
        return -1;
    }

    ret = USB488_Send(ADDR, "OUTPUT 1\n");
    if (ret <= 0) {
        printf("USB488_Send() Error!\n");
        return -1;
    }

    ret = USB488_Send(ADDR, "GTL\n");
    if (ret <= 0) {
        printf("USB488_Send() Error!\n");
        return -1;
    }

    USB488_DeviceClose(ADDR);

    return 0;
}