//============================================== #ifndef GidDIOEH #define GidDIOEH //============================================== #include "giddio.h" //#include "giddiotx.h" #include #include //============================================== /* Gid-DIO 拡張インターフェース 32bit BCB++ (C)Mathematical Assist Design Lab. (C)数理設計研究所 Hal.T 2000/4/5 マルチスレッドでデータ転送し、指定以外の入力パターンで即座に停止する イベントは同じ名の物をあっちこっちで開いて使う "GidDioTx" static int TFlag 送信スレッド、受信スレッドでシンクロさせるためのフラグ  時間的にクリチカルな対象を制御するために、スレッドの優先度をプロセス内で 最高にしている。  また、このような用途では、このスレッドを所持するプロセスも優先度を上げて起動 すべきだろう。 */ //============================================== class GidDioTx; class GidDioRx; typedef unsigned char UC; //============================================== class GidDIOE : public GidDIO { public: //Data TEvent *TxEvent; UC *tbuf; //送信ストリームのバッファ UC *abuf; //送信ストリームのバッファが使用中に追加するデータバッファ GidDioTx *gtx; GidDioRx *grx; //Code GidDIOE(int Port, enum RSSPEED speed, enum DIOMODE mode, int DefaultData = 0x00); ~GidDIOE() { delete gtx; delete grx; } void InFlush(void) { rs->Flush(); } void PutDataAll(UC *d, int n); //ボチボチべた送り void Abort(void); //強制停止 //------------------------------------------ /*切れ目無くデータ送信しながら、入力を検査マスクでANDしたものを 指定データと比較、入力状態が異なると送信を強制停止する PutDataForRxMask() 受信データ and mask がrdと異なると送信しない、送信していれば停止する 停止した状態では最終的にdefaultdataが設定される すでに送信中のものがあるときには待たされる GetAbortStat() 送信中の強制停止状態を返す true=強制停止  送信開始できなければfalseのまま bool PutDataStat(void); 送信中ならtrueを返事する  */ UC PutDataForRxMask(UC *d, int n, UC rd, UC mask=0xff); bool GetAbortStat(void); bool PutDataStat(void); }; //============================================== //NC制御用にマルチスレッドでデータ転送する //============================================== class GidDioTx : public TThread { private: protected: void __fastcall Execute(); public: //Data int txbufsize; //外部から規定される UC *txbuf; //外部から規定される int atxbufsize; //外部から規定される追加データ UC *atxbuf; //外部から規定される追加データ TEvent *TxEvent; GidDIOE *giddio; //送信すべき相手先 //Code __fastcall GidDioTx(bool CreateSuspended, GidDIOE *p); bool GetTFlag(void); }; //============================================== class GidDioRx : public TThread { private: protected: void __fastcall Execute(); public: //Data bool AbortStat; //データ送信を強制停止させるとこれがtrue TEvent *TxEvent; GidDIOE *giddio; //受信相手先 UC rd, rm; //比較データとマスク //Code __fastcall GidDioRx(bool CreateSuspended, GidDIOE *p); void __fastcall Abort(); }; //============================================== #endif