网络自适应
This commit is contained in:
1 parent
a589e89e33
commit
0f40dd8b17
68 files changed
+7062
-2678
No files matched your search
@@ -9,6 +9,7 @@
|
||||
#include "data.h"
|
||||
#include "easyflash.h"
|
||||
#include <string.h>
|
||||
#include <elog.h>
|
||||
|
||||
|
||||
ALIGN (RT_ALIGN_SIZE)
|
||||
@@ -28,6 +29,7 @@ static void thread_entry (void * argument)
|
||||
g_DebugDrv.rxdone = cfg_rx_done;
|
||||
rt_kprintf ("%s was start!\r\n", __FILE__);
|
||||
rt_kprintf ("config input\r\n");
|
||||
elog_stop();
|
||||
g_ifconfig = 1;
|
||||
char * p;
|
||||
char key[32], value[32];
|
||||
@@ -95,7 +97,7 @@ static void thread_entry (void * argument)
|
||||
rt_thread_delay (10);
|
||||
}
|
||||
shell_recover();
|
||||
g_ifconfig = 0;
|
||||
elog_start();
|
||||
rt_kprintf ("config exit\r\n");
|
||||
}
|
||||
|
||||
|
||||
+17
-12
@@ -16,11 +16,13 @@
|
||||
#define DIS_CASCII_IP 0x1080 // 远程地址
|
||||
#define DIS_CASCII_PORT 0x1090 // 远程端口
|
||||
#define DIS_CASCII_PASS 0x10A0 // 登录密码
|
||||
#define DIS_CASCII_SLTYPE 0x10B0 // 闸门类型
|
||||
#define DIS_CNUM_SLSPEED 0x10C0 // 闸门速度
|
||||
|
||||
#define DIS_CNUM_1PROT 0x10B0 // 一级保护
|
||||
#define DIS_CNUM_2PROT 0x10C0 // 二级保护
|
||||
#define DIS_CNUM_SLHEIGHT 0x10D0 // 闸门高度
|
||||
#define DIS_CNUM_SLLOAD 0x10E0 // 荷重仪类型
|
||||
#define DIS_CNUM_SLLOADKEY 0x10F0 //荷重仪
|
||||
#define DIS_CNUM_PROTK 0x10E0 // 荷重仪类型
|
||||
|
||||
#define DIS_CNUM_SLLOADKEY 0x10F0 // 闸门荷重
|
||||
|
||||
|
||||
|
||||
@@ -35,11 +37,12 @@
|
||||
|
||||
|
||||
// 调试界面
|
||||
#define DIS_CNUM_DBG_ECODE 0x1180 //当前编码
|
||||
#define DIS_CNUM_DBG_OPEN 0x1190 //闸门开度
|
||||
#define DIS_CNUM_DBG_VOL 0x11A0 //母线电压
|
||||
#define DIS_CNUM_DBG_CUR 0x11B0 //当前电流
|
||||
#define DIS_CNUM_DBG_ERR 0x11C0 //报警代码
|
||||
#define DIS_CNUM_DBG_ECODE 0x1180 //当前编码
|
||||
#define DIS_CNUM_DBG_OPEN 0x1190 //闸门开度
|
||||
#define DIS_CNUM_DBG_VOL 0x11A0 //母线电压
|
||||
#define DIS_CNUM_DBG_CUR 0x11B0 //当前电流
|
||||
#define DIS_CNUM_DBG_ERR 0x11C0 //报警代码
|
||||
#define DIS_CNUM_MAX_OPEN 0x11D0 // 开度提闸界面 最大开度
|
||||
|
||||
|
||||
// 按钮
|
||||
@@ -51,7 +54,7 @@
|
||||
#define DIS_CMD_BTN_PA 0X2050 // 菜单 参数设置
|
||||
#define DIS_CMD_BTN_DB 0X2070 // 菜单 设备调试
|
||||
#define DIS_CMD_BTN_ST 0X2080 // 菜单 设备状态
|
||||
// #define DIS_CMD_BTN_STOP 0X2090 // 急停
|
||||
|
||||
|
||||
#define DIS_CMD_BTN_DUP 0X20B0 // 调试 上
|
||||
#define DIS_CMD_BTN_DDOWN 0X20C0 // 调试 下
|
||||
@@ -60,7 +63,8 @@
|
||||
#define DIS_CMD_BTN_SETMAX 0X20F0 // 菜单 设为最大
|
||||
#define DIS_CMD_BTN_FACT 0X2100 // 菜单 恢复出厂设置
|
||||
#define DIS_CMD_BTN_REST 0X2110 // 菜单 重启
|
||||
#define DIS_CMD_BTN_SETMIN 0X2120 // 菜单 设为最小
|
||||
#define DIS_CMD_BTN_SETMIN 0X2120 // 菜单 设为最
|
||||
#define DIS_CMD_BTN_CLREXC 0X2130 // 菜单 解除报警
|
||||
|
||||
// 动态图标
|
||||
|
||||
@@ -68,7 +72,7 @@
|
||||
#define DIS_CSTE_LOAD 0X3010 // 荷重仪状态
|
||||
#define DIS_CSTE_PLUS 0X3020 // 编码器状态
|
||||
#define DIS_CSTE_NET 0X3030 // 网络状态
|
||||
#define DIS_CSTE_MOTOR 0X3040 // 电机状态
|
||||
#define DIS_CSTE_MOTOR 0X3040 // 电机状态
|
||||
|
||||
#define DIS_CMD_DOW_SUCC 0X4F4A // "OK"
|
||||
|
||||
@@ -84,6 +88,7 @@
|
||||
#define DIS_TYPE_SWPAGE 0x03
|
||||
#define DIS_TYPE_WD_BYTES 0x04
|
||||
#define DIS_TYPE_WD_ICON 0x05
|
||||
#define DIS_TYPE_WD_AUDIO 0x06
|
||||
|
||||
#define DIS_STE_INVALID 0 // 无效的
|
||||
#define DIS_STE_SUCCSEE 1 // 成功 绿色
|
||||
|
||||
+262
-30
@@ -15,6 +15,10 @@ ALIGN (RT_ALIGN_SIZE)
|
||||
static char thread_stack[4096];
|
||||
static struct rt_thread display_thread;
|
||||
|
||||
#if !defined(LOG_TAG)
|
||||
#define LOG_TAG "lcd"
|
||||
#endif
|
||||
#include <elog.h>
|
||||
|
||||
static rt_timer_t timer;
|
||||
|
||||
@@ -26,6 +30,8 @@ static struct
|
||||
int identity;
|
||||
} s_driver;
|
||||
|
||||
|
||||
static void dis_write_usrpwd (char *pass);
|
||||
static void view_rx_done (void)
|
||||
{
|
||||
rt_event_send (gUartEvents, EVENT_UART_VIEW_RX);
|
||||
@@ -126,6 +132,18 @@ static int DisPreparePacket (DisDataType_t ddtt, char *buf, int maxLen)
|
||||
break;
|
||||
|
||||
}
|
||||
case DIS_TYPE_WD_AUDIO:
|
||||
{
|
||||
buf[tx_size++] = 0x82;
|
||||
buf[tx_size++] = 0x00; // 寄存器地址高位
|
||||
buf[tx_size++] = 0xA0; // 寄存器地址高位
|
||||
|
||||
buf[tx_size++] = (char)ddtt.Int.Int; // 寄存器数据高位
|
||||
buf[tx_size++] = 0x01; // 寄存器数据高位
|
||||
buf[tx_size++] = 0x40; // 寄存器数据高位
|
||||
buf[tx_size++] = 0x00; // 寄存器数据高位
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -164,6 +182,10 @@ static void disctrl_handle (char *data, int length)
|
||||
}
|
||||
case DIS_CMD_BTN_DUP: // 调试界面上升
|
||||
{
|
||||
if (s_driver.identity == 0) // 用户无此权限
|
||||
{
|
||||
break;
|
||||
}
|
||||
mail.Type = MAIL_SLUICE_SUP;
|
||||
mail.index = 0;
|
||||
rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
|
||||
@@ -171,6 +193,10 @@ static void disctrl_handle (char *data, int length)
|
||||
}
|
||||
case DIS_CMD_BTN_DDOWN: // 调试界面下降
|
||||
{
|
||||
if (s_driver.identity == 0) // 用户无此权限
|
||||
{
|
||||
break;
|
||||
}
|
||||
mail.Type = MAIL_SLUICE_SDW;
|
||||
mail.index = 0;
|
||||
rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
|
||||
@@ -178,9 +204,10 @@ static void disctrl_handle (char *data, int length)
|
||||
}
|
||||
case DIS_CMD_BTN_DSTOP: // 调试界面停止
|
||||
{
|
||||
mail.Type = MAIL_SLUICE_STP;
|
||||
mail.index = 0;
|
||||
rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
|
||||
OsSendMail(gSluiceMail,MAIL_SLUICE_STP,0);
|
||||
// mail.Type = MAIL_SLUICE_STP;
|
||||
// mail.index = 0;
|
||||
// rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
|
||||
break;
|
||||
}
|
||||
case DIS_CMD_BTN_DUNLOCK: // 调试界面解锁
|
||||
@@ -226,7 +253,7 @@ static void disctrl_handle (char *data, int length)
|
||||
break;
|
||||
}
|
||||
// 5A A5 0A 83 10 30 03 30 31 32 33 FF FF
|
||||
case DIS_CNUM_PASS:
|
||||
case DIS_CNUM_PASS: // 登录成功
|
||||
{
|
||||
if ( (rt_memcmp (&data[index], (char *) s_driver.userpwd, 6) == 0)) // 用户密码
|
||||
{
|
||||
@@ -235,18 +262,24 @@ static void disctrl_handle (char *data, int length)
|
||||
ddtt.Int.Int = 0x0004;
|
||||
tx_size = DisPreparePacket (ddtt, txbuf, 100);
|
||||
MX_UART_PutBuffer (&g_ViewDrv, txbuf, tx_size);
|
||||
OsSendMail(gViewMail,MAIL_VIEW_AUDIO,MAIL_AUDIO_LOGIN_SUC) ;
|
||||
}
|
||||
if ( (rt_memcmp (&data[index], (char *) s_driver.syspwd, 6) == 0)) // 用户密码
|
||||
else if ( (rt_memcmp (&data[index], (char *) s_driver.syspwd, 6) == 0)) // 用户密码
|
||||
{
|
||||
s_driver.identity = 1;
|
||||
ddtt.type = DIS_TYPE_SWPAGE;
|
||||
ddtt.Int.Int = 0x0004;
|
||||
tx_size = DisPreparePacket (ddtt, txbuf, 100);
|
||||
MX_UART_PutBuffer (&g_ViewDrv, txbuf, tx_size);
|
||||
OsSendMail(gViewMail,MAIL_VIEW_AUDIO,MAIL_AUDIO_LOGIN_ADM) ;
|
||||
}
|
||||
else
|
||||
{
|
||||
OsSendMail(gViewMail,MAIL_VIEW_AUDIO,MAIL_AUDIO_LOGIN_FIL) ;
|
||||
}
|
||||
break;
|
||||
}
|
||||
// 设置提闸开度
|
||||
// 输入提闸开度
|
||||
case DIS_CNUM_SLSET:
|
||||
{
|
||||
a = (uint16_t) data[index + 2] * 256 + (uint16_t) data[index + 3];
|
||||
@@ -258,6 +291,17 @@ static void disctrl_handle (char *data, int length)
|
||||
//rt_event_send (gCtrlEvents, EVENT_CTRL_SET_OPT_SLU);
|
||||
break;
|
||||
}
|
||||
// case DIS_CNUM_SLSET:
|
||||
// {
|
||||
// a = (uint16_t) data[index + 2] * 256 + (uint16_t) data[index + 3];
|
||||
// SluiceData[0].sopen = a * 10;
|
||||
// //SluiceData[gMqttDrv.rx_index].sopen = datak / 10;
|
||||
// mail.Type = MAIL_SLUICE_OPT;
|
||||
// mail.index = 0;
|
||||
// rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
|
||||
// //rt_event_send (gCtrlEvents, EVENT_CTRL_SET_OPT_SLU);
|
||||
// break;
|
||||
// }
|
||||
// 83 10 70 05 30 30 30 31 30 30 30 31 FF FF
|
||||
case DIS_CASCII_DEVID: // 设置设备编码
|
||||
{
|
||||
@@ -272,27 +316,29 @@ static void disctrl_handle (char *data, int length)
|
||||
}
|
||||
case DIS_CASCII_PASS:
|
||||
{
|
||||
char password[7] = {0};
|
||||
if (s_driver.identity == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
// if (s_user_role != 1)
|
||||
// break;
|
||||
// if (length != 12)
|
||||
// {
|
||||
// DisWritePass (SysInfo.LoginPass, QUEUE);
|
||||
// return;
|
||||
// }
|
||||
|
||||
if (length != 12)
|
||||
{
|
||||
// DisWritePass (SysInfo.LoginPass, QUEUE);
|
||||
return;
|
||||
}
|
||||
// // 校验密码的合法性,只能出现数字
|
||||
// for (int i = 0; i < 6; i++)
|
||||
// {
|
||||
// if (data[index + i] > '9' || data[index + i] < '0')
|
||||
// {
|
||||
// DisWritePass (SysInfo.LoginPass, QUEUE);
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
// SysSetLoginPass ( (char *) &data[index], length - 6);
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
if (data[index + i] > '9' || data[index + i] < '0')
|
||||
{
|
||||
//DisWritePass (SysInfo.LoginPass, QUEUE);
|
||||
return;
|
||||
}
|
||||
}
|
||||
rt_memcpy(password,&data[index],6);
|
||||
ef_set_env("user_pass",password) ;
|
||||
dis_write_usrpwd(password);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -319,6 +365,63 @@ static void disctrl_handle (char *data, int length)
|
||||
ef_set_env ("max_open", setstr);
|
||||
break;
|
||||
}
|
||||
case DIS_CNUM_1PROT: // 修改1级保护
|
||||
{
|
||||
if (s_driver.identity == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
union
|
||||
{
|
||||
uint32_t Int;
|
||||
uint8_t Byte[4];
|
||||
} Int;
|
||||
Int.Byte[3] = data[index++];
|
||||
Int.Byte[2] = data[index++];
|
||||
Int.Byte[1] = data[index++];
|
||||
Int.Byte[0] = data[index++];
|
||||
rt_sprintf (setstr, "%d", Int.Int);
|
||||
ef_set_env ("curr1", setstr);
|
||||
break;
|
||||
}
|
||||
case DIS_CNUM_2PROT: // 修改1级保护
|
||||
{
|
||||
if (s_driver.identity == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
union
|
||||
{
|
||||
uint32_t Int;
|
||||
uint8_t Byte[4];
|
||||
} Int;
|
||||
Int.Byte[3] = data[index++];
|
||||
Int.Byte[2] = data[index++];
|
||||
Int.Byte[1] = data[index++];
|
||||
Int.Byte[0] = data[index++];
|
||||
rt_sprintf (setstr, "%d", Int.Int);
|
||||
ef_set_env ("curr2", setstr);
|
||||
break;
|
||||
}
|
||||
case DIS_CNUM_PROTK: // 修改1级保护
|
||||
{
|
||||
if (s_driver.identity == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
union
|
||||
{
|
||||
uint32_t Int;
|
||||
uint8_t Byte[4];
|
||||
} Int;
|
||||
Int.Byte[3] = data[index++];
|
||||
Int.Byte[2] = data[index++];
|
||||
Int.Byte[1] = data[index++];
|
||||
Int.Byte[0] = data[index++];
|
||||
rt_sprintf (setstr, "%d", Int.Int);
|
||||
ef_set_env ("openk", setstr);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -353,6 +456,18 @@ static void dis_write_ttflow (uint32_t ttflow)
|
||||
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||
}
|
||||
|
||||
// 更新电流
|
||||
static void dis_write_current (float current)
|
||||
{
|
||||
DisDataType_t ddtt;
|
||||
char tx_buf[128], p;
|
||||
ddtt.Addr.addr = DIS_CNUM_DBG_CUR;
|
||||
ddtt.type = DIS_TYPE_WD_FLOAT;
|
||||
ddtt.Float.Float = current;
|
||||
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||
}
|
||||
|
||||
// 更新瞬时流量
|
||||
static void dis_write_mmflow (float mmFlow)
|
||||
{
|
||||
@@ -389,6 +504,33 @@ void dis_write_open (float open)
|
||||
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||
}
|
||||
|
||||
// 更新闸门开度 到调试界面
|
||||
void dis_write_open2debug (int open)
|
||||
{
|
||||
DisDataType_t ddtt;
|
||||
char tx_buf[128], p;
|
||||
ddtt.Addr.addr = DIS_CNUM_DBG_OPEN;
|
||||
ddtt.type = DIS_TYPE_WD_INT;
|
||||
ddtt.Int.Int = open;
|
||||
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||
}
|
||||
|
||||
|
||||
// 播报语音 参数,第几段音频
|
||||
|
||||
void dis_write_audio (int k)
|
||||
{
|
||||
DisDataType_t ddtt;
|
||||
char tx_buf[128], p;
|
||||
//ddtt.Addr.addr = DIS_CNUM_SLGET;
|
||||
ddtt.type = DIS_TYPE_WD_AUDIO;
|
||||
ddtt.Int.Int = k;
|
||||
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||
elog_hexdump("lcd",16,tx_buf,p);
|
||||
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||
}
|
||||
|
||||
// 更新闸门荷重
|
||||
void dis_write_load (float load)
|
||||
{
|
||||
@@ -426,9 +568,52 @@ void dis_write_slmaxopen (uint32_t ecode)
|
||||
ddtt.Int.Int = ecode;
|
||||
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||
|
||||
ddtt.Addr.addr = DIS_CNUM_MAX_OPEN;
|
||||
ddtt.type = DIS_TYPE_WD_INT;
|
||||
ddtt.Int.Int = ecode/10;
|
||||
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||
//DIS_CNUM_MAX_OPEN
|
||||
}
|
||||
|
||||
|
||||
// 更新一级保护
|
||||
void dis_write_1prot (uint32_t data)
|
||||
{
|
||||
DisDataType_t ddtt;
|
||||
char tx_buf[128], p;
|
||||
ddtt.Addr.addr = DIS_CNUM_1PROT;
|
||||
ddtt.type = DIS_TYPE_WD_INT;
|
||||
ddtt.Int.Int = data;
|
||||
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||
}
|
||||
|
||||
// 更新二级保护
|
||||
void dis_write_2prot (uint32_t data)
|
||||
{
|
||||
DisDataType_t ddtt;
|
||||
char tx_buf[128], p;
|
||||
ddtt.Addr.addr = DIS_CNUM_2PROT;
|
||||
ddtt.type = DIS_TYPE_WD_INT;
|
||||
ddtt.Int.Int = data;
|
||||
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||
}
|
||||
|
||||
// 更新二级保护
|
||||
void dis_write_openk (uint32_t data)
|
||||
{
|
||||
DisDataType_t ddtt;
|
||||
char tx_buf[128], p;
|
||||
ddtt.Addr.addr = DIS_CNUM_PROTK;
|
||||
ddtt.type = DIS_TYPE_WD_INT;
|
||||
ddtt.Int.Int = data;
|
||||
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||
}
|
||||
|
||||
// 发送给屏幕设备编号
|
||||
// 参数1:设备编号
|
||||
// 参数2:是否通过队列写入
|
||||
@@ -503,7 +688,7 @@ void dis_write_net_ste (int ste)
|
||||
}
|
||||
|
||||
// 修改电机状态
|
||||
void dis_write_motor_ste (int ste, int isqueue)
|
||||
void dis_write_motor_ste (int ste)
|
||||
{
|
||||
DisDataType_t ddtt;
|
||||
char tx_buf[128], p;
|
||||
@@ -551,12 +736,24 @@ void diw_write_load_ste (int ste)
|
||||
}
|
||||
|
||||
|
||||
void dis_write_err (int err)
|
||||
{
|
||||
DisDataType_t ddtt;
|
||||
char tx_buf[128], p;
|
||||
ddtt.type = DIS_TYPE_WD_INT;
|
||||
ddtt.Addr.addr = DIS_CNUM_DBG_ERR;
|
||||
ddtt.Int.Int = err;
|
||||
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void thread_entry (void * argument)
|
||||
{
|
||||
char tx_buf[128], p;
|
||||
DisDataType_t ddtt;
|
||||
rt_kprintf ("%s was start!\r\n", __FILE__);
|
||||
log_i ("display was start!");
|
||||
g_ViewDrv.rxdone = view_rx_done;
|
||||
g_ViewDrv.BaudRate = 115200;
|
||||
MX_UART_Init (&g_ViewDrv);
|
||||
@@ -571,6 +768,15 @@ static void thread_entry (void * argument)
|
||||
s_driver.identity = 0;
|
||||
s = ef_get_env ("max_open");
|
||||
int32_t max_open = atoi (s);
|
||||
|
||||
s = ef_get_env ("curr1");
|
||||
int32_t curr1 = atoi (s);
|
||||
|
||||
s = ef_get_env ("curr2");
|
||||
int32_t curr2 = atoi (s);
|
||||
|
||||
s = ef_get_env ("openk");
|
||||
int32_t openk = atoi (s);
|
||||
// 载入参数
|
||||
dis_write_divice_id ( (char *) s_driver.device_id);
|
||||
dis_write_ipaddr ("mqtt.zyjzjs.cn");
|
||||
@@ -582,6 +788,14 @@ static void thread_entry (void * argument)
|
||||
dis_write_net_ste (0);
|
||||
dis_write_load (0);
|
||||
dis_write_code (SluiceData[0].ecode);
|
||||
dis_write_audio(0);
|
||||
|
||||
dis_write_1prot (curr1);
|
||||
|
||||
// 更新二级保护
|
||||
dis_write_2prot (curr2);
|
||||
// 更新二级保护
|
||||
dis_write_openk (openk) ;
|
||||
rt_timer_start (timer);
|
||||
while (1)
|
||||
{
|
||||
@@ -591,14 +805,26 @@ static void thread_entry (void * argument)
|
||||
{
|
||||
case MAIL_VIEW_FLUSH:
|
||||
// 刷新闸门开度
|
||||
|
||||
|
||||
//
|
||||
dis_write_open ( (float) SluiceData[0].gopen / 10);
|
||||
dis_write_load (0);
|
||||
dis_write_mmflow (0);
|
||||
dis_write_mmspeed (0);
|
||||
dis_write_ttflow (0);
|
||||
// dis_write_load ((float)WaterData[0].thisLevel/10); // 荷重或者压力
|
||||
dis_write_mmflow ((float)WaterData[0].thisFlow/100/3600);
|
||||
dis_write_mmspeed ((float)WaterData[0].thisLevel/100);
|
||||
dis_write_ttflow (WaterData[0].ttWater/100);
|
||||
dis_write_code (SluiceData[0].ecode);
|
||||
dis_write_motor_ste(1);
|
||||
dis_write_current ((float)SluiceData[0].currt/100);
|
||||
dis_write_open2debug(SluiceData[0].gopen);
|
||||
dis_write_load((float)SluiceData[0].lload/1000);
|
||||
dis_write_err(SluiceData[0].error); // SluiceData[i].error
|
||||
// dis_write_open ( (float)WaterData[0].thisLevel/1000);
|
||||
// dis_write_load ((float)WaterData[1].thisLevel/1000); // 荷重或者压力
|
||||
// dis_write_mmspeed ((float)WaterData[2].thisLevel/1000);
|
||||
// dis_write_audio(2);
|
||||
break;
|
||||
case MAIL_VIEW_READSL:
|
||||
case MAIL_VIEW_READSL: // 读取闸门开度
|
||||
ddtt.type = DIS_TYPE_RD;
|
||||
ddtt.Addr.addr = DIS_CNUM_SLSET;
|
||||
ddtt.Len = 2;
|
||||
@@ -608,14 +834,19 @@ static void thread_entry (void * argument)
|
||||
case MAIL_VIEW_LOGIN: // 登录
|
||||
|
||||
break;
|
||||
case MAIL_VIEW_NET_STE:
|
||||
case MAIL_VIEW_NET_STE: // 刷新网络状态
|
||||
ddtt.type = DIS_TYPE_WD_ICON;
|
||||
ddtt.Addr.addr = DIS_CSTE_NET;
|
||||
ddtt.Int.Int = mail.index;
|
||||
p = DisPreparePacket (ddtt, tx_buf, 128);
|
||||
MX_UART_PutBuffer (&g_ViewDrv, tx_buf, p);
|
||||
break;
|
||||
case MAIL_VIEW_AUDIO:
|
||||
dis_write_audio(mail.index);
|
||||
break;
|
||||
default:
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -625,6 +856,7 @@ static void thread_entry (void * argument)
|
||||
|
||||
if (RT_EOK == rt_event_recv (gUartEvents, EVENT_UART_VIEW_RX, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, 300, RT_NULL)) // 数据接受失败,上报异常状态
|
||||
{
|
||||
elog_hexdump("lcd",16,g_ViewDrv.rx_buffer,g_ViewDrv.rx_size);
|
||||
for (int i = 0; i < g_ViewDrv.rx_size; i++)
|
||||
{
|
||||
if (g_ViewDrv.rx_buffer[i] == 0x5A)
|
||||
|
||||
+19
-4
@@ -35,6 +35,11 @@ ALIGN (RT_ALIGN_SIZE)
|
||||
static char thread_stack[2048];
|
||||
static struct rt_thread os_app;
|
||||
|
||||
#if !defined(LOG_TAG)
|
||||
#define LOG_TAG "os_app"
|
||||
#endif
|
||||
#include <elog.h>
|
||||
|
||||
static rt_timer_t locktimer;
|
||||
static void locktimerouter (void* parameter)
|
||||
{
|
||||
@@ -81,10 +86,10 @@ static void thread_entry (void *parameter)
|
||||
uint32_t id1 = HAL_GetUIDw0();
|
||||
uint32_t id2 = HAL_GetUIDw1();
|
||||
uint32_t id3 = HAL_GetUIDw2();
|
||||
rt_kprintf ("ID:%X %X %X\r\n", id1, id2, id3);
|
||||
rt_kprintf ("Version:%s,%s\r\n",__DATE__,__TIME__);
|
||||
rt_kprintf ("os-app running !\r\n");
|
||||
|
||||
log_i ("ID:%08X %08X %08X", id1, id2, id3);
|
||||
log_i ("Version:%s,%s",__DATE__,__TIME__);
|
||||
log_i ("os-app running !");
|
||||
//netWorkAesInit();
|
||||
while (1)
|
||||
{
|
||||
rt_thread_mdelay (500);
|
||||
@@ -127,4 +132,14 @@ void OsShellTask (void * argument)
|
||||
|
||||
|
||||
|
||||
void OsSendMail(rt_mailbox_t box,uint16_t type,uint16_t index)
|
||||
{
|
||||
TypeIndexMail_t mail;
|
||||
mail.Type = type;
|
||||
mail.index = index;
|
||||
rt_mb_send (box, * ( (uint32_t*) &mail));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
+29
-10
@@ -90,6 +90,9 @@ void MJEth1ThreadStart (void);
|
||||
void UpgradeThreadStart (void);
|
||||
void RtcThreadStart (void);
|
||||
|
||||
|
||||
void OsSendMail(rt_mailbox_t box,uint16_t type,uint16_t index);
|
||||
|
||||
#define EVENT_CTRL_SET_OPT_SLU (1U<< 0) // 发送开度控制到提闸线程
|
||||
#define EVENT_CTRL_SET_STP_SLU (1U<< 1) // 发送停止控制到提闸线程
|
||||
#define EVENT_CTRL_SET_SUP_SLU (1U<< 2) // 发送上升控制到提闸线程
|
||||
@@ -124,16 +127,19 @@ void RtcThreadStart (void);
|
||||
#define EVENT_TRIG_COMM_RST (1U << 7) // MQTT 发送数据
|
||||
#define EVENT_TRIG_UPGRADE_RX (1U << 8) // MQTT 接受到数据
|
||||
#define EVENT_TRIG_NETMODE_TX2 (1U << 9) // 通过网络模块向通道2发送数据
|
||||
#define EVENT_TRIG_CAT1_SHUT (1U << 10) // 通过4G 模块关机
|
||||
#define EVENT_TRIG_ETH_SHUT (1U << 11) // 通过Eth 模块关机
|
||||
|
||||
|
||||
#define MAIL_COMM_HEART 0
|
||||
#define MAIL_COMM_REGIST 1
|
||||
#define MAIL_COMM_STAND 2
|
||||
#define MAIL_COMM_SLUICE 3
|
||||
#define MAIL_COMM_UPACK 4 // 提闸的ACK
|
||||
#define MAIL_COMM_SLACK 5 // 其他的ACK
|
||||
#define MAIL_COMM_READPARA 6 // 读取参数
|
||||
#define MAIL_COMM_ACK 7 // 读取参数
|
||||
#define MAIL_COMM_READPARA 4 // 读取参数
|
||||
#define MAIL_COMM_UPACK 5 // 升级的ACK
|
||||
#define MAIL_COMM_SLACK 6 // 提闸的ACK
|
||||
#define MAIL_COMM_WRACK 7 // 修改参数ACK
|
||||
#define MAIL_COMM_FACACK 8 // 出厂设置ACK
|
||||
|
||||
#define MAIL_SLUICE_OPT 0
|
||||
#define MAIL_SLUICE_STP 1
|
||||
@@ -146,12 +152,25 @@ void RtcThreadStart (void);
|
||||
#define MAIL_CT_SDW 2 // 下降
|
||||
#define MAIL_CT_STP 3 // 停止
|
||||
|
||||
#define MAIL_VIEW_LOGIN 1 // 登录成功 需要跳转页面
|
||||
#define MAIL_VIEW_FLUSH 2 // 刷新界面显示
|
||||
#define MAIL_VIEW_READSL 3 // 读取闸门开度
|
||||
#define MAIL_VIEW_COD_STE 4 // 更新编码器状态
|
||||
#define MAIL_VIEW_NET_STE 5 // 更新网络状态
|
||||
#define MAIL_VIEW_SLU_STE 6 // 更新闸门状态
|
||||
#define MAIL_AUDIO_WEL 0 // 执行
|
||||
#define MAIL_AUDIO_LOAD 1 // 下降
|
||||
#define MAIL_AUDIO_OPEN 2 // 上升
|
||||
#define MAIL_AUDIO_UP 3 // 停止
|
||||
#define MAIL_AUDIO_DOWN 4 // 停止
|
||||
#define MAIL_AUDIO_STOP 5 // 停止
|
||||
#define MAIL_AUDIO_LOGIN_SUC 6 // 停止
|
||||
#define MAIL_AUDIO_LOGIN_FIL 7 // 停止
|
||||
#define MAIL_AUDIO_LOGIN_ADM 8 // 停止
|
||||
|
||||
|
||||
#define MAIL_VIEW_LOGIN 1 // 登录成功 需要跳转页面
|
||||
#define MAIL_VIEW_FLUSH 2 // 刷新界面显示
|
||||
#define MAIL_VIEW_READSL 3 // 读取闸门开度
|
||||
#define MAIL_VIEW_COD_STE 4 // 更新编码器状态
|
||||
#define MAIL_VIEW_NET_STE 5 // 更新网络状态
|
||||
#define MAIL_VIEW_SLU_STE 6 // 更新闸门状态
|
||||
#define MAIL_VIEW_AUDIO 7 // 播放语音
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
+156
-35
@@ -2,54 +2,175 @@
|
||||
#include "math.h"
|
||||
#include "easyflash.h"
|
||||
#include "stdlib.h"
|
||||
#include "cjson.h"
|
||||
#include "rtthread.h"
|
||||
#include "user_config.h"
|
||||
|
||||
|
||||
#if !defined(LOG_TAG)
|
||||
#define LOG_TAG "simu"
|
||||
#endif
|
||||
#include <elog.h>
|
||||
|
||||
static const ParShallInfo_t ParShallTale[] =
|
||||
{
|
||||
{.w = 0, .c = 0, .m = 0},
|
||||
{.w = 0.152, .c = 0.381, .m = 1.58 , .minLeve = 0.03, .maxLeve = 0.45, .minFlow = 1.5 / 1000, .maxFlow = 100 / 1000},
|
||||
{.w = 0.25, .c = 0.561, .m = 1.513 , .minLeve = 0.03, .maxLeve = 0.60, .minFlow = 3.0 / 1000, .maxFlow = 250 / 1000},
|
||||
{.w = 0.30, .c = 0.679, .m = 1.521 , .minLeve = 0.03, .maxLeve = 0.75, .minFlow = 3.5 / 1000, .maxFlow = 400 / 1000},
|
||||
{.w = 0.45, .c = 1.038, .m = 1.537 , .minLeve = 0.03, .maxLeve = 0.75, .minFlow = 4.5 / 1000, .maxFlow = 630 / 1000},
|
||||
{.w = 0.60, .c = 1.403, .m = 1.548 , .minLeve = 0.05, .maxLeve = 0.75, .minFlow = 12.5 / 1000, .maxFlow = 850 / 1000},
|
||||
{.w = 0.75, .c = 1.772, .m = 1.557 , .minLeve = 0.06, .maxLeve = 0.75, .minFlow = 25.0 / 1000, .maxFlow = 1100 / 1000},
|
||||
{.w = 0.90, .c = 2.147, .m = 1.565 , .minLeve = 0.06, .maxLeve = 0.75, .minFlow = 30.0 / 1000, .maxFlow = 1250 / 1000},
|
||||
{.w = 1.00, .c = 2.397, .m = 1.569 , .minLeve = 0.06, .maxLeve = 0.80, .minFlow = 30.0 / 1000, .maxFlow = 1500 / 1000},
|
||||
{.w = 1.20, .c = 2.904, .m = 1.577 , .minLeve = 0.06, .maxLeve = 0.80, .minFlow = 35.0 / 1000, .maxFlow = 2000 / 1000},
|
||||
{.w = 1.50, .c = 3.668, .m = 1.586 , .minLeve = 0.06, .maxLeve = 0.80, .minFlow = 45.0 / 1000, .maxFlow = 2500 / 1000},
|
||||
{.w = 1.80, .c = 4.440, .m = 1.593 , .minLeve = 0.08, .maxLeve = 0.80, .minFlow = 80.0 / 1000, .maxFlow = 3000 / 1000},
|
||||
{.w = 2.10, .c = 5.222, .m = 1.599 , .minLeve = 0.08, .maxLeve = 0.80, .minFlow = 95.0 / 1000, .maxFlow = 3600 / 1000},
|
||||
{.w = 2.40, .c = 6.004, .m = 1.605 , .minLeve = 0.08, .maxLeve = 0.80, .minFlow = 100.0 / 1000,.maxFlow = 4000 / 1000},
|
||||
|
||||
{.w = 3.05, .c = 7.463, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.07, .minFlow = 0.16, .maxFlow = 8.28},
|
||||
{.w = 3.66, .c = 8.859, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.37, .minFlow = 0.19, .maxFlow = 14.68},
|
||||
{.w = 4.57, .c = 10.96, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.67, .minFlow = 0.23, .maxFlow = 25.04},
|
||||
{.w = 6.10, .c = 14.45, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.83, .minFlow = 0.31, .maxFlow = 37.97},
|
||||
|
||||
{.w = 7.62, .c = 17.94, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.83, .minFlow = 0.38, .maxFlow = 47.16},
|
||||
{.w = 9.14, .c = 21.44, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.83, .minFlow = 0.46, .maxFlow = 56.33},
|
||||
{.w = 12.19, .c = 28.43, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.83, .minFlow = 0.60, .maxFlow = 74.70},
|
||||
{.w = 15.24, .c = 35.41, .m = 1.6 , .minLeve = 0.09, .maxLeve = 1.83, .minFlow = 0.75, .maxFlow = 93.04},
|
||||
|
||||
} ;
|
||||
|
||||
// 两点法计算k,b
|
||||
//uint16_t math_k(uint32_t x0,uint32_t y0,uint32_t x1,uint32_t y1)
|
||||
//{
|
||||
// uint16_t k;
|
||||
// k = (y0-x0)/(y1-x1);
|
||||
// return k;
|
||||
//}
|
||||
double math_k(double x0,double y0,double x1,double y1)
|
||||
{
|
||||
double k;
|
||||
k = (y1-y0)/(x1-x0);
|
||||
return k;
|
||||
}
|
||||
|
||||
//uint16_t math_k(uint32_t x0,uint32_t y0,uint32_t x1,uint32_t y1)
|
||||
//{
|
||||
// uint16_t k;
|
||||
// k = (y0-x0)/(y1-x1);
|
||||
// return k;
|
||||
//}
|
||||
double math_b(double k,double x,double y)
|
||||
{
|
||||
double b;
|
||||
b = y - (k*x);
|
||||
return b;
|
||||
}
|
||||
|
||||
//WaterLeveInfo_t Info = {
|
||||
// .Y[0] = 2,
|
||||
//};
|
||||
|
||||
// k=(y2-y1)/(x2-x1)
|
||||
|
||||
typedef struct SimflowPara_t
|
||||
{
|
||||
double leve[11];
|
||||
double flow[11];
|
||||
int pallid ;
|
||||
}SimflowPara_t;
|
||||
|
||||
// 水位流量关系表
|
||||
//uint16_t WaterLeveCalc(int leve,int Open)
|
||||
//{
|
||||
// for (int i =0;i< 100;i++)
|
||||
// {
|
||||
// if (LeveInfo.X[i] > Open)
|
||||
// {
|
||||
// for (int j =0;j < 100;i++)
|
||||
// {
|
||||
// if (LeveInfo.Key[i].Y[j] >leve)
|
||||
// {
|
||||
// return LeveInfo.Key[i].Key[j];
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return 0;
|
||||
//}
|
||||
static SimflowPara_t g_para = {
|
||||
.leve = {0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1},
|
||||
.flow = {0,0.036,0.105,0.200,0.317,0.454,0.713,0.897,0.955,1.015,1.025},
|
||||
.pallid = 7
|
||||
};
|
||||
|
||||
|
||||
|
||||
int32_t ParShallCalc(int index,double leve)
|
||||
// 水位流量关系表初始化
|
||||
void SimuFlowInit(void)
|
||||
{
|
||||
char * p;
|
||||
double flow = 0;
|
||||
flow = ParShallTale[index].c * pow(leve,ParShallTale[index].m);
|
||||
return (int32_t )(flow *100);
|
||||
char *p ;
|
||||
p = ef_get_env ("parshall");
|
||||
g_para.pallid = atoi (p); // 巴歇尔流量计槽号
|
||||
|
||||
rt_kprintf("parshall:%d\r\n",g_para.pallid);
|
||||
|
||||
#ifdef SYK_06_18_SM
|
||||
ef_set_env ("simu_flow","1");
|
||||
ef_set_env("level","[0.1,0.18,0.26,0.34,0.42,0.5,0.58,0.66,0.74,0.8]");
|
||||
ef_set_env("flow","[0.031,0.081,0.149,0.233,0.33,0.44,0.562,0.695,0.84,0.955]");
|
||||
#endif
|
||||
|
||||
#ifdef SYK_08_18_SM
|
||||
ef_set_env ("simu_flow","1");
|
||||
ef_set_env("level","[0.1,0.18,0.26,0.34,0.42,0.5,0.58,0.66,0.74,0.8]");
|
||||
ef_set_env("flow","[0.043,0.113,0.206,0.32,0.453,0.603,0.769,0.951,1.147,1.304]");
|
||||
#endif
|
||||
|
||||
#ifdef SYK_10_18_SM
|
||||
ef_set_env ("simu_flow","1");
|
||||
ef_set_env("level","[0.1,0.18,0.26,0.34,0.42,0.5,0.58,0.66,0.74,0.8]");
|
||||
ef_set_env("flow","[0.058,0.146,0.261,0.397,0.553,0.728,0.918,1.125,1.346,1.522]");
|
||||
#endif
|
||||
cJSON *root = NULL;
|
||||
// 水位表
|
||||
p = ef_get_env ("level") ;
|
||||
root = cJSON_Parse (p);
|
||||
int size = cJSON_GetArraySize (root);
|
||||
if(size != 10)
|
||||
{
|
||||
cJSON_Delete (root);
|
||||
return ;
|
||||
}
|
||||
for (int i = 1; i < 11; i++)
|
||||
{
|
||||
g_para.leve[i] = cJSON_GetNumberValue (cJSON_GetArrayItem (root, i-1)); // 接入设备类型
|
||||
}
|
||||
// 流量表
|
||||
p = ef_get_env ("flow") ;
|
||||
root = cJSON_Parse (p);
|
||||
size = cJSON_GetArraySize (root);
|
||||
if(size != 10)
|
||||
{
|
||||
cJSON_Delete (root);
|
||||
return ;
|
||||
}
|
||||
for (int i = 1; i < 11; i++)
|
||||
{
|
||||
g_para.flow[i] = cJSON_GetNumberValue (cJSON_GetArrayItem (root, i-1)); // 接入设备类型
|
||||
}
|
||||
cJSON_Delete (root);
|
||||
rt_kprintf("leve( mm):");
|
||||
for (int i =0; i< 11;i++)
|
||||
{
|
||||
rt_kprintf("%6d,",(int)(g_para.leve[i] * 1000));
|
||||
}
|
||||
rt_kprintf("\r\nflow(dm3):");
|
||||
for (int i =0; i< 11;i++)
|
||||
{
|
||||
rt_kprintf("%6d,",(int)(g_para.flow[i]*1000));
|
||||
}
|
||||
rt_kprintf("\r\n");
|
||||
}
|
||||
|
||||
// 水位流量关系表 单位cm
|
||||
int32_t WaterLeveCalc(double leve)
|
||||
{
|
||||
double k,b;
|
||||
double flow;
|
||||
if((leve == 0) ||(leve >= g_para.leve[10]) )
|
||||
return 0;
|
||||
for (int i =0;i< 11;i++)
|
||||
{
|
||||
if (leve < g_para.leve[i])
|
||||
{
|
||||
k = math_k((double)g_para.leve[i-1],(double)g_para.flow[i-1],(double)g_para.leve[i],(double)g_para.flow[i]) ;
|
||||
b = math_b(k,(double)g_para.leve[i],(double)g_para.flow[i]);
|
||||
flow = k *leve +b;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return (int32_t )(flow *1000);
|
||||
}
|
||||
|
||||
|
||||
int32_t ParShallCalc(double leve)
|
||||
{
|
||||
char * p;
|
||||
double flow = 0;
|
||||
flow = ParShallTale[g_para.pallid].c * pow(leve,ParShallTale[g_para.pallid].m);
|
||||
return (int32_t )(flow *1000);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
#ifndef _SIM_FLOW_H
|
||||
#define _SIM_FLOW_H
|
||||
int32_t ParShallCalc(int index,double leve);
|
||||
|
||||
void SimuFlowInit(void);
|
||||
int32_t ParShallCalc(double leve);
|
||||
int32_t WaterLeveCalc(double leve);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in new issue
Block a user