diff --git a/HARDWARE/PID.c b/HARDWARE/PID.c index 8d80cc4..517f340 100644 --- a/HARDWARE/PID.c +++ b/HARDWARE/PID.c @@ -2,7 +2,6 @@ #include "Relays.h" #include "USART.h" #include "rs485.h" -extern u16 tem; float cold_tem = 0; float red_tem = 0; float ti; @@ -18,7 +17,6 @@ int max_speed_count = 6000; void PID_Init() { - // pid.set_tem=tem;// user set temperature // if flash have not a vaild value, just set a default value if (pid.Kp < 1e-7) { pid.Kp = 9.6; } if (pid.Ki < 1e-7) { pid.Ki = 0.01; } @@ -32,13 +30,22 @@ void PID_Init() pid.OUT0 = 1; pid.C1ms = 0; - pid.hp = 2.4; - pid.hi = 0.02; - pid.hd = 0; + pid.max_compressor_tem = 30; - pid.cp = 9.6; + pid.hp_h = 5; + pid.hi_h = 0.02; + pid.hd_h = 0.5; + pid.h_base_h = 0; + + pid.hp_l = 19.2; + pid.hi_l = 0.08; + pid.hd_l = 0; + pid.h_base_l = 30; + + pid.cp = 4.8; pid.ci = 0; pid.cd = 0; + pid.c_base = 37; pid.h_percent = 0; pid.c_speed = 0; @@ -93,8 +100,8 @@ void set_heater_power(int percent) { /** * heater power calc */ -int calc_hp(float delta_t, float Error_calc, int p_hb, float pid_hp, float pid_hi) { - int p_h = p_hb + pid_hp * delta_t + pid_hi * Error_calc; +int calc_hp(float delta_t, float Error_calc, float DelEk, int p_hb, float pid_hp, float pid_hi, float pid_hd) { + int p_h = p_hb + pid_hp * delta_t + pid_hi * Error_calc + pid_hd * DelEk; if (p_h > 100) { return 100; } @@ -136,8 +143,6 @@ void PID_Calc() // pid calc { int min_speed_count = 1800; int max_speed_count = 4800; - int p_hb = 52; - int p_cb = 33; float DelEk; // The difference between the last two deviations // float td; float out; @@ -148,32 +153,55 @@ void PID_Calc() // pid calc // } float delta_t = pid.set_tem - pid.now_tem; - - int p_c = calc_cp(delta_t, p_cb, pid.cp); - pid.c_speed = calc_compressor_speed(p_c, min_speed_count, max_speed_count); - + // When the target tem is greater then max compressor tem, the compressor will stop + if (pid.set_tem > pid.max_compressor_tem) { + pid.c_speed = 0; + } else { + int p_c = calc_cp(delta_t, pid.c_base, pid.cp); + pid.c_speed = calc_compressor_speed(p_c, min_speed_count, max_speed_count); + } + + float hp = pid.hp_h; + float hi = pid.hi_h; + float hd = pid.hd_h; + int h_base = pid.h_base_h; + + // l mode + if (pid.set_tem <= pid.max_compressor_tem) { + hp = pid.hp_l; + hi = pid.hi_l; + hd = pid.hd_l; + h_base = pid.h_base_l; + } + pid.Ek = pid.set_tem - pid.now_tem; pid.Pout = pid.Kp * pid.Ek; // Proportional output pid.SEk += pid.Ek; // Total historical deviation + DelEk = pid.Ek - pid.Ek_prev; // The difference between the last two deviations + + // no integral when the deviation is too large + if (pid.now_tem < pid.set_tem - 3) { + pid.SEk = 0; + } + // SEk limit, updated func - if (pid.SEk < - p_hb / pid.hi) { - pid.SEk = - p_hb / pid.hi; + if (pid.SEk < - h_base / hi) { + pid.SEk = - h_base / hi; } if (pid.c_speed == max_speed_count) { pid.SEk = 0; } float Error_calc = pid.SEk; - if (Error_calc < - (p_hb + pid.hp * delta_t) / pid.hi) { - Error_calc = - (p_hb + pid.hp * delta_t) / pid.hi; + if (Error_calc < - (h_base + hp * delta_t) / hi) { + Error_calc = - (h_base + hp * delta_t) / hi; } if (pid.c_speed == max_speed_count) { Error_calc = 0; } - DelEk = pid.Ek - pid.Ek_1; // The difference between the last two deviations // ti=pid.t/pid.Ti; // ki=ti*pid.Kp; @@ -203,11 +231,9 @@ void PID_Calc() // pid calc { pid.OUT = out; } - pid.Ek_1 = pid.Ek; // udpate difference - pid.C1ms = 0; // heater percent - pid.h_percent = calc_hp(delta_t, Error_calc, p_hb, pid.hp, pid.hi); + pid.h_percent = calc_hp(delta_t, Error_calc, DelEk, h_base, hp, hi, hd); // close heater when compressor is running in full state if (pid.c_speed == max_speed_count) { pid.h_percent = 0; @@ -216,4 +242,8 @@ void PID_Calc() // pid calc set_compressor_power(pid.c_speed); set_heater_power(pid.h_percent); + + pid.Ek_prev = pid.Ek; // udpate difference + pid.C1ms = 0; + } diff --git a/HARDWARE/PID.h b/HARDWARE/PID.h index 169d7a2..a3900d9 100644 --- a/HARDWARE/PID.h +++ b/HARDWARE/PID.h @@ -10,14 +10,30 @@ typedef struct Pid { float set_tem;// User settings float now_tem;// current temperature + + float max_compressor_tem; // maximum temperature of the compressor. When the target tem is greater than this value, the compressor is turned off. + + float out_tem; // outer temperature + float out_humidity; // outer humidity - float hp; - float hi; - float hd; + // in h mode + float hp_h; + float hi_h; + float hd_h; + int h_base_h; // base power percent in h mode + + // in l mode + float hp_l; + float hi_l; + float hd_l; + int h_base_l; // base power percent in l mode int h_percent; + + float cp; float ci; float cd; + float c_base; int c_speed; float Kp; // 110 @@ -28,7 +44,7 @@ typedef struct Pid float Td; float Ek; // This deviation - float Ek_1;// Last deviation + float Ek_prev;// Last deviation float SEk; // The sum of historical deviations float Iout; diff --git a/HARDWARE/rs485.c b/HARDWARE/rs485.c index 3a4b3e4..d3eeb89 100644 --- a/HARDWARE/rs485.c +++ b/HARDWARE/rs485.c @@ -380,6 +380,10 @@ void RS485_1_Send_Data_1(u8 *buf, u8 len) void RS485_1_Send_Data_2(void) { + // when H eq 0, don't send + // if (H == 0) { + // return; + // } sendbuf[0] = 0xEE; sendbuf[1] = 0xB5; sendbuf[2] = 0x05; @@ -450,21 +454,35 @@ void RS485_1_Send_Data_2(void) sendbuf[25] = 0; // ALARM state sendbuf[26] = ALARM; // ALARM state - sendbuf[27] = (int)pid.hp / 256; // Kp 110 - sendbuf[28] = (int)pid.hp % 256; // Kp 110 - sendbuf[29] = ((int)(pid.hi * 100000)) / 256; // Ti 0.001 - sendbuf[30] = ((int)(pid.hi * 100000)) % 256; // Ti 0.001 - sendbuf[31] = (int)pid.hd / 256; // Td 340 - sendbuf[32] = (int)pid.hd % 256; // Td 340 + if (pid.set_tem > pid.max_compressor_tem) { + // h mode + sendbuf[27] = (int)(pid.hp_h * 1000) / 256; // Kp 110 + sendbuf[28] = (int)(pid.hp_h * 1000) % 256; // Kp 110 + sendbuf[29] = ((int)(pid.hi_h * 100000)) / 256; // Ti 0.001 + sendbuf[30] = ((int)(pid.hi_h * 100000)) % 256; // Ti 0.001 + sendbuf[31] = (int)pid.hd_h / 256; // Td 340 + sendbuf[32] = (int)pid.hd_h % 256; // Td 340 + } else { + // l mode + sendbuf[27] = (int)(pid.hp_l * 1000) / 256; // Kp 110 + sendbuf[28] = (int)(pid.hp_l * 1000) % 256; // Kp 110 + sendbuf[29] = ((int)(pid.hi_l * 100000)) / 256; // Ti 0.001 + sendbuf[30] = ((int)(pid.hi_l * 100000)) % 256; // Ti 0.001 + sendbuf[31] = (int)pid.hd_l / 256; // Td 340 + sendbuf[32] = (int)pid.hd_l % 256; // Td 340 + } sendbuf[33] = pid.h_percent / 256; // h_percent sendbuf[34] = pid.h_percent % 256; // h_percent - sendbuf[35] = (int)pid.cp / 256; // Kp 110 - sendbuf[36] = (int)pid.cp % 256; // Kp 110 + sendbuf[35] = (int)(pid.cp * 1000) / 256; // Kp 110 + sendbuf[36] = (int)(pid.cp * 1000) % 256; // Kp 110 sendbuf[37] = ((int)(pid.ci * 100000)) / 256; // Ti 0.001 sendbuf[38] = ((int)(pid.ci * 100000)) % 256; // Ti 0.001 - sendbuf[39] = (int)pid.cd / 256; // Td 340 - sendbuf[40] = (int)pid.cd % 256; // Td 340 + // sendbuf[39] = (int)pid.cd / 256; // Td 340 + // sendbuf[40] = (int)pid.cd % 256; // Td 340 + // TODO::temply print out_tem + sendbuf[39] = (int)(pid.out_tem * 10) / 256; // Td 340 + sendbuf[40] = (int)(pid.out_tem * 10) % 256; // Td 340 sendbuf[41] = pid.c_speed / 256; // h_percent sendbuf[42] = pid.c_speed % 256; // h_percent diff --git a/USER/control.uvguix.Administrator b/USER/control.uvguix.Administrator index 5e11bd1..89917fb 100644 --- a/USER/control.uvguix.Administrator +++ b/USER/control.uvguix.Administrator @@ -95,7 +95,7 @@ 0 1454 - 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000B00000002000000010000005E453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C6D796672656572746F735C6D796672656572746F732E63000000000C6D796672656572746F732E6300000000C5D4F200FFFFFFFF52453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C555345525C6D61696E2E6300000000066D61696E2E6300000000FFDC7800FFFFFFFF55453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C48415244574152455C5049442E6300000000055049442E6300000000BECEA100FFFFFFFF55453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C48415244574152455C5049442E6800000000055049442E6800000000F0A0A100FFFFFFFF58453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C48415244574152455C52656C6179732E63000000000852656C6179732E6300000000BCA8E100FFFFFFFF57453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C555345525C73746D3332663130782E68000000000B73746D3332663130782E68000000009CC1B600FFFFFFFF57453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C48415244574152455C72733438352E63000000000772733438352E6300000000F7B88600FFFFFFFF57453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C48415244574152455C77726974652E63000000000777726974652E6300000000D9ADC200FFFFFFFF6A453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C53544D3332463130785F46574C69625C7372635C73746D3332663130785F74696D2E63000000000F73746D3332663130785F74696D2E6300000000A5C2D700FFFFFFFF59453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C48415244574152455C573235513132382E630000000009573235513132382E6300000000B3A6BE00FFFFFFFF62453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C555345525C6275696C645C4B65696C5C636F6E74726F6C2E6D6170000000000B636F6E74726F6C2E6D617000000000EAD6A300FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F4000000660000008007000010030000 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000B00000002000000010000005E453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C6D796672656572746F735C6D796672656572746F732E63000000000C6D796672656572746F732E6300000000FFDC7800FFFFFFFF52453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C555345525C6D61696E2E6300000000066D61696E2E6300000000BECEA100FFFFFFFF55453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C48415244574152455C5049442E6300000000055049442E6300000000F0A0A100FFFFFFFF55453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C48415244574152455C5049442E6800000000055049442E6800000000BCA8E100FFFFFFFF58453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C48415244574152455C52656C6179732E63000000000852656C6179732E63000000009CC1B600FFFFFFFF57453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C555345525C73746D3332663130782E68000000000B73746D3332663130782E6800000000F7B88600FFFFFFFF57453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C48415244574152455C72733438352E63000000000772733438352E6300000000D9ADC200FFFFFFFF57453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C48415244574152455C77726974652E63000000000777726974652E6300000000A5C2D700FFFFFFFF6A453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C53544D3332463130785F46574C69625C7372635C73746D3332663130785F74696D2E63000000000F73746D3332663130785F74696D2E6300000000B3A6BE00FFFFFFFF59453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C48415244574152455C573235513132382E630000000009573235513132382E6300000000EAD6A300FFFFFFFF62453A5CD6C7C4DCC5A9D2B520D6C7C4DCBBB7BEB3C6F8BAF2CFE45CD6C7C4DCC6F8BAF2C5E0D1F8CFE45CD6F7BFD8B0E55CB4FAC2EB5C636F6E74726F6C5F6672656572746F735C555345525C6275696C645C4B65696C5C636F6E74726F6C2E6D6170000000000B636F6E74726F6C2E6D617000000000F6FA7D00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F4000000660000008007000061020000 @@ -134,11 +134,11 @@ 0 16 - 0300000066000000ED000000E0020000 + 0300000066000000ED00000031020000 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -154,11 +154,11 @@ 0 16 - 0300000066000000ED000000E0020000 + 0300000066000000ED00000031020000 16 - A4000000BB000000C0010000F7020000 + F2000000090100000E02000045030000 @@ -178,7 +178,7 @@ 16 - A4000000BB0000006C03000049010000 + F200000009010000BA03000097010000 @@ -198,7 +198,7 @@ 16 - A4000000BB0000006C03000049010000 + F200000009010000BA03000097010000 @@ -218,7 +218,7 @@ 16 - A4000000BB0000006C03000049010000 + F200000009010000BA03000097010000 @@ -238,7 +238,7 @@ 16 - A4000000BB0000006C03000049010000 + F200000009010000BA03000097010000 @@ -258,7 +258,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -278,7 +278,7 @@ 16 - A4000000BB0000006C03000049010000 + F200000009010000BA03000097010000 @@ -298,7 +298,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -318,7 +318,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -338,7 +338,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -358,7 +358,7 @@ 16 - A4000000BB0000006C03000049010000 + F200000009010000BA03000097010000 @@ -378,7 +378,7 @@ 16 - A4000000BB0000006C03000049010000 + F200000009010000BA03000097010000 @@ -398,7 +398,7 @@ 16 - A4000000BB0000006C03000049010000 + F200000009010000BA03000097010000 @@ -418,7 +418,7 @@ 16 - A4000000BB0000006C03000049010000 + F200000009010000BA03000097010000 @@ -434,11 +434,11 @@ 0 16 - 0300000066000000ED000000E0020000 + 0300000066000000ED00000031020000 16 - A4000000BB000000C0010000F7020000 + F2000000090100000E02000045030000 @@ -454,11 +454,11 @@ 0 16 - 0300000066000000ED000000E0020000 + 0300000066000000ED00000031020000 16 - A4000000BB000000C0010000F7020000 + F2000000090100000E02000045030000 @@ -474,11 +474,11 @@ 0 16 - 000000001103000080070000DE030000 + 000000006202000080070000DE030000 16 - A4000000BB0000006C03000049010000 + F200000009010000BA03000097010000 @@ -498,7 +498,7 @@ 16 - A4000000BB0000006C03000049010000 + F200000009010000BA03000097010000 @@ -514,11 +514,11 @@ 0 16 - 03000000140300007D070000C5030000 + 03000000650200007D070000C5030000 16 - A4000000BB0000006C03000049010000 + F200000009010000BA03000097010000 @@ -538,7 +538,7 @@ 16 - A4000000BB0000006C03000049010000 + F200000009010000BA03000097010000 @@ -558,7 +558,7 @@ 16 - A4000000BB0000006C03000049010000 + F200000009010000BA03000097010000 @@ -598,7 +598,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -618,7 +618,7 @@ 16 - A4000000BB0000006C03000049010000 + F200000009010000BA03000097010000 @@ -638,7 +638,7 @@ 16 - A4000000BB0000006C03000049010000 + F200000009010000BA03000097010000 @@ -658,7 +658,7 @@ 16 - A4000000BB0000006C03000049010000 + F200000009010000BA03000097010000 @@ -678,7 +678,7 @@ 16 - A4000000BB0000006C03000049010000 + F200000009010000BA03000097010000 @@ -698,7 +698,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -718,7 +718,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -738,7 +738,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -758,7 +758,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -778,7 +778,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -798,7 +798,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -818,7 +818,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -838,7 +838,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -858,7 +858,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -878,7 +878,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -898,7 +898,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -918,7 +918,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -938,7 +938,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -958,7 +958,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -978,7 +978,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -998,7 +998,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1018,7 +1018,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1038,7 +1038,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1058,7 +1058,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1078,7 +1078,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1098,7 +1098,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1114,11 +1114,11 @@ 0 16 - 0300000066000000ED000000E0020000 + 0300000066000000ED00000031020000 16 - A4000000BB000000C0010000F7020000 + F2000000090100000E02000045030000 @@ -1134,11 +1134,11 @@ 0 16 - 03000000140300007D070000C5030000 + 03000000650200007D070000C5030000 16 - A4000000BB0000006C03000049010000 + F200000009010000BA03000097010000 @@ -1154,11 +1154,11 @@ 0 16 - 03000000140300007D070000C5030000 + 03000000650200007D070000C5030000 16 - A4000000BB000000C0010000F7020000 + F2000000090100000E02000045030000 @@ -1178,7 +1178,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1198,7 +1198,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1218,7 +1218,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1238,7 +1238,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1258,7 +1258,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1278,7 +1278,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1298,7 +1298,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1318,7 +1318,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1338,7 +1338,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1358,7 +1358,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1378,7 +1378,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1398,7 +1398,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1418,7 +1418,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1438,7 +1438,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1458,7 +1458,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1478,7 +1478,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1498,7 +1498,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1518,7 +1518,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1538,7 +1538,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1558,7 +1558,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1578,7 +1578,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1598,7 +1598,7 @@ 16 - A4000000BB0000009401000084010000 + F200000009010000E2010000D2010000 @@ -1654,7 +1654,7 @@ 1 16 - 010000001C000000DB01000038000000 + 000000001C000000DA01000038000000 16 @@ -1683,7 +1683,7 @@ 3119 - 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DD00000090050000E1000000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E650020000000000000F40000006600000090050000F4000000F40000004F00000090050000DD0000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000025020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A004000066000000900500003C020000A00400004F000000900500002502000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F4000000F9020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F000000010030000000000004F000000F0000000F90200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000011020000900500001502000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000002C02000090050000CE020000000000001502000090050000B702000000000000404100460E0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000015020000CC020000B702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000F902000080070000FD0200000100000001000010040000000100000008FDFFFF8C000000FFFFFFFF04000000C5000000C7000000B40100007794000001800080000001000000000000001403000080070000F503000000000000FD02000080070000DE0300000000000040820056040000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DD00000090050000E1000000000000000100000004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E650020000000000000F40000006600000090050000F4000000F40000004F00000090050000DD0000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A004000025020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A004000066000000900500003C020000A00400004F000000900500002502000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F40000004A020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000F000000061020000000000004F000000F00000004A0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000011020000900500001502000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000002C02000090050000CE020000000000001502000090050000B702000000000000404100460E0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC802000015020000CC020000B702000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF000000004A020000800700004E0200000100000001000010040000000100000008FDFFFF8C000000FFFFFFFF04000000C5000000C7000000B40100007794000001800080000001000000000000006502000080070000F5030000000000004E02000080070000DE0300000000000040820056040000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 @@ -1722,7 +1722,7 @@ Debug 2373 - 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -1749,16 +1749,16 @@ 2 ../myfreertos/myfreertos.c - 0 - 198 - 221 + 10 + 396 + 422 1 0 main.c - 13 + 15 1 15 1 @@ -1767,16 +1767,16 @@ ../HARDWARE/PID.c - 17 - 115 - 130 + 3 + 66 + 77 1 0 ../HARDWARE/PID.h - 8 + 14 5 17 1 @@ -1803,9 +1803,9 @@ ../HARDWARE/rs485.c - 20 - 381 - 405 + 40 + 252 + 258 1 0 diff --git a/USER/main.c b/USER/main.c index afedd62..7a38249 100644 --- a/USER/main.c +++ b/USER/main.c @@ -1,9 +1,5 @@ #include "myfreertos.h" -extern u16 tem, hum, red, blue, white; -extern u8 now_stage; -extern u8 hour, min; -extern u8 gpio_state; // int a_value=20; // int b_value=20; // int c_value=20; @@ -22,7 +18,6 @@ int main(void) RTC_Init(); // 需要放在HC595_Pin_Init()后面 TIM2_Init(); Read_Init(); // 读flash的值赋值给total数组以及阶段 - // Array(&now_stage,&hour,&min,&tem,&hum,&red,&blue,&white); PWM1_Init(500 - 1, 720 - 1); PWM2_Init(500 - 1, 720 - 1); PWM3_Init(500 - 1, 720 - 1); diff --git a/myfreertos/myfreertos.c b/myfreertos/myfreertos.c index 23ebafd..4207299 100644 --- a/myfreertos/myfreertos.c +++ b/myfreertos/myfreertos.c @@ -1,6 +1,7 @@ #include "myfreertos.h" -#define SENSOR_ADDRESS 0x02 +#define INNER_SENSOR_ADDRESS 0x02 +#define OUTER_SENSOR_ADDRESS 0x04 char pubTopic[512] = "/sys/hp8oQhMZJ67/Device1/thing/event/property/post"; // Publish topic char subTopic[512] = "/sys/hp8oQhMZJ67/Device1/thing/service/property/set"; // Subscribe topic @@ -36,23 +37,20 @@ void Host_Computer_Communication(void); // 1seconds delay #define MAIN_TASK_PERIOD pdMS_TO_TICKS(1000) - /** - * sensor data request: 02 03 -*/ + * sensor data request: 02 03 + */ void SensorDataRequestTask(void *pvParameters); /** * sync environment data: EE B5 01 -*/ + */ void SyncEnvironmentDataRequestTask(void *pvParameters); /** * 定时制热test -*/ + */ void HotTestRequestTask(void *pvParameters); - - int isZeros(u8 arr[]); u8 RS485_RX_BUF_COPY[128] = {0}; u8 RS485_DATA_TMP[128] = {0}; @@ -81,14 +79,14 @@ u8 Feed_Dog_Count = 0; // Feeding dog timing u8 now_stage = 1; // Current operational phase u16 tem, hum, red, blue, white; u8 hour, min; -u8 rs485buf[8] = {SENSOR_ADDRESS, 0x03, 0x00, 0x01, 0x00, 0x09, 0xD4, 0x3F}; // Sensor exchange data -u16 sync_cnt = 0; // 同步环境控制参数的计数器,到0同步 +u8 INNER_SENSOR_485_REQUEST_COMMAND[8] = {INNER_SENSOR_ADDRESS, 0x03, 0x00, 0x01, 0x00, 0x09, 0xD4, 0x3F}; // Inner sensor exchange data +u8 OUTER_SENSOR_485_REQUEST_COMMAND[8] = {OUTER_SENSOR_ADDRESS, 0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x5E}; // Outer sensor exchange data +u16 sync_cnt = 0; // 同步环境控制参数的计数器,到0同步 int T = 0, H = 0, C = 0, G = 0, current_T = 0; extern u8 total[]; float Humidity = 0; float temperature = 0; - // pages in hmi #define page_index 43 #define page_curve 45 @@ -101,6 +99,24 @@ float temperature = 0; // u8 RS485_RX_BUF[64]; +/********************* +********************** +Create handles for tasks, queues, signal sets, etc., which can also be tested using +********************** +*********************/ +BaseType_t handler = 0; +BaseType_t handler1 = 0; +BaseType_t handler2 = 0; +BaseType_t handler3 = 0; +BaseType_t handler4 = 0; +BaseType_t handler5 = 0; +BaseType_t handler6 = 0; +BaseType_t handler7 = 0; +BaseType_t handler8 = 0; +BaseType_t handler9 = 0; +BaseType_t handler10 = 0; +BaseType_t handler11 = 0; + /********************* ********************** entry function @@ -116,34 +132,14 @@ void os_init(void) (UBaseType_t)START_TASK_PRIO, (TaskHandle_t *)&StartTask_Handler); - // 创建传感器数据请求任务 - xTaskCreate(SensorDataRequestTask, "SensorDataRequestTask", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL); - - xTaskCreate(SyncEnvironmentDataRequestTask, "SyncEnvironmentDataRequestTask", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 2, NULL); - xTaskCreate(HotTestRequestTask, "HotTestRequestTask", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 3, NULL); - + // 创建传感器数据请求任务 + xTaskCreate(SensorDataRequestTask, "SensorDataRequestTask", configMINIMAL_STACK_SIZE * 8, NULL, tskIDLE_PRIORITY + 6, NULL); + xTaskCreate(SyncEnvironmentDataRequestTask, "SyncEnvironmentDataRequestTask", configMINIMAL_STACK_SIZE * 8, NULL, tskIDLE_PRIORITY + 7, NULL); + xTaskCreate(HotTestRequestTask, "HotTestRequestTask", configMINIMAL_STACK_SIZE * 8, NULL, tskIDLE_PRIORITY + 8, NULL); vTaskStartScheduler(); } -/********************* -********************** -Create handles for tasks, queues, signal sets, etc., which can also be tested using -********************** -*********************/ -BaseType_t handler = 0; -BaseType_t handler1 = 0; -BaseType_t handler2 = 0; -BaseType_t handler3 = 0; -BaseType_t handler4 = 0; -BaseType_t handler5 = 0; -BaseType_t handler6 = 0; -BaseType_t handler7 = 0; -BaseType_t handler8 = 0; -BaseType_t handler9 = 0; -BaseType_t handler10 = 0; -BaseType_t handler11 = 0; - /* Start function: Create other functions and timers @@ -160,7 +156,8 @@ void start_task(void *pvParameters) (const char *)"Sensor_Communication_task", (uint16_t)Sensor_Communication_STK_SIZE, (void *)NULL, - (UBaseType_t)Sensor_Communication_TASK_PRIO, + // (UBaseType_t)Sensor_Communication_TASK_PRIO, + tskIDLE_PRIORITY + 4, (TaskHandle_t *)&Sensor_CommunicationTask_Handler); // if(handler==pdPASS){printf("与传感器通信任务创建成功\r\n");} // else{printf("与传感器通信任务创建失败\r\n");} @@ -175,161 +172,106 @@ void start_task(void *pvParameters) // if(handler4==pdPASS){printf("控灯任务创建成功\r\n");} // else{printf("控灯任务创建失败\r\n");} - vTaskDelete(StartTask_Handler); // 删除开始任务 taskEXIT_CRITICAL(); // 退出临界区 } +void SensorDataRequestTask(void *pvParameters) +{ + while (1) + { + // 发送传感器数据请求的操作 + RS485_1_Send_Data_1(INNER_SENSOR_485_REQUEST_COMMAND, 8); + vTaskDelay(100); + RS485_1_Send_Data_1(OUTER_SENSOR_485_REQUEST_COMMAND, 8); + vTaskDelay(100); + process_485_task(); -void SensorDataRequestTask(void *pvParameters) { - while (1) { - // 发送传感器数据请求的操作 - RS485_1_Send_Data_1(rs485buf, 8); - // delay_xms(100); - // RS485_1_Send_Data_1(RS485_RX_BUF, 48); + PID_Calc(); + // RS485_1_Send_Data_1(RS485_RX_BUF, 48); - vTaskDelay(SENSOR_DATA_REQUEST_PERIOD); - } + vTaskDelay(4800); + // vTaskDelay(SENSOR_DATA_REQUEST_PERIOD); + } } -void SyncEnvironmentDataRequestTask(void *pvParameters) { - while (1) { +void SyncEnvironmentDataRequestTask(void *pvParameters) +{ + while (1) + { RS485_1_Send_Data_3(); - vTaskDelay(SYNC_ENVIRONMENT_DATA_REQUEST_PERIOD); - } + vTaskDelay(SYNC_ENVIRONMENT_DATA_REQUEST_PERIOD); + } } int hot = 0; /** * pid计算,每5秒一次 -*/ -void HotTestRequestTask(void *pvParameters) { - while (1) { - - PID_Calc(); - // if (T >= 350) { - // hot = 0; - // hot_clod_flag = 0; - // } else { - // hot = 52; - - // hot_clod_flag = 2; - // // hot += 10; - // // if (hot > 100) { - // // hot = 10; - // // } - // } - // u8 temp_data[8] = { 0x10, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00 }; - - // temp_data[4] = hot / 256; - // temp_data[5] = hot % 256; - - // GetCRC16(temp_data, 6, temp_data + 6, temp_data + 7); - - // RS485_3_Init(9600); - // RS485_3_Send_Data(temp_data, 8); - // // RS485_1_Send_Data(temp_data, 8); - // delay_xms(30); - // RS485_1_Init(9600); - - - // HC595_Send_Byte(gpio_state |= 0x04); // open heater |=0000 0100 0x04 - - // vTaskDelay(60000); - - - - // temp_data[4] = 0; - // temp_data[5] = 0; - - // GetCRC16(temp_data, 6, temp_data + 6, temp_data + 7); - - // // RS485_3_Init(9600); - // RS485_1_Send_Data(temp_data, 8); - // // RS485_3_Send_Data(temp_data, 8); - // // delay_xms(30); - // // RS485_1_Init(9600); + */ +void HotTestRequestTask(void *pvParameters) +{ + while (1) + { - // // HC595_Send_Byte(gpio_state &= 0xFB); // close heater &=1111 1011 0xFB - // hot_clod_flag = 0; + // PID_Calc(); + RS485_1_Send_Data_2(); // 上传参数 - vTaskDelay(5000); - } + vTaskDelay(5000); + } } - -u8 temp[4] = {0xaa,0xbb,0xcc,0xdd}; +u8 temp[4] = {0xaa, 0xbb, 0xcc, 0xdd}; u8 times = 0; -void Sensor_Communication_task(void *pvParameters) -{ - - while (1) - { - // RS485_3_Init(9600); - // // temp[2] = (int)pid.Ki / 256; - // // temp[3] = (int)pid.Ki % 256; - // temp[2] = 4800 / 256; - // temp[3] = 4800 % 256; - // RS485_3_Send_Data(temp, 4); - // // RS485_1_Send_Data(temp_data, 8); - // delay_xms(30); - // RS485_1_Init(9600); - // RS485_1_Send_Data(temp, 4); - // HC595_Send_Byte(0x00); - // cnt_flag=do_mqtt(MQTT_SOCK,NET_CONFIG.rip,1883,5500); - // Humidity=H*0.1; - // temperature=T*0.1; - // delay_ms(50); - // sprintf(wet_temp,"{\"method\":\"thing.event.property.post\",\"params\":{\"Humidity\":%.2f,\"temperature\":%.2f,\"CO2\":%d,\"red_light\":%d,\"white_light\":%d,\"blue_light\":%d},\"version\":\"1.0.0\"}",Humidity,temperature,C,red/10,white/10,blue/10); //构建数据 - // //sprintf(wet_temp,"{\"method\":\"thing.event.property.post\",\"params\":{\"Humidity\":%.2f,\"temperature\":%.2f,\"CO2\":%d},\"version\":\"1.0.0\"}",Humidity,temperature,C); //构建数据 - // if(cnt_flag==0){sub_flag=0;pub_flag=0;time=0;} - // if(cnt_flag&&sub_flag==0)sub_flag=!subscribMqtt(MQTT_SOCK,subTopic); - // if(cnt_flag&&sub_flag&&pub_flag==0)pub_flag=!publishMqtt(MQTT_SOCK,pubTopic,wet_temp); - // if(cnt_flag)time++; - // if(time==50){ - // time=0; - // pingMqtt(MQTT_SOCK); - // } +void process_485_task(void) { + now_stage = timelong_Compare(); Array(&now_stage, &hour, &min, &tem, &hum, &red, &blue, &white); // 更新对应阶段号的参数 delay_xms(50); bufcut_Init(RS485_RX_BUF_COPY, RS485_RX_BUF, 0, 128); - u8 c = 0; RS485_RX_CNT = 0; while (isAllZeros(RS485_RX_BUF_COPY, 128) == 0) // while (RS485_RX_CNT > 0) - { - if (RS485_RX_BUF_COPY[0] == 0x02 && RS485_RX_BUF_COPY[1] == 0x03 && CRC16_check(RS485_RX_BUF_COPY, 21) == 1) + { + if (RS485_RX_BUF_COPY[0] == INNER_SENSOR_ADDRESS && RS485_RX_BUF_COPY[1] == 0x03 && CRC16_check(RS485_RX_BUF_COPY, 21) == 1) { - c++; // receive message from sensor u8 temp_data[23] = {0}; - for (int i=0;i<23;i++) { + for (int i = 0; i < 23; i++) + { temp_data[i] = RS485_RX_BUF_COPY[i]; } - process_sensor_data(temp_data); + process_inner_sensor_data(temp_data); RX_BUF_Transfer(0, 23); - // u8 tmpaaa[] = {c}; - // RS485_1_Send_Data_1(tmpaaa, 1); + } + else if (RS485_RX_BUF_COPY[0] == OUTER_SENSOR_ADDRESS && RS485_RX_BUF_COPY[1] == 0x03 && CRC16_check(RS485_RX_BUF_COPY, 7) == 1) + { + // receive message from sensor + u8 temp_data[9] = {0}; + for (int i = 0; i < 9; i++) + { + temp_data[i] = RS485_RX_BUF_COPY[i]; + } + process_outer_sensor_data(temp_data); + RX_BUF_Transfer(0, 9); } else if (RS485_RX_BUF_COPY[0] == 0xEE && RS485_RX_BUF_COPY[1] == 0xB6 && RS485_RX_BUF_COPY[2] == 0x01 && CRC16_check(RS485_RX_BUF_COPY, 16) == 1) { // batch update params in a stage // total length: 18 // if (CRC16_check(RS485_RX_BUF_COPY, 16) == 1) { - Batch_synchronization(&n, RS485_RX_BUF_COPY); - Array(&now_stage, &hour, &min, &tem, &hum, &red, &blue, &white); // update param correspond to current stage - bufcut_Init(RS485_DATA_TMP, RS485_RX_BUF_COPY, 0, 18); - RS485_DATA_TMP[18] = 0xFF; - RS485_DATA_TMP[19] = 0xFC; - RS485_DATA_TMP[20] = 0xFF; - RS485_DATA_TMP[21] = 0xFF; - // bufcut_Init(RS485_DATA_TMP + 8, RS485_SUFFIX, 18, 22); - RS485_1_Send_Data_1(RS485_DATA_TMP, 22); + Batch_synchronization(&n, RS485_RX_BUF_COPY); + Array(&now_stage, &hour, &min, &tem, &hum, &red, &blue, &white); // update param correspond to current stage + bufcut_Init(RS485_DATA_TMP, RS485_RX_BUF_COPY, 0, 18); + RS485_DATA_TMP[18] = 0xFF; + RS485_DATA_TMP[19] = 0xFC; + RS485_DATA_TMP[20] = 0xFF; + RS485_DATA_TMP[21] = 0xFF; + // bufcut_Init(RS485_DATA_TMP + 8, RS485_SUFFIX, 18, 22); + RS485_1_Send_Data_1(RS485_DATA_TMP, 22); // } RX_BUF_Transfer(0, 18); } @@ -338,12 +280,12 @@ void Sensor_Communication_task(void *pvParameters) // update single environment param // total length: 9 // if (CRC16_check(RS485_RX_BUF_COPY, 7) == 1) { - Analysis(&n, &i, RS485_RX_BUF_COPY); - Array(&now_stage, &hour, &min, &tem, &hum, &red, &blue, &white); // update param correspond to current stage - Write_Init(); - bufcut_Init(RS485_DATA_TMP, RS485_RX_BUF_COPY, 0, 9); - bufcut_Init(RS485_DATA_TMP + 8, RS485_SUFFIX, 9, 13); - RS485_1_Send_Data_1(RS485_DATA_TMP, 13); + Analysis(&n, &i, RS485_RX_BUF_COPY); + Array(&now_stage, &hour, &min, &tem, &hum, &red, &blue, &white); // update param correspond to current stage + Write_Init(); + bufcut_Init(RS485_DATA_TMP, RS485_RX_BUF_COPY, 0, 9); + bufcut_Init(RS485_DATA_TMP + 8, RS485_SUFFIX, 9, 13); + RS485_1_Send_Data_1(RS485_DATA_TMP, 13); // } RX_BUF_Transfer(0, 9); } @@ -352,16 +294,16 @@ void Sensor_Communication_task(void *pvParameters) // change running stage // total length: 6 // if (CRC16_check(RS485_RX_BUF_COPY, 4) == 1) { - int target_stage = RS485_RX_BUF_COPY[3]; - RTC_synchronization_ins(2023, 9, 1, 0, 00, 00); - now_stage = target_stage; - store_stage = target_stage; - Write_Init(); - bufcut_Init(RS485_DATA_TMP, RS485_RX_BUF_COPY, 0, 6); - bufcut_Init(RS485_DATA_TMP + 8, RS485_SUFFIX, 6, 10); - RS485_1_Send_Data_1(RS485_DATA_TMP, 10); - // delay_ms(10); - RS485_1_Send_Data_2(); // 上传参数 + int target_stage = RS485_RX_BUF_COPY[3]; + RTC_synchronization_ins(2023, 9, 1, 0, 00, 00); + now_stage = target_stage; + store_stage = target_stage; + Write_Init(); + bufcut_Init(RS485_DATA_TMP, RS485_RX_BUF_COPY, 0, 6); + bufcut_Init(RS485_DATA_TMP + 8, RS485_SUFFIX, 6, 10); + RS485_1_Send_Data_1(RS485_DATA_TMP, 10); + // delay_ms(10); + RS485_1_Send_Data_2(); // 上传参数 // } RX_BUF_Transfer(0, 6); } @@ -370,38 +312,39 @@ void Sensor_Communication_task(void *pvParameters) // change pid params // total length: 8 int param_index = RS485_RX_BUF_COPY[3]; - switch(param_index) { - case 0x01: - { - pid.Kp = RS485_RX_BUF_COPY[4] * 256.0 + RS485_RX_BUF_COPY[5]; - break; - } - case 0x02: - { - pid.Ki = (RS485_RX_BUF_COPY[4] * 256.0 + RS485_RX_BUF_COPY[5]) / 100000.0; - break; - } - case 0x03: - { - pid.Kd = RS485_RX_BUF_COPY[4] * 256.0 + RS485_RX_BUF_COPY[5]; - break; - } - case 0x04: - { - int tem_offset_10times = RS485_RX_BUF_COPY[4] * 256.0 + RS485_RX_BUF_COPY[5]; - // Negative tem offset treatment - if (tem_offset_10times & 0x8000) - { - tem_offset_10times = ((~tem_offset_10times + 1) & 0xFFFF); - } - pid.tem_offset = tem_offset_10times / 10.0; - break; - } - case 0x05: + switch (param_index) + { + case 0x01: + { + pid.Kp = RS485_RX_BUF_COPY[4] * 256.0 + RS485_RX_BUF_COPY[5]; + break; + } + case 0x02: + { + pid.Ki = (RS485_RX_BUF_COPY[4] * 256.0 + RS485_RX_BUF_COPY[5]) / 100000.0; + break; + } + case 0x03: + { + pid.Kd = RS485_RX_BUF_COPY[4] * 256.0 + RS485_RX_BUF_COPY[5]; + break; + } + case 0x04: + { + int tem_offset_10times = RS485_RX_BUF_COPY[4] * 256.0 + RS485_RX_BUF_COPY[5]; + // Negative temperature offset treatment + if (tem_offset_10times & 0x8000) { - pid.tem_threshold = (RS485_RX_BUF_COPY[4] * 256.0 + RS485_RX_BUF_COPY[5]) / 10.0; - break; + tem_offset_10times = ((~tem_offset_10times + 1) & 0xFFFF); } + pid.tem_offset = tem_offset_10times / 10.0; + break; + } + case 0x05: + { + pid.tem_threshold = (RS485_RX_BUF_COPY[4] * 256.0 + RS485_RX_BUF_COPY[5]) / 10.0; + break; + } } Write_Init(); bufcut_Init(RS485_DATA_TMP, RS485_RX_BUF_COPY, 0, 8); @@ -454,16 +397,49 @@ void Sensor_Communication_task(void *pvParameters) // PWM_SetCompare4((white / 100.0 * 3.5 + 28)); // J10 // } RS485_RX_CNT = 0; +} + +void Sensor_Communication_task(void *pvParameters) +{ - - vTaskDelay(MAIN_TASK_PERIOD); + while (1) + { + // RS485_3_Init(9600); + // // temp[2] = (int)pid.Ki / 256; + // // temp[3] = (int)pid.Ki % 256; + // temp[2] = 4800 / 256; + // temp[3] = 4800 % 256; + // RS485_3_Send_Data(temp, 4); + // // RS485_1_Send_Data(temp_data, 8); + // delay_xms(30); + // RS485_1_Init(9600); + // RS485_1_Send_Data(temp, 4); + + // HC595_Send_Byte(0x00); + // cnt_flag=do_mqtt(MQTT_SOCK,NET_CONFIG.rip,1883,5500); + // Humidity=H*0.1; + // temperature=T*0.1; + // delay_ms(50); + // sprintf(wet_temp,"{\"method\":\"thing.event.property.post\",\"params\":{\"Humidity\":%.2f,\"temperature\":%.2f,\"CO2\":%d,\"red_light\":%d,\"white_light\":%d,\"blue_light\":%d},\"version\":\"1.0.0\"}",Humidity,temperature,C,red/10,white/10,blue/10); //构建数据 + // //sprintf(wet_temp,"{\"method\":\"thing.event.property.post\",\"params\":{\"Humidity\":%.2f,\"temperature\":%.2f,\"CO2\":%d},\"version\":\"1.0.0\"}",Humidity,temperature,C); //构建数据 + // if(cnt_flag==0){sub_flag=0;pub_flag=0;time=0;} + // if(cnt_flag&&sub_flag==0)sub_flag=!subscribMqtt(MQTT_SOCK,subTopic); + // if(cnt_flag&&sub_flag&&pub_flag==0)pub_flag=!publishMqtt(MQTT_SOCK,pubTopic,wet_temp); + // if(cnt_flag)time++; + // if(time==50){ + // time=0; + // pingMqtt(MQTT_SOCK); + // } + process_485_task(); + vTaskDelay(MAIN_TASK_PERIOD); } } /** - * process sensor data -*/ -void process_sensor_data(u8 *data) { + * process inner sensor data + */ +void process_inner_sensor_data(u8 *data) +{ T = data[3]; T = T << 8 | data[4]; // Negative temperature treatment @@ -508,6 +484,10 @@ void process_sensor_data(u8 *data) { // // } // } + // 如果目标温度变化(新的目标温度和现在的目标温度相差大于等于0.1度),则清除误差累计 + if (pid.set_tem - tem / 10.0 >= 0.1 || pid.set_tem - tem / 10.0 <= -0.1) { + pid.SEk = 0; + } pid.set_tem = tem / 10.0; pid.now_tem = T / 10.0; // PID_Calc(); @@ -521,7 +501,7 @@ void process_sensor_data(u8 *data) { gpio_state |= 0x08; // HC595_Send_Byte(gpio_state &= 0xEF); // 关闭加湿器 &=1110 1111 0xEF gpio_state &= 0xEF; - humidity_flag = 1; // 除湿 + humidity_flag = 1; // 除湿 } if (H < (hum - 50)) // 湿度低于设定值5,打开加湿器 GPIO5->PD0 { @@ -546,21 +526,48 @@ void process_sensor_data(u8 *data) { humidity_flag = 0; } - // HC595_Send_Byte(gpio_state); - + // HC595_Send_Byte(gpio_state); + RS485_1_Send_Data_2(); // 上传参数 - // delay_xms(200); + // delay_xms(200); +} + +/** + * process inner sensor data + */ +void process_outer_sensor_data(u8 *data) +{ + int out_tem = data[3]; + out_tem = out_tem << 8 | data[4]; + // Negative temperature treatment + if (out_tem & 0x8000) + { + out_tem = ((~out_tem + 1) & 0xFFFF); + } + pid.out_tem = (float)out_tem / 10; + + int out_humidity = data[5]; + out_humidity = out_humidity << 8 | data[6]; + // Negative temperature treatment + if (out_humidity & 0x8000) + { + out_humidity = ((~out_humidity + 1) & 0xFFFF); + } + pid.out_humidity = out_humidity; } /** * hmi event process -*/ -void process_hmi_btn_event(u8 page, u8 btn_index, u8 value) { - switch(page) { + */ +void process_hmi_btn_event(u8 page, u8 btn_index, u8 value) +{ + switch (page) + { case page_param_adjust: { // change current stage - if (btn_index >= 45 && btn_index <= 50 && value == 0x01) { + if (btn_index >= 45 && btn_index <= 50 && value == 0x01) + { int target_stage = btn_index - 44; RTC_synchronization_ins(2023, 9, 1, 0, 00, 00); now_stage = target_stage; @@ -573,86 +580,3 @@ void process_hmi_btn_event(u8 page, u8 btn_index, u8 value) { } } } - -// void Host_Computer_Communication(void) -//{ -// if(RS485_RX_BUF_COPY[0]==0xEE&&RS485_RX_BUF_COPY[1]==0xB6) -// { -// if(RS485_RX_BUF_COPY[2]==0x03)//单个同步 -// { -// Analysis(&n,&i,RS485_RX_BUF_COPY); -// //printf("B6 03 cmd: batch sync\r\n"); -// Array(&now_stage,&hour,&min,&tem,&hum,&red,&blue,&white);//更新对应阶段号的参数 -// Write_Init(); -// RX_BUF_Transfer(0,11); -// -// } -// if(RS485_RX_BUF_COPY[2]==0x04)//阶段切换 -// { -// change_stage_rev1=RS485_RX_BUF_COPY[3]; -// //printf("B6 04 cmd: change stage\r\n"); -// RTC_synchronization_ins(2023,9,1,0,00,00); -// now_stage=change_stage_rev1; -// store_stage=change_stage_rev1; -// Write_Init(); -// RX_BUF_Transfer(0,8); -// } -// if(RS485_RX_BUF_COPY[2]==0x01)//批量同步 -// { -// Batch_synchronization(&n,RS485_RX_BUF_COPY); -// //printf("B6 01 cmd: get one %d\r\n", n); -// Array(&now_stage,&hour,&min,&tem,&hum,&red,&blue,&white);//更新对应阶段号的参数 -// //Write_Init();减少擦写的次数 -// RX_BUF_Transfer(0,20); -// } -// } -// else if(RS485_RX_BUF_COPY[0]==0xEE&&RS485_RX_BUF_COPY[1]==0xB1) -// { -// if(RS485_RX_BUF_COPY[2]==0x11&&RS485_RX_BUF_COPY[15]==0xFF&&RS485_RX_BUF[16]==0xFF)//单个同步默认带的数据 -// { -// //printf("cut overdata of B6 03 \r\n"); -// RX_BUF_Transfer(0,17); -// } -// if(RS485_RX_BUF_COPY[2]==0x11&&RS485_RX_BUF_COPY[14]==0xFF&&RS485_RX_BUF[15]==0xFF)//单个同步默认带的数据 -// { -// //printf("cut overdata of B6 03 \r\n"); -// //RX_BUF_Printf(128); -// RX_BUF_Transfer(0,16); -// //RX_BUF_Printf(128); -// } -// if(RS485_RX_BUF_COPY[2]==0x11&&RS485_RX_BUF_COPY[12]==0xFF&&RS485_RX_BUF_COPY[13]==0xFF)//阶段切换默认带的数据 -// { -// //printf("cut overdata of B6 04 \r\n"); -// //RX_BUF_Printf(128); -// RX_BUF_Transfer(0,14); -// } -// if(RS485_RX_BUF_COPY[2]==0x01&&RS485_RX_BUF_COPY[7]==0xFF&&RS485_RX_BUF_COPY[8]==0xFF)//上位机默认带的数据 -// { -// //printf("cut overdata of Upper computer \r\n"); -// //RX_BUF_Printf(128); -// RX_BUF_Transfer(0,9); -// //RX_BUF_Printf(128); -// -// } -// } -// else -// { -// //int ZERO_Count=0; -// //if()与while()的顺序不能变 -//// if((RS485_RX_BUF_COPY[0]!=0x00))//不为0,处理掉 -//// { -//// RX_BUF_Transfer(0,1); -//// //printf("the number is no zero\r\n"); -//// } -//// -//// while(RS485_RX_BUF_COPY[ZERO_Count]==0x00) -//// { -//// ZERO_Count++; -//// } -//// RX_BUF_Transfer(0,ZERO_Count); -// -// RX_BUF_Transfer(0,1); -// //printf("previous array cut\r\n"); - -// } -//} diff --git a/myfreertos/myfreertos.h b/myfreertos/myfreertos.h index 017ce04..a6d0cc9 100644 --- a/myfreertos/myfreertos.h +++ b/myfreertos/myfreertos.h @@ -24,7 +24,9 @@ #include "mqtt_api.h" void os_init(void); -void process_sensor_data(u8 *data); +void process_inner_sensor_data(u8 *data); +void process_outer_sensor_data(u8 *data); +void process_485_task(void); void process_hmi_btn_event(u8 page_index, u8 btn_index, u8 value); #endif