入口一覧と各インタフェース

入口の一覧は以下のとおりです。
SerialPort_InitCtrlBlock シリアルポート制御ブロックの初期化を行う
SerialPort_TermCtrlBlock シリアルポート制御ブロックの後始末を行う
SerialPort_GenerateOneShot 1ショットのパルスを発生させる
SerialPort_SetPWMPwRate PWMでのパルス幅を設定する
SerialPort_SetData 指定モジュールにデータを設定する
SerialPort_GetTakenData 取り込んだデータを返す
SerialPort_ExecRealtime 実時間処理を行う
SerialPort_GetTime 現在時刻を返す

入口はすべて stdcall にしてありますので、Delphi 以外の言語からも呼び出せます。
各ルーチンのインタフェースは以下のとおりです。

// シリアルポート制御ブロックの初期化を行う
//   pSPCB     : TPSerialPort_CtrlBlock  シリアルポート制御ブロック
//   MdlAcptLen: Double                  モジュール受付最小待時間(単位:m秒)
//   NumOfTBs  : Integer                 取り込むビット数
//   PWMTrm    : Integer                 PWM周期(単位:m秒)
procedure SerialPort_InitCtrlBlock(pSPCB: TPSerialPort_CtrlBlock; MdlAcptLen: Double; NumOfTBs, PWMTrm: Integer);


// シリアルポート制御ブロックの後始末を行う
//   pSPCB: TPSerialPort_CtrlBlock  シリアルポート制御ブロック
procedure SerialPort_TermCtrlBlock(pSPCB: TPSerialPort_CtrlBlock);


// 1ショットのパルスを発生させる
//   pSPCB: TPSerialPort_CtrlBlock  シリアルポート制御ブロック
//   MdlNo: Integer                 モジュール番号
//   SubNo: Integer                 対象サブ番号
//   Width: Integer                 パルス幅(単位:m秒)
procedure SerialPort_GenerateOneShot(pSPCB: TPSerialPort_CtrlBlock; MdlNo, SubNo, Width: Integer);


// PWMでのパルス幅を設定する
//   pSPCB : TPSerialPort_CtrlBlock  シリアルポート制御ブロック
//   MdlNo : Integer                 モジュール番号
//   SubNo : Integer                 対象サブ番号
//   PwRate: Integer                 印加率(単位:1/1000000)
procedure SerialPort_SetPWMPwRate(pSPCB: TPSerialPort_CtrlBlock; MdlNo, SubNo, PwRate: Integer);


// 指定モジュールにデータを設定する
//   pSPCB: TPSerialPort_CtrlBlock  シリアルポート制御ブロック
//   MdlNo: Integer                 モジュール番号
//   Data : Integer                 設定するデータ
procedure SerialPort_SetData(pSPCB: TPSerialPort_CtrlBlock; MdlNo, Data: Integer);


// 取り込んだデータを返す
//   pSPCB : TPSerialPort_CtrlBlock  シリアルポート制御ブロック
//   戻り値: Integer                 最後に取り込んだデータ
function SerialPort_GetTakenData(pSPCB: TPSerialPort_CtrlBlock): Integer;


// 実時間処理を行う
//   pSPCB: TPSerialPort_CtrlBlock  シリアルポート制御ブロック
procedure SerialPort_ExecRealtime(pSPCB: TPSerialPort_CtrlBlock);


// 現在時刻を返す
//   戻り値: 現在時刻(単位:m秒)
function SerialPort_GetTime: Integer;


ただし、TSerialPort_CtrlBlock は、以下の構造体の型名です。

type
  TSerialPort_CtrlBlock = record                          // シリアルポート制御ブロック型
    FileHandle       : THandle                           ;  // ファイル・ハンドル
    CntInMdlAccept   : Integer                           ;  // モジュール受付最小待時間に実行できる空ループの回数
    DataTbl          : array[0..7] of Integer            ;  // 設定したデータ・テーブル
    NumOfTakingBits  : Integer                           ;  // 取り込むビット数
    NonSetShiftsCount: Integer                           ;  // データ設定を伴わない連続シフト回数
    LastTakingBitNo  : Integer                           ;  // データの取込みビット位置
    TakenData        : Integer                           ;  // 取り込んだデータ
    RealtimeInfoTbl  : array[0..7, 0..7] of TRealtimeInfo;  // 実時間処理情報テーブル
    PWMTerm          : Integer                           ;  // PWMの周期(単位:m秒)
    PrevCtrlTime     : Integer                           ;  // PWMの前回の制御時刻(単位:m秒)
  end;
  TPSerialPort_CtrlBlock = ^TSerialPort_CtrlBlock;

type
  TRealtimeInfo = record      // 実時間処理情報
    Mode      : TRealtimeMode;  // モード
    PulseWidth: Integer      ;  // パルス幅(単位:m秒)
    InvertTime: Integer      ;  // 反転時刻(単位:m秒)
  end;

type
  TRealtimeMode = (RealtimeNop, RealtimeOneShot, RealtimePWM);  // 実時間処理モード