# UECSノード開発用ミドルウェア 使用方法 その５

## UECSsetCCM 関数を使ったCCMの登録方法

CCM（UECSの通信文）はUECSsetCCM関数で登録する．

UECSsetCCM(boolean sender, int num, char* name, char* type, char* unit, unsigned short priority, unsigned char decimal, signed char ccmlevel)

引数 | 説明 | 備考
--- | --- | ---
sender | true: 送信用のCCM false：受信用のCCM として登録 |
num | 他のUECSsetCCM関数で使用しない任意の正数．U_MAX_CCMで指定した値未満の数にする． 登録したCCMの値を参照する時には個々で登録した数値を利用する． |
name | const　PROGMEM　Char[]で指定した配列のポインターを記す．CCMの名前とする．人間が判断するために利用するため， CCM通信とは直接の関係はないが，p1.htmlのページで表示される． |
type | const　PROGMEM　Char[]で指定した配列のポインターを記す．CCMのtype属性とする．type属性についてはUECS通信実用規約を 参照のこと． |
unit | const　PROGMEM　Char[]で指定した配列のポインターを記す．UECSの通信の内，UDP16529ポートをりようしたCCMSCANの応答 時に表示されるほか，p1．htmlにブラウザでアクセスしたときにも表示される． |
priority | priority属性についてはUECS通信実用規約を参照のこと．senderがtrueの時はこのpriorityでCCMが送信される．falseの時は30にすることを推奨． |
decimal | CCMの値が小数点以下何桁の情報であるかを表示．受信時はそれ以下の桁まであっても自動的にトリミングされる． |
ccmlevel | 送受信レベルについては通信実用規約を参照のこと． -1から9の値を登録する．-1は登録前の状態を表している． 0: A_1S_0 1: A_1S_1 2: A_10S_0 3: A_10S_1 4: A_1M_0 5: A_1M_1 6: S_1S_0 7: S_1M_0 8: B_0 9: B_1 上記の内，８，９は本ミドルウェアでは未対応である（予約番号） Senderがtrueの場合 その他は正規の送信スケジュールで送信する． 末尾が_1となっているものは値変化時に送信することになっているが，本ミドルウェアの送受信マネージャーでは対応していない．UserEvery1Min関数内で ユーザーがコーディングして対応すること． Senderがfalseの場合 一定間隔以上の受信が途絶えると，正規に受信がされていないものと判断される． |

## UECSsetCCM関数で登録したCCMの使い方

| こんな場合 | 説明
--- | --- | ---
送信側に登録したCCMの場合 | 通信文に値をセットする | もしUECSsetCCM関数で1で登録し，23.5をセットする場合. UserEvery1Min関数内で U_ccmList[1].value　=　235; と記述する．ただしUECSsetCCM関数で登録する際にdecimal（第7引数）を１にセットしておく必要がある．
定期送信が登録されているが， 送信を強制的にやめる． | UserEvery1Min関数内で U_ccmList[1].flagStimeRfirst　=　false; と記述する．UserEvery1Min 関数終了後に送受信マネージャによって送信が行われる．
受信側に登録したCCMの場合 | 通信文が定期的に受信できているかを 確認する． | UECSsetCCM関数で1で登録してあるばあい． UserEvery1Min関数内で， boolean valid =U_ccmList[1].validity; と記述すると，時間内にCCMが受信できているかを確認できる．受信できていればtrue，できていなければ falseが代入される 有効時間はUECSsetCCM 関数で設定したccmlevelによってことなる A_1S_0 ，A_1S_1，S_1S_0が 3秒 A_10S_0，A_10S_1が 10秒 A_1M_0，A1M_Aが 1分
受信した最新の値を得る | UserEvery1Min関数内で， signed long val = U_ccmList[1].value; で値が取得される． valが235であった場合．UECSseｔCCM関数でdecimalを２にセットしてあった場合の値は 2.35となる．

## ccmList 配列を構成するUECSCCM構造体に関して

UECSsetCCM関数で登録すると，ccmList配列に登録される．ccmList配列はUECSCCM構造体の配列．

UECSCCM構造体の メンバー | 変数の型 | 説明 | 備考
--- | --- | --- | ---
sender | boolean | 送信側登録:　true 受信側登録:　false |
name | const char * | 登録したCCMの名称（制御には無関与）を示す文字列配列のポインター | 文字列は const　char　PROGMEM = "XXXXXXXXXX"; のようにPROGMEM指定が必要
type | const char * | UECSの通信規約のtype属性を示す文字列配列のポインター
unit | const char * | 単位を示す文字列配列のポインター
decimal | unsigned char | 小数点以下の桁数 | valueが456でdecimalが2の時は送信マネージャーは 4.56で値を送信する．
ccmLevel | signed char | UECSの通信規約で定められた通信レベル． |
validmillis | singed long | 送信側登録：未使用 受信側登録：UECSの通信規約で定められた通信レベルのインターバルを格納． 1秒間隔で送信されるものを登録した場合は3000が 10秒間隔の場合は30000が 1分間隔の場合は180000 が格納される． |
attribute | signed short[4] | attribute[0] はCCMのroom attribute[1]はregion attribute[2]はorder attribute[3]はpriorityに対応． | 送信側登録：baseAttribute[0]〜[2]，attribute[3]を使ってCCMを作成する． 受信側登録：baseAttributeにはノードに設定されたroom，region，orderの属性値が入り， attributeには，実際に受信したCCMのうち，登録したCCMにとって優先順位の高いCCM の属性値が入る． この部分は複雑なので詳細は通信実用規約を参照のこと
baseAttribute | signed short[3] | baseAttribute[0] はCCMのroom baseAttribute[1]はregion baseAttribute[2]はorder
value | signed long | 送信側登録：　送信値（この値とdecimal値で実送信値は決まる） 受信側登録：　受信値（この値とdecimal値で実受信値は決まる） |
validity | boolean | 送信側登録：　未使用 受信側登録：　登録したCCMが時間内に取得できているかを示す |
recmillis | signed long | 送信側登録：　未使用 受信側登録：　最新の受信時間 |
address | IPAddress | 送信側登録：　送信アドレス（初期値は255.255．255.255） 受信側登録：　CCM受信元のアドレス． |
flagStimeRfirst | boolean | 送信側登録：　trueにすると，CCMが送信される． 受信側登録：　始めて受信するとtrueにセットされる． |

最初へ 前のページへ 次のページへ