入口一覧と各インタフェース
入口の一覧は以下のとおりです。
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); // 実時間処理モード