引入mqtt 引入cjson

This commit is contained in:
2584532475@qq.com committed 2023-11-30 08:10:01 +08:00
1 parent a69c1a58d6
commit f8591b8b99
86 files changed
+12141 -2157

No files matched your search

+91 -88
View File
@@ -11,152 +11,155 @@
#include "usart-board.h"
#include "modbus-s.h"
#include "modbusaddr.h"
#include "data.h"
ALIGN(RT_ALIGN_SIZE)
ALIGN (RT_ALIGN_SIZE)
static char thread_stack[4096];
static struct rt_thread probus_thread;
uint16_t REG_DATA[REG_MAX] = {0x00};
//uint16_t REG_DATA[REG_MAX] = {0x00};
// 寄存器对应的数据
reg_data_t reg_data =
{
.gopen = 56,
.aload = 0,
};
// case ssKHYSet:
// {
// vv = value*10;
// dbg_printf ("MbusSetValue vv:%d\r\n",vv);
// sendcmd[type][4] = ((vv >> 8) & 0xff);
// sendcmd[type][5] = (vv & 0xff);
// vv = bsp_crc_calc16((uint8_t *)sendcmd[type],6);
// sendcmd[type][7] = ((vv >> 8) & 0xff);
// sendcmd[type][6] = (vv & 0xff);
// for(int i = 0;i < 8;i++)
// {
// dbg_printf("%02X ",sendcmd[type][i]);
// }
// dbg_printf("\r\n");
// }
// {0x01, 0x03, 0x00, 0x00, 0x00, 0x06, 0xC5, 0xC8}, // 闸位计读取开度
// {0x01, 0x06, 0x00, 0x07, 0x00, 0x02, 0xE6, 0x69}, // 闸位计设置开度
// {0x01, 0x06, 0x00, 0x04, 0x01, 0x00, 0xC9, 0x9B}, // 启动闸位计
// {0x01, 0x06, 0x00, 0x04, 0x00, 0x00, 0xC8, 0x0B}, // 停止闸位计
static ModBusSlave_t modbus_slave;
static uint8_t modbus_rx_data[32];
static uint8_t modbus_rx_data[256];
static void eth2_data_rxdone(void)
static void eth2_data_rxdone (void)
{
rt_event_send(gUartEvents,EVENT_UART_ETH2_RX);
//rt_kprintf("net_data_rxdone\r\n");
rt_event_send (gUartEvents, EVENT_UART_ETH2_RX);
}
static void probus_handle(uint16_t addr,uint8_t * data)
static void probus_handle (reg_addr_t addr, uint8_t * data)
{
uint32_t data32;
TypeIndexMail_t mail;
switch (addr)
{
case REG_SOPEN: // 设定闸门开度
break;
case REG_SLOPT: // 执行闸门动作
if (data[0] == 0x01) // 执行
{
rt_event_send(gCtrlEvents,EVENT_CTRL_SET_OPEN);
rt_kprintf("probus_handle set open\r\n");
}
else
{
}
break;
default:
break;
case reg_sopen: // 设定闸门开度
data32 = data[0];
data32 = (data32 << 8) + data[1];
SluiceData[0].sopen = data32 * 10;
break;
case reg_slopt: // 执行闸门动作
rt_kprintf ("reg_slopt\r\n");
if (data[0] == 0x01) // 执行
{
rt_kprintf ("reg_slopt\r\n");
mail.Type = MAIL_SLUICE_OPT;
mail.index = 0;
rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
}
else
{
mail.Type = MAIL_SLUICE_STP;
mail.index = 0;
rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
rt_kprintf ("reg_stp\r\n");
}
break;
default:
break;
}
}
static void thread_entry(void * argument)
static void thread_entry (void * argument)
{
int k = 0;
uint8_t txbuff[128] = {0};
int tx_size = 0;
rt_kprintf("%s was start!\r\n",__FILE__);
rt_kprintf ("%s was start!\r\n", __FILE__);
g_ETH2Drv.rxdone = eth2_data_rxdone;
g_ETH2Drv.BaudRate = 115200;
MX_UART_Init(&g_ETH2Drv);
ModbusSlaveInit(&modbus_slave,0x01,modbus_rx_data,REG_DATA,REG_MAX);
MX_UART_Init (&g_ETH2Drv);
ModbusSlaveInit (&modbus_slave, 0x01, modbus_rx_data, (uint16_t *) &reg_data, sizeof (reg_data_t) / 2);
MX_UART_Clear (&g_ETH2Drv);
// 注册网络驱动
// 注册网络驱动
while (1)
{
if( RT_EOK == rt_event_recv( gUartEvents, EVENT_UART_ETH2_RX,RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL ))
while (1)
{
// 从其他数据区域更新到寄存器
reg_data.gopen = SluiceData[0].gopen * 10;
//reg_data.aload = SluiceData[0].lload;
//reg_data.bload = SluiceData[0].rload;
if (RT_EOK == rt_event_recv (gUartEvents, EVENT_UART_ETH2_RX, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL))
{
// rt_kprintf("<<<<<<<<<<<<<<<<<<<<probus2:\r\n");
// for(int i =0; i < g_ETH2Drv.rx_size;i++)
// {
// rt_kprintf("%02X ",g_ETH2Drv.rx_buffer[i]);
// }
// rt_kprintf("\r\n");
k = ModbusSlaveHandle(&modbus_slave,(uint8_t *)g_ETH2Drv.rx_buffer,g_ETH2Drv.rx_size);
//rt_kprintf("k:%d\r\n",k);
if( k == 0)
for (int i = 0; i < g_ETH2Drv.rx_size; i++)
{
switch (modbus_slave.func)
rt_kprintf ("%02x", g_ETH2Drv.rx_buffer[i]);
}
if (g_ETH2Drv.rx_size > 4)
{
k = ModbusSlaveHandle (&modbus_slave, (uint8_t *) g_ETH2Drv.rx_buffer, g_ETH2Drv.rx_size);
//k = 2;
rt_kprintf ("k:%d\r\n", k);
if (k == 0)
{
switch (modbus_slave.func)
{
case 0x03:
tx_size = ModbusSlavePacket(&modbus_slave,txbuff);
tx_size = ModbusSlavePacket (&modbus_slave, txbuff);
// 直接返回当前寄存器中的数据
break;
case 0x06:
//处理对应的事件
probus_handle(modbus_slave.Addr,modbus_slave.data);
probus_handle (modbus_slave.Addr, modbus_slave.data);
// 数据打包回复
tx_size = ModbusSlavePacket(&modbus_slave,txbuff);
tx_size = ModbusSlavePacket (&modbus_slave, txbuff);
break;
default:
tx_size = 0;
break;
}
}
else
{
tx_size = 0;
}
if (tx_size > 0)
{
//rt_kprintf("tx_size :%d\r\n",tx_size);
MX_UART_PutBuffer (&g_ETH2Drv, (char *) txbuff, tx_size);
}
}
else
{
tx_size = 0;
}
if (tx_size > 0)
{
MX_UART_PutBuffer(&g_ETH2Drv,(char *)txbuff,tx_size);
}
MX_UART_Clear(&g_ETH2Drv);
MX_UART_Clear (&g_ETH2Drv);
}
rt_thread_delay(10);
}
rt_thread_mdelay (100);
}
}
void PROBUS_APPThreadStart(void )
void PROBUS_APPThreadStart (void)
{
/* 创建线程1,名称是thread1,入口是thread1_entry*/
rt_thread_init(&probus_thread, "probus_thread",
thread_entry, RT_NULL,
&thread_stack[0],
sizeof(thread_stack),
PROBUS_APP_THREAD_PRIORITY, PROBUS_APP_THREAD_TIMESLICE);
rt_thread_startup(&probus_thread);
rt_thread_init (&probus_thread, "probus_thread",
thread_entry, RT_NULL,
&thread_stack[0],
sizeof (thread_stack),
PROBUS_APP_THREAD_PRIORITY, PROBUS_APP_THREAD_TIMESLICE);
rt_thread_startup (&probus_thread);
return ;
return ;
}