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