123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416 |
- #include "MB_RTU_task.h"
- #include "All_define.h"
- #include "modbus.h"
- #include <SIM_EEPROM.h>
- #include "key_operate.h"
- #include "protocol.h"
- static uint8_t Reset_CNT = 0;
- void eMBFuncReadHoldingRegister(UART_msg *ptrmsg)
- {
- UART_msg msg;
- u8 ii= 0;
- u8 i =0;
- u8 num = ptrmsg->data[5];
- msg.len = 5 + num;
- msg.data[ii++] = ptrmsg->data[0];
- msg.data[ii++] = 3;
- msg.data[ii++] = 2 * num;
- for(i = 0;i < num;i++)
- {
- switch(ptrmsg->data[3]) {
- case 1:
- {
- msg.data[ii++] = 0;
- uint8_t relay = 0;
- if((dis_page_param.face_plate_param.Air_condition_Relay & 0x01) != 0 \
- ||(dis_page_param.face_plate_param.Air_condition_Relay & 0x02) == 0)
- {
- if(struct_realy.relay_ck == 1)
- {
- relay = 1;
- }
- else
- {
- relay = 0;
- }
- }
- else if((dis_page_param.face_plate_param.Air_condition_Relay & 0x03) != 0 )
- {
- if(struct_realy.relay_hk == 1)
- {
- relay = 1;
- }
- else
- {
- relay = 0;
- }
- }
- msg.data[ii++] = (dis_page_param.face_plate_param.Air_condition_switch & 0x0f) +\
- ( (relay <<4) & 0xf0 ) ;
- }
- break;
- case 2:
- msg.data[ii++] = 0;
- msg.data[ii++] = dis_page_param.face_plate_param.Air_condition_mode;
- break;
- case 3:
- {
- uint8_t speed = 0;
- uint8_t low = 0;
- uint8_t hight = 0;
- if(struct_realy.speed_type.fs1 == 1)
- {
- speed = 1;
- }
- else if(struct_realy.speed_type.fs2 == 1)
- {
- speed = 1;
- }
- else if(struct_realy.speed_type.fs3 == 1)
- {
- speed = 1;
- }
- else
- {
- speed = 0;
- }
- hight = (u8)(dis_page_param.face_plate_param.Air_wind_speed >>8);
- low = (u8) ( ( (dis_page_param.face_plate_param.Air_wind_speed >>0) &0x0f) + \
- ((speed << 4) &0xf0 ) );
- if( ( dis_page_param.face_plate_param.Air_wind_speed &0x0100 )!= 0)
- {
- if(speed == 0)
- {
- low = 0x00;
- }
- else if (speed == 1)
- {
- low = 0x10;
- }
- }
- msg.data[ii++] = hight;
- msg.data[ii++] = low;
- }
- break;
- case 4:
- msg.data[ii++] = 0;
- msg.data[ii++] = dis_page_param.face_plate_param.Air_set_temp;
- break;
- case 5:
- msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Air_relay_switch >>8);
- msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Air_relay_switch >>0);
- break;
- case 6:
- {
- uint8_t relay = 0;
- if((dis_page_param.face_plate_param.Floor_heating_Relay & 0x01) != 0 )
- {
- if(struct_realy.relay_hk == 1)
- {
- relay = 1;
- }
- else
- {
- relay = 0;
- }
- }
- else if((dis_page_param.face_plate_param.Floor_heating_Relay & 0x02) != 0 )
- {
- if(struct_realy.relay_ck == 1)
- {
- relay = 1;
- }
- else
- {
- relay = 0;
- }
- }
- msg.data[ii++] = 0;
- msg.data[ii++] = (dis_page_param.face_plate_param.Floor_heating_switch & 0x0f) +\
- ( (relay <<4) & 0xf0 ) ;
- }
- break;
- case 7:
- msg.data[ii++] = 0;
- msg.data[ii++] = dis_page_param.face_plate_param.Floor_heating_set_temp;
- break;
- case 8:
- msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Floor_relay_switch >>8);
- msg.data[ii++] = (u8) (dis_page_param.face_plate_param.Floor_relay_switch >>0);
- break;
- case 9:
- msg.data[ii++] = 0;
- msg.data[ii++] = dis_page_param.face_plate_param.Fresh_air_switch;
- break;
- case 11:
- {
- uint8_t speed = 0;
- if(dis_page_param.face_plate_param.Fresh_air_Relay == 0x0001)
- {
- if(struct_realy.speed_type.fs1 == 1)
- {
- speed = 1;
- }
- else if(struct_realy.speed_type.fs2 == 1)
- {
- speed = 1;
- }
- else if(struct_realy.speed_type.fs3 == 1)
- {
- speed = 1;
- }
- else
- {
- speed = 0;
- }
- }
- msg.data[ii++] = 0;
- msg.data[ii++] = (u8) ( ( (dis_page_param.face_plate_param.Fresh_air_speed >>0) &0x0f) + \
- ((speed << 4) &0xf0 ) );
- }
- break;
- case 12:
- msg.data[ii++] = 0;
- msg.data[ii++] = dis_page_param.face_plate_param.Compensates_temp;
- break;
- case 13:
- msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Real_time_Temp >>8);
- msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Real_time_Temp >>0);
- break;
- case 14:
- msg.data[ii++] = 0;
- msg.data[ii++] = dis_page_param.face_plate_param.Real_time_Humi;
- break;
- case 16:
- msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Air_condition_Relay >>8);
- msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Air_condition_Relay >>0);
- break;
- case 17:
- msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Floor_heating_Relay >>8);
- msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Floor_heating_Relay >>0);
- break;
- case 18:
- msg.data[ii++] = 0;
- msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Fresh_air_Relay >>0);
- break;
- case 19:
- msg.data[ii++] = 0;
- msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Ltemp_Protection_valve >>0);
- break;
- case 20:
- msg.data[ii++] = 0;
- msg.data[ii++] = dis_page_param.face_plate_param.Lock_screen;
- break;
- case 21:
- msg.data[ii++] = 0;
- msg.data[ii++] = dis_page_param.face_plate_param.Full_Half_Lock;
- break;
- case 22:
- msg.data[ii++] = 0;
- msg.data[ii++] = dis_page_param.face_plate_param.Data_send;
- break;
- case 23:
- msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Led_Brightness >>8);;
- msg.data[ii++] = (u8)(dis_page_param.face_plate_param.Led_Brightness >>0);
- break;
- case 25:
- msg.data[ii++] = 0;
- msg.data[ii++] = dis_page_param.face_plate_param.Sleep_time_addr;
- break;
- case 26:
- msg.data[ii++] = 0;
- msg.data[ii++] = dis_page_param.face_plate_param.Code_Version;
- break;
- case 100:
- msg.data[ii++] = (uint8_t)((dis_page_param.face_plate_param.Device_BaudRate >> 8) &0xff );
- msg.data[ii++] = (uint8_t)((dis_page_param.face_plate_param.Device_BaudRate >> 0) &0xff );
- break;
- case 101:
- msg.data[ii++] = (uint8_t)((dis_page_param.face_plate_param.TempHumi_UpdateMode >> 8) &0xff );
- msg.data[ii++] = (uint8_t)((dis_page_param.face_plate_param.TempHumi_UpdateMode >> 0) &0xff );
- break;
- case 102:
- msg.data[ii++] = 0;
- msg.data[ii++] = dis_page_param.face_plate_param.Open_device_mode;
- break;
- case 109:
- msg.data[ii++] = 0;
- msg.data[ii++] = dis_page_param.face_plate_param.Parm_SaveFlag;
- break;
- case 110:
- msg.data[ii++] = 0;
- msg.data[ii++] = dis_page_param.face_plate_param.Panel_Shield;
- break;
- case 111:
- msg.data[ii++] = 0;
- msg.data[ii++] = dis_page_param.face_plate_param.HTemp_Limit;
- break;
- case 112:
- msg.data[ii++] = 0;
- msg.data[ii++] = dis_page_param.face_plate_param.LTemp_Limit;
- break;
- case 0:
- msg.data[ii++] = 0;
- if(dis_page_param.face_plate_param.Reset_Flag == 1)
- {
- if(Reset_CNT > 0)
- {
- Reset_CNT--;
- }
- else
- {
- dis_page_param.face_plate_param.Reset_Flag = 0;
- }
- }
- msg.data[ii++] = dis_page_param.face_plate_param.Reset_Flag;
- break;
- default:
- msg.data[ii++] = 0;
- msg.data[ii++] = 0;
- break;
- }
- ptrmsg->data[3] += 1;
- }
- u16 CRCA;
- u8 CRCH;
- u8 CRCL;
- CRCA = GetCRC16(msg.data,ii);
- CRCH = CRCA>>8;
- CRCL = (u8)CRCA;
- msg.data[ii++] = CRCH;
- msg.data[ii++] = CRCL;
- msg.len = ii;
- memcpy(ptrmsg,&msg,sizeof(UART_msg));
- }
- void PullOutOf_SleepPage(void)
- {
- if(dis_page_num.Dis_air_Conditioning == dis_air_Conditioning_sleep)
- {
- dis_page_num.Dis_air_Conditioning = dis_air_Conditioning_open;
- }
- if(dis_page_num.Dis_floor_heating == dis_floor_heating_sleep)
- {
- dis_page_num.Dis_floor_heating = dis_floor_heating_open;
- }
- if(dis_page_num.Dis_fresh_air == dis_fresh_air_sleep)
- {
- dis_page_num.Dis_fresh_air = dis_fresh_air_open;
- }
- dis_page_param.advanced_setting_time = 0;
- dis_page_param.sleep_times = 0;
- }
- void Control_Save(uint8_t * Data_need_write)
- {
- printf("Parm_Save %d\r\n",Parm_Save);
- if(Parm_Save)
- {
- (*Data_need_write)++;
- }
- }
- uint8_t AirCondition_Sheiled_Set(void)
- {
- if(AirCondition_Sheiled == 0)
- {
- return 1;
- }
- else
- {
- return 0;
- }
- }
- uint8_t FloorHeating_Sheiled_Set(void)
- {
- if(FloorHeating_Sheiled == 0)
- {
- return 1;
- }
- else
- {
- return 0;
- }
- }
- uint8_t AirFresh_Sheiled_Set(void)
- {
- if(AirFresh_Sheiled == 0)
- {
- return 1;
- }
- else
- {
- return 0;
- }
- }
- uint8_t eMBFuncWriteHoldingRegister_do(uint8_t *data_H,uint8_t *data_L, uint16_t addr,uint8_t *Data_need_write)
- {
- uint8_t error_code = 0;
- switch(addr)
- {
- case 1:
- if(AirCondition_Sheiled_Set())
- {
- return 0;
- }
- if(*data_H == 0)
- {
- if(*data_L == 0x01)
- {
- dis_page_param.face_plate_param.Air_condition_switch = 1;
- dis_page_num.display_page = dis_air_Conditioning;
- dis_page_num.Dis_air_Conditioning = dis_air_Conditioning_open;
- Control_Save(Data_need_write);
- }
- else if (*data_L == 0x00)
- {
- dis_page_param.face_plate_param.Air_condition_switch = 0;
- dis_page_num.display_page = dis_air_Conditioning;
- dis_page_num.Dis_air_Conditioning = dis_air_Conditioning_close;
- Control_Save(Data_need_write);
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 2:
- if(AirCondition_Sheiled_Set())
- {
- return 0;
- }
- if(*data_H == 0)
- {
- if(dis_page_param.face_plate_param.Air_condition_switch == 1)
- {
- if(*data_L == 0 || *data_L == 1 || *data_L == 2 || *data_L == 3)
- {
- dis_page_num.display_page = dis_air_Conditioning;
- dis_page_param.face_plate_param.Air_condition_mode = *data_L ;
- Control_Save(Data_need_write);
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 3:
- if(AirCondition_Sheiled_Set())
- {
- return 0;
- }
- if(*data_H == 0)
- {
- if(dis_page_param.face_plate_param.Air_condition_switch == 1)
- {
- if(*data_L == 1 || *data_L == 2 || *data_L == 3)
- {
- dis_page_num.display_page = dis_air_Conditioning;
- dis_page_param.face_plate_param.Air_wind_speed = ((uint16_t)*data_H << 8)| ((uint16_t)*data_L <<0);
- Control_Save(Data_need_write);
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else if(*data_H == 1)
- {
- if(dis_page_param.face_plate_param.Air_condition_switch == 1)
- {
- if(*data_L == 0)
- {
- dis_page_num.display_page = dis_air_Conditioning;
- dis_page_param.face_plate_param.Air_wind_speed = 0x0100;
- Control_Save(Data_need_write);
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 4:
- if(AirCondition_Sheiled_Set())
- {
- return 0;
- }
- if(*data_H == 0)
- {
- if(dis_page_param.face_plate_param.Air_condition_switch == 1)
- {
- if(*data_L >= Air_set_temp_Down_limit && *data_L <= Air_set_temp_up_limit)
- {
- dis_page_num.display_page = dis_air_Conditioning;
- dis_page_param.face_plate_param.Air_set_temp = *data_L;
- Control_Save(Data_need_write);
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 5:
- {
- if(AirCondition_Sheiled_Set())
- {
- return 0;
- }
- if(dis_page_param.face_plate_param.Air_condition_switch == 1)
- {
- if((dis_page_param.face_plate_param.Air_condition_Relay &0xff00) == 0x0200)
- {
- if((dis_page_param.face_plate_param.Air_condition_Relay &0x00ff) == 0x0001)
- {
- if(*data_H == 0x01)
- {
- if(*data_L == 0x01 || *data_L == 0x00)
- {
- dis_page_param.face_plate_param.Air_relay_switch = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
- Control_Save(Data_need_write);
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else if((dis_page_param.face_plate_param.Air_condition_Relay &0x00ff) == 0x0002)
- {
- if(*data_H == 0x02)
- {
- if(*data_L == 0x01 || *data_L == 0x00)
- {
- dis_page_param.face_plate_param.Air_relay_switch = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
- Control_Save(Data_need_write);
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else if((dis_page_param.face_plate_param.Air_condition_Relay &0x00ff) == 0x0003)
- {
- if(*data_H == 0x03)
- {
- if(*data_L == 0x00 || *data_L == 0x01 || *data_L == 0x02 || *data_L == 0x03)
- {
- dis_page_param.face_plate_param.Air_relay_switch = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
- Control_Save(Data_need_write);
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- break;
- case 6:
- if(FloorHeating_Sheiled_Set())
- {
- return 0;
- }
- if(*data_H == 0)
- {
- if(*data_L == 0x01)
- {
- dis_page_param.face_plate_param.Floor_heating_switch = 1;
- dis_page_num.display_page = dis_floor_heating;
- dis_page_num.Dis_floor_heating = dis_floor_heating_open;
- Control_Save(Data_need_write);
- }
- else if (*data_L == 0x00)
- {
- dis_page_param.face_plate_param.Floor_heating_switch = 0;
- dis_page_num.display_page = dis_floor_heating;
- dis_page_num.Dis_floor_heating = dis_floor_heating_close;
- Control_Save(Data_need_write);
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 7:
- if(FloorHeating_Sheiled_Set())
- {
- return 0;
- }
- if(*data_H == 0)
- {
- if(dis_page_param.face_plate_param.Floor_heating_switch == 1)
- {
- if(*data_L >= Air_set_temp_Down_limit && *data_L <= Air_set_temp_up_limit)
- {
- dis_page_num.display_page = dis_floor_heating;
- dis_page_param.face_plate_param.Floor_heating_set_temp = *data_L;
- Control_Save(Data_need_write);
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 8:
- {
- if(FloorHeating_Sheiled_Set())
- {
- return 0;
- }
- if(dis_page_param.face_plate_param.Floor_heating_switch == 1)
- {
- if((dis_page_param.face_plate_param.Floor_heating_Relay &0xff00) == 0x0200)
- {
- if((dis_page_param.face_plate_param.Floor_heating_Relay &0x00ff) == 0x0001)
- {
- if(*data_H == 0x01)
- {
- if(*data_L == 0x01 || *data_L == 0x00)
- {
- dis_page_param.face_plate_param.Floor_relay_switch = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
- Control_Save(Data_need_write);
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else if((dis_page_param.face_plate_param.Floor_heating_Relay &0x00ff) == 0x0002)
- {
- if(*data_H == 0x02)
- {
- if(*data_L == 0x01 || *data_L == 0x00)
- {
- dis_page_param.face_plate_param.Floor_relay_switch = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
- Control_Save(Data_need_write);
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- break;
- case 9:
- if(AirFresh_Sheiled_Set())
- {
- return 0;
- }
- if(*data_H == 0)
- {
- if(*data_L == 0x01)
- {
- dis_page_param.face_plate_param.Fresh_air_switch = 1;
- dis_page_num.display_page = dis_fresh_air;
- dis_page_num.Dis_fresh_air = dis_fresh_air_open;
- Control_Save(Data_need_write);
- }
- else if (*data_L == 0x00)
- {
- dis_page_param.face_plate_param.Fresh_air_switch = 0;
- dis_page_num.display_page = dis_fresh_air;
- dis_page_num.Dis_fresh_air = dis_fresh_air_close;
- Control_Save(Data_need_write);
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 11:
- if(AirFresh_Sheiled_Set())
- {
- return 0;
- }
- if(*data_H == 0)
- {
- if(dis_page_param.face_plate_param.Fresh_air_switch == 1)
- {
- if(*data_L == 0x01 || *data_L == 0x02 ||*data_L == 0x03)
- {
- dis_page_param.face_plate_param.Fresh_air_speed = *data_L;
- dis_page_num.display_page = dis_fresh_air;
- Control_Save(Data_need_write);
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 12:
- if(*data_H == 0)
- {
- if((*data_L & 0xf0) == 0xf0)
- {
- if((*data_L & 0x0f) >= 0x07 && (*data_L & 0x0f) <=0x0F)
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Compensates_temp = *data_L;
- }
- else
- {
- error_code += 1;
- }
- }
- else if((*data_L & 0xf0) == 0x00)
- {
- if((*data_L & 0x0f) >= 0x00 && (*data_L & 0x0f) <=0x09)
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Compensates_temp = *data_L ;
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 16:
- {
- if(AirCondition_Sheiled_Set())
- {
- return 0;
- }
- if(*data_H == 0)
- {
- if(*data_L == 0)
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Air_condition_Relay = 0x0000;
- dis_page_param.face_plate_param.Air_relay_switch = 0x0000;
- }
- else
- {
- error_code += 1;
- }
- }
- else if(*data_H == 0x01 || *data_H == 0x02)
- {
- if(*data_L == 0x01)
- {
- if(dis_page_param.face_plate_param.Fresh_air_Relay == 0x0000)
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Air_condition_Relay = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
- dis_page_param.face_plate_param.Air_relay_switch &= 0xff00;
- dis_page_param.face_plate_param.Air_relay_switch |= ( (*data_L) <<8);
- }
- else
- {
- error_code += 1;
- }
- }
- else if(*data_L == 0x02 || *data_L == 0x03)
- {
- if(dis_page_param.face_plate_param.Fresh_air_Relay == 0x0000 && dis_page_param.face_plate_param.Floor_heating_Relay == 0x0000)
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Air_condition_Relay = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
- dis_page_param.face_plate_param.Air_relay_switch &= 0xff00;
- dis_page_param.face_plate_param.Air_relay_switch |= ( (*data_L) <<8);
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- break;
- case 17:
- if(FloorHeating_Sheiled_Set())
- {
- return 0;
- }
- if(*data_H == 0x00)
- {
- if(*data_L == 0)
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Floor_heating_Relay = 0x0000;
- dis_page_param.face_plate_param.Floor_relay_switch = 0x0000;
- }
- else
- {
- error_code += 1;
- }
- }
- else if(*data_H == 0x02 || *data_H == 0x01)
- {
- if(*data_L == 0x01)
- {
- if(dis_page_param.face_plate_param.Air_condition_Relay == 0x0000 || dis_page_param.face_plate_param.Air_condition_Relay == 0x0101 || \
- dis_page_param.face_plate_param.Air_condition_Relay == 0x0201)
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Floor_heating_Relay = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
- dis_page_param.face_plate_param.Floor_relay_switch &= 0xff00;
- dis_page_param.face_plate_param.Floor_relay_switch |= ( (*data_L) <<8);
- }
- else
- {
- error_code += 1;
- }
- }
- else if(*data_L == 0x02)
- {
- if(dis_page_param.face_plate_param.Air_condition_Relay == 0x0000)
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Floor_heating_Relay = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
- dis_page_param.face_plate_param.Floor_relay_switch &= 0xff00;
- dis_page_param.face_plate_param.Floor_relay_switch |= ( (*data_L) <<8);
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 18:
- if(AirFresh_Sheiled_Set())
- {
- return 0;
- }
- if(*data_H == 0x00)
- {
- if(*data_L == 0x00)
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Fresh_air_Relay = 0x0000;
- }
- else if(*data_L == 0x01)
- {
- if(dis_page_param.face_plate_param.Air_condition_Relay == 0x0000)
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Fresh_air_Relay = 0x0001;
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 19:
- if(*data_H == 0x00)
- {
- if((*data_L <= 0X05) || (*data_L == 0X0F))
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Ltemp_Protection_valve = *data_L;
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 20:
- if(*data_H == 0x00)
- {
- if((*data_L == 0X00) || (*data_L == 0X01))
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Lock_screen = *data_L;
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 21:
- if(*data_H == 0x00)
- {
- if((*data_L == 0X00) || (*data_L == 0X01))
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Full_Half_Lock = *data_L;
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 22:
- if(*data_H == 0x00)
- {
- if((*data_L == 0X00) || (*data_L == 0X01))
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Data_send = *data_L;
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 23:
- if(*data_H == 0x00 || *data_H == 0x01)
- {
- if( (*data_L >= 0x01) && (*data_L <= 0x06))
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Led_Brightness = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 25:
- if(*data_H == 0x00)
- {
- if(*data_L <= 0x05 || *data_L == 0x0f)
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Sleep_time_addr = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 100:
- {
- u16 baudrate_now = ((uint16_t)*data_H << 8)| ((uint16_t)*data_L <<0);
- const uint16_t baudrate[7] = {0x01e0,0x03c0,0x05a0,0x0780,0x0f00,0x15e0,0x0000};
- uint8_t i = 0;
- for( i = 0; i < 7; i++)
- {
- if(baudrate_now == baudrate[i])
- {
- break;
- }
- }
- if(i == 7)
- {
- error_code += 1;
- }
- else
- {
- if(baudrate_now != dis_page_param.face_plate_param.Device_BaudRate)
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Device_BaudRate = baudrate_now;
- xTaskNotify((TaskHandle_t )LEDTask_Handler,
- (uint32_t )Change_baud,
- (eNotifyAction )eSetBits);
- }
- }
- }
- break;
- case 101 :
- if(*data_H == 0x00)
- {
- if(*data_L == 0x00)
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.TempHumi_UpdateMode = 0x0000;
- }
- else
- {
- error_code += 1;
- }
- }
- else if(*data_H == 0x01 ||*data_H == 0x02 || *data_H == 0x03 )
- {
- if(*data_L >= 0x01 && *data_L <= 0x0C )
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.TempHumi_UpdateMode = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 102:
- if(*data_H == 0x00)
- {
- if(*data_L == 0x00 || *data_L == 0x01)
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Open_device_mode = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 109:
- if(*data_H == 0x00)
- {
- if(*data_L == 0x00 || *data_L == 0x01)
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Parm_SaveFlag = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 110:
- if(*data_H == 0x00)
- {
- if(*data_L <= 0x07 && (*data_L) != 0)
- {
- *Data_need_write = 1;
- dis_page_param.face_plate_param.Panel_Shield = ((uint16_t)*data_H) << 8 | ((uint16_t)*data_L) << 0;
- if(AirCondition_Sheiled == 0)
- {
- dis_page_param.face_plate_param.Air_condition_switch = 0;
- dis_page_num.Dis_air_Conditioning = dis_air_Conditioning_close;
- }
- if(FloorHeating_Sheiled == 0)
- {
- dis_page_param.face_plate_param.Floor_heating_switch = 0;
- dis_page_num.Dis_floor_heating = dis_floor_heating_close;
- }
- if(AirFresh_Sheiled == 0)
- {
- dis_page_param.face_plate_param.Fresh_air_switch = 0;
- dis_page_num.Dis_fresh_air = dis_fresh_air_close;
- }
- display_page_t *page;
- if(dis_page_num.display_page == dis_advanced_set || dis_page_num.display_page == dis_message_read)
- {
- page = &dis_page_param.Last_device_page_num;
- }
- else
- {
- page = &dis_page_num.display_page;
- }
- if((*page) == dis_air_Conditioning)
- {
- if(AirCondition_Sheiled == 0)
- {
- if(FloorHeating_Sheiled == 0)
- {
- (*page) = dis_fresh_air;
- }
- else
- {
- (*page) = dis_floor_heating;
- }
- }
- }
- if((*page) == dis_floor_heating)
- {
- if(FloorHeating_Sheiled == 0)
- {
- if(AirCondition_Sheiled == 0)
- {
- (*page) = dis_fresh_air;
- }
- else
- {
- (*page) = dis_air_Conditioning;
- }
- }
- }
- if((*page) == dis_fresh_air)
- {
- if(AirFresh_Sheiled == 0)
- {
- if(AirCondition_Sheiled == 0)
- {
- (*page) = dis_floor_heating;
- }
- else
- {
- (*page) = dis_air_Conditioning;
- }
- }
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 111:
- if(*data_H == 0x00)
- {
- if( (*data_L >= 10) && (*data_L <= 32) )
- {
- if(*data_L > dis_page_param.face_plate_param.LTemp_Limit)
- {
- dis_page_param.face_plate_param.HTemp_Limit = *data_L;
- *Data_need_write = 1;
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 112:
- if(*data_H == 0x00)
- {
- if( (*data_L >= 10) && (*data_L <= 32) )
- {
- if(*data_L < dis_page_param.face_plate_param.HTemp_Limit)
- {
- dis_page_param.face_plate_param.LTemp_Limit = *data_L;
- *Data_need_write = 1;
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- case 0:
- if(*data_H == 0x00)
- {
- if(*data_L == 0x01)
- {
- MemData_Reset();
- dis_page_param.face_plate_param.Reset_Flag = 1;
- Reset_CNT = 3;
- }
- else if(*data_L == 0x00)
- {
- dis_page_param.face_plate_param.Reset_Flag = 0;
- Reset_CNT = 0;
- }
- else
- {
- error_code += 1;
- }
- }
- else
- {
- error_code += 1;
- }
- break;
- default:
- break;
- }
- if(error_code != 0)
- {
- return 0;
- }
- else
- {
- return 1;
- }
- }
- void eMBFuncWriteHoldingRegister(UART_msg *ptrmsg)
- {
- uint16_t addr = (uint16_t)(ptrmsg->data[2] <<8) + (uint16_t)(ptrmsg->data[3]);
- u8 Data_need_write = 0;
- if(eMBFuncWriteHoldingRegister_do(&ptrmsg->data[4],&ptrmsg->data[5],addr,&Data_need_write) == 0)
- {
- ptrmsg->data[1] |= 0x80;
- }
- u16 CRCA;
- u8 CRCH;
- u8 CRCL;
- CRCA = GetCRC16(ptrmsg->data,ptrmsg->len-2);
- CRCH = CRCA>>8;
- CRCL = (u8)CRCA;
- ptrmsg->data[ptrmsg->len-2] = CRCH;
- ptrmsg->data[ptrmsg->len-1] = CRCL;
- if(Data_need_write >= 1)
- {
- xTaskNotify((TaskHandle_t )LEDTask_Handler,
- (uint32_t )Need_Write,
- (eNotifyAction )eSetBits);
- }
- xTaskNotify((TaskHandle_t )LEDTask_Handler,
- (uint32_t )Wake_up,
- (eNotifyAction )eSetBits);
- }
- void eMBFuncWriteMultipleHoldingRegister(UART_msg *ptrmsg)
- {
- uint16_t addr = (uint16_t)(ptrmsg->data[2] <<8) + (uint16_t)(ptrmsg->data[3]);
- if(addr > 0xff) return;
- uint16_t num = (uint16_t)(ptrmsg->data[5]) + (uint16_t)(ptrmsg->data[4] << 8);
- if(num > 255 || 2 *num != ptrmsg->data[6] ) return ;
- u8 Data_need_write = 0;
- for(uint8_t i = 0;i < num;i++)
- {
- addr = (uint16_t)(ptrmsg->data[2] <<8) + (uint16_t)(ptrmsg->data[3]) + i;
- if(eMBFuncWriteHoldingRegister_do(&ptrmsg->data[7 + 2*i],&ptrmsg->data[8 + 2*i],addr,&Data_need_write) == 0)
- {
- ptrmsg->data[1] |= 0x80;
- }
- }
- u16 CRCA;
- u8 CRCH;
- u8 CRCL;
- CRCA = GetCRC16(ptrmsg->data,ptrmsg->len-2);
- CRCH = CRCA>>8;
- CRCL = (u8)CRCA;
- ptrmsg->data[ptrmsg->len-2] = CRCH;
- ptrmsg->data[ptrmsg->len-1] = CRCL;
- if(Data_need_write >= 1)
- {
- xTaskNotify((TaskHandle_t)LEDTask_Handler,
- (uint32_t)Need_Write,
- (eNotifyAction)eSetBits);
- }
- xTaskNotify((TaskHandle_t)LEDTask_Handler,
- (uint32_t)Wake_up,
- (eNotifyAction)eSetBits);
- }
- void mb_rtu_task(void *pvParameters)
- {
- UART_msg ptrmsg;
- while(1)
- {
- //vTaskDelay(20);
- xQueueReceive(MB_RTU_Rx_Queue,&ptrmsg,portMAX_DELAY);
- //for(int i=0;i<ptrmsg.len;i++)
- //printf("///0x%x %d///",ptrmsg.data[i],ptrmsg.len);
- if(!Slave_Addr_check(ptrmsg.data[0]))
- continue;
- if(!CRC_Check(ptrmsg.data,ptrmsg.len))
- continue;
- zigbee_cmd.Is_From_485=1;
- switch(ptrmsg.data[1])
- {
- case 3:
- eMBFuncReadHoldingRegister(&ptrmsg);
- xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
- break;
- case 6:
- eMBFuncWriteHoldingRegister(&ptrmsg);
- PullOutOf_SleepPage();
- xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
- break;
- case 0x10:
- eMBFuncWriteMultipleHoldingRegister(&ptrmsg);
- PullOutOf_SleepPage();
- xQueueSend(MB_RTU_Tx_Queue,&ptrmsg,0);
- break;
- default:
- break;
- }
- all_data_update();
- //vTaskDelay(20);
- }
- }
|