UDPTransmitter
FRONT PAGE

コレは何?/What is this?

UDPで変数値を別端末に送るクラス。


メンバ関数と定義一覧

            // コンストラクタ (関数オーバーロード: 宛先のみ指定する場合)
            // IPaddress_dest : 宛先IPアドレス, PortNum_dest : 宛先Port番号
            // TypeOfVar : 送信する変数の型(ヘッダの定義を参照せよ), NumOfVar : 送信する変数の数
            UDPTransmitter(const char* IPaddress, const unsigned short PortNum, VarType TypeOfVar, unsigned int NumOfVar);
            
            // コンストラクタ (関数オーバーロード: 発信元を指定する場合)
            // IPaddress_dept : 発信元IPアドレス, PortNum_dept : 発信元Port番号
            // IPaddress_dest : 宛先IPアドレス, PortNum_dest : 宛先Port番号
            // TypeOfVar : 送信する変数の型, NumOfVar : 送信する変数の数
            UDPTransmitter(const char* IPaddress_dept, const unsigned short PortNum_dept,
                const char* IPaddress_dest, const unsigned short PortNum_dest, VarType TypeOfVar, unsigned int NumOfVar);
           
            ~UDPTransmitter();    // デストラクタ
            void SetNumOfVar(unsigned int NumOfVar);    // 送信する変数の数を再設定する関数  注意:コンストラクタのNumOfVarを超えてはならない!
           
            // オーバーロードここから (そのうちテンプレートで書きなおす予定)
            // charデータを送信する関数
            // Data : 送信データ, Length : 送信データのバイト数
            void Transmit(const char* Data, unsigned int Length);
            
            // int16_tデータを送信する関数 Data : 送信データ
            volatile bool Transmit(int16_t* Data);
            
            // int32_tデータを送信する関数 Data : 送信データ
            volatile bool Transmit(int32_t* Data);
            
            // uint16_tデータを送信する関数 Data : 送信データ
            volatile bool Transmit(uint16_t* Data);
            
            // uint32_tデータを送信する関数 Data : 送信データ
            volatile bool Transmit(uint32_t* Data);
            
            // doubleデータを送信する関数 Data : 送信データ
            volatile bool Transmit(double* Data);
            // オーバーロードここまで
            
            // 送信データの型の設定用定義
            enum VarType {
                UDP_INT16_T,    // int16_t型
                UDP_INT32_T,    // int32_t型
                UDP_UINT16_T,    // uint16_t型
                UDP_UINT32_T,    // uint32_t型
                UDP_DOUBLE        // double型
            };

使用例

                #include "UDPTransmitter.hh"

     1 :	void ControlFunctions::ControlFunction1(ControlFunctions* pCF){
     2 :	    // 制御用周期実行関数1
     3 :	    
     4 :	    // 制御用定数設定
     5 :	    const double Ts = ConstParams::SAMPLING_TIME[0]*1e-9;    // [s]        制御周期
     6 :	    
     7 :	    // 制御用変数宣言
     8 :	    static double u[2]    = {3.141592};    // 送信する値
     9 :	    
    10 :	    // 制御器等々
    11 :	    static UDPTransmitter* UDP1;
    12 :	    
    13 :	    if(pCF->CmdFlag==CTRL_INIT){
    14 :	        // 初期化モード (ここは制御開始時に1度だけ呼び出される(非実時間空間なので重い処理もOK))
    15 :	        UDP1 = new UDPTransmitter("192.168.0.39", 5121, UDPTransmitter::UDP_DOUBLE, 2);    // UDP送信器の生成
    16 :	    }
    17 :	    if(pCF->CmdFlag==CTRL_LOOP){
    18 :	        // 周期モード (ここは制御周期 SAMPLING_TIME[0] 毎に呼び出される(実時間空間なので処理は制御周期内に収めること))
    19 :	        pCF->count++;        // ループカウンタを進める
    20 :	        t=pCF->count*Ts;    // 時刻の計算
    21 :	        
    22 :	        // 制御ここから
    23 :	        pCF->pIF->GetTorque(TorqueRes);        // [Nm] トルク応答値の取得
    24 :	        pCF->pIF->GetPosition(PositionRes);    // [rad] 位置応答値の取得
    25 :	        
    26 :	        // ここにやりたい制御を書くがよい!!
    27 :	        UDP1->Transmit(u);        // UDP送信
    28 :	        
    29 :	        pCF->pIF->SetCurrent(CurrentRef);    // [A] 電流指令値の出力
    30 :	        // 制御ここまで
    31 :	        
    32 :	        // 任意変数値表示用
    33 :	        pCF->IndicVars[0] = 0;    // 表示変数
    34 :	        pCF->IndicVars[1] = 0;    // 表示変数
    35 :	        pCF->IndicVars[2] = 0;    // 表示変数
    36 :	        pCF->IndicVars[3] = 0;    // 表示変数
    37 :	        pCF->IndicVars[4] = 0;    // 表示変数
    38 :	        pCF->IndicVars[5] = 0;    // 表示変数
    39 :	        pCF->IndicVars[6] = 0;    // 表示変数
    40 :	        pCF->IndicVars[7] = 0;    // 表示変数
    41 :	        
    42 :	        // 任意変数プロット
    43 :	        pCF->PlotVars[0] = 0;
    44 :	        pCF->PlotVars[1] = 0;
    45 :	        
    46 :	        // データの保存
    47 :	        pCF->Data[0] = t;    // [s]    時刻の保存
    48 :	        pCF->Data[1] = 0;    // 保存変数
    49 :	        pCF->Data[2] = 0;    // 保存変数
    50 :	        pCF->Data[3] = 0;    // 保存変数
    51 :	        pCF->ExpData->PutData(pCF->Data,ConstParams::DATA_NUM);    // データ格納
    52 :	    }
    53 :	    if(pCF->CmdFlag==CTRL_EXIT){
    54 :	        // 終了処理モード (ここは制御終了時に1度だけ呼び出される(非実時間空間なので重い処理もOK))
    55 :	        delete UDP1;        // UDP送信器の破棄
    56 :	        UDP1 = NULL;
    57 :	    }
    58 :	}




- 536 -

研究室の横の倉庫 - Side Warehouse of Laboratory
Copyright(C), Side Warehouse, All rights reserved.