/* 園芸-A10:【温度監視ファン制御プログラム】 */ /* 1.ON/OFF制御にヒステリシスを考慮している */ /* 2.ヒステリシス幅を1.0℃にしている */ /* 3.連続操作時間禁止制御は簡単仕様 */ /* 履歴 */ /* v1.00 2011/11/11 : リリース */ /* 設計 */ /* ai001(状態[計測値])= 現在温度(℃) */ /* ai001(実数属性1) = 目標温度(℃) */ /* ai001(整数属性1) = 連続操作時間 */ /* do001(操作) = リレー等 */ #include #define L (0) #define H (1) main( argc, argv ) int argc; char *argv[]; { int objid_ai001; int objid_do001; int hl_level; int dout_delay_sec; double ondo, sa; double mokuhyou_ondo; /* KARCRIX初期設定 */ kcxinit( argc, argv ); /* オブジェクトオープン */ objid_ai001 = kcxobj_open( "ai001" ); /* 各種情報 */ objid_do001 = kcxobj_open( "do001" ); /* 操作出力 */ /* 各状態の初期化 */ hl_level = L; /* レベルはLOWから */ kcxobj_sndistat_tokcx( objid_do001, 0/*OFF*/ ); /* 操作出力はOFF */ sleep(1); /* 永久ループ */ for(;;){ sleep(1); /*【現在温度,目標温度,連続操作時間の取得】*/ /* 1. 現在温度は、S1ドライバによって書き込まれたものを取得 */ /* 2. 目標温度は、日照連動散水制御によって書き込まれたものを取得 */ /* 3. 連続操作時間は、監視画面等によって書き込まれたものを取得 */ kcxobj_stat_frd ( objid_ai001, &ondo ); kcxobj_atbut_frd( objid_ai001, (1), &mokuhyou_ondo ); switch( hl_level ){ /*(ヒステリシス動作処理)*/ case L: /*前の状態がLの時*/ sa = ondo - ( mokuhyou_ondo + 0.0 ); if( sa > 0 ){ kcxobj_sndistat_tokcx( objid_do001, 1/*ON*/ ); /*(ON応答未確認)*/ hl_level = H; /*連続操作禁止時間取得*/ kcxobj_atbut_ird( objid_ai001, (1), &dout_delay_sec ); sleep( dout_delay_sec ); /*連続操作時間待*/ } break; case H: /*前の状態がHの時*/ sa = ondo - ( mokuhyou_ondo - 1.0 ); /*ヒステリシス幅1.0℃*/ if( sa < 0 ){ kcxobj_sndistat_tokcx( objid_do001, 0/*OFF*/ ); /*(OFF応答未確認)*/ hl_level = L; /*連続操作禁止時間取得*/ kcxobj_atbut_ird( objid_ai001, (1), &dout_delay_sec ); sleep( dout_delay_sec ); /*連続操作時間待*/ } break; } } } /* FILE END */