引入mqtt 引入cjson
This commit is contained in:
1 parent
a69c1a58d6
commit
f8591b8b99
86 files changed
+12141
-2157
No files matched your search
+28
-17
@@ -1,31 +1,42 @@
|
||||
#ifndef MODBUS_ADDR_H
|
||||
#ifndef MODBUS_ADDR_H
|
||||
#define MODBUS_ADDR_H
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
|
||||
#define REG_GOPENH 0X0000
|
||||
#define REG_GOPENL 0X0001
|
||||
|
||||
#define REG_ALOADH 0X0002
|
||||
#define REG_ALOADL 0X0003
|
||||
|
||||
#define REG_BLOADH 0X0004
|
||||
#define REG_BLOADL 0X0005
|
||||
|
||||
#define REG_SOPEN 0X0007
|
||||
#define REG_SLOPT 0X0008 // 执行闸门动作
|
||||
typedef struct reg_data_t
|
||||
{
|
||||
uint16_t gopen;
|
||||
uint16_t aload;
|
||||
uint16_t bload;
|
||||
uint16_t bl1;
|
||||
uint16_t bl2;
|
||||
uint16_t bl3;
|
||||
uint16_t bl4;
|
||||
uint16_t sopen;
|
||||
uint16_t slopt;
|
||||
} reg_data_t;
|
||||
|
||||
|
||||
typedef enum reg_addr_t
|
||||
{
|
||||
reg_gopen = 0X0000, // 2¸ö×Ö
|
||||
reg_aload = 0X0001,
|
||||
reg_bload = 0X0002,
|
||||
reg_bl1 = 0X0003,
|
||||
reg_bl2 = 0X0004,
|
||||
reg_bl3 = 0X0005,
|
||||
reg_bl4 = 0X0006,
|
||||
reg_sopen = 0X0007,
|
||||
reg_slopt = 0X0008,
|
||||
} reg_addr_t;
|
||||
|
||||
#define REG_MAX 0X0009
|
||||
|
||||
extern reg_data_t reg_data;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
+6
-6
@@ -278,11 +278,11 @@ void NetTask (void)
|
||||
log_d ("<<<<<<<<<<<<rx_size:%d\r\n", paysize);
|
||||
log_d ("Header: %X%X\r\n", g_rx_data.header[0], g_rx_data.header[1]);
|
||||
log_d ("devid: %02X%02X%02X%02X%02X\r\n",
|
||||
g_rx_data.devid[0],
|
||||
g_rx_data.devid[1],
|
||||
g_rx_data.devid[2],
|
||||
g_rx_data.devid[3],
|
||||
g_rx_data.devid[4]);
|
||||
g_rx_data.devid[0],
|
||||
g_rx_data.devid[1],
|
||||
g_rx_data.devid[2],
|
||||
g_rx_data.devid[3],
|
||||
g_rx_data.devid[4]);
|
||||
log_d ("center: %d,pass:%02X%02X,type:%02X,flag:%04X\r\n", g_rx_data.centerid, g_rx_data.password[0], g_rx_data.password[1], g_rx_data.type, g_rx_data.flag);
|
||||
log_d ("payloadsize:%d\r\n", paysize);
|
||||
log_d ("start:%d,seq:%d\r\n", g_rx_data.payStart, g_rx_data.Payload.synNum);
|
||||
@@ -301,7 +301,7 @@ void NetTask (void)
|
||||
// log3_printf("DevAddr%02X%02X%02X%02X%02X\r\n",rxdata_decode[2],rxdata_decode[3],rxdata_decode[4],rxdata_decode[5],rxdata_decode[6]);
|
||||
// log3_printf("Payload size:%X\r\n",payloadsize);
|
||||
// // 接受到远程升级命令
|
||||
|
||||
|
||||
if (netDownloadHandle (g_rx_data.type, (char *) g_rx_data.Payload.payLoad, paysize - 2) == 0xE0)
|
||||
{
|
||||
g_netinfo.State = YmodemToDo;
|
||||
|
||||
+10
-10
@@ -5,16 +5,16 @@
|
||||
|
||||
|
||||
|
||||
typedef struct netWorkInterface_t
|
||||
{
|
||||
void (*Init) (void);
|
||||
int (*IsConnected) (void);
|
||||
void (*WriteData) (char *, int);
|
||||
int (*ReadData) (char *, int);
|
||||
int (*IsReady) (void);
|
||||
int (*IsIdle) (void);
|
||||
int (*ReSubTopic) (char *);
|
||||
} netWorkInterface_t;
|
||||
//typedef struct netWorkInterface_t
|
||||
//{
|
||||
// void (*Init) (void);
|
||||
// int (*IsConnected) (void);
|
||||
// void (*WriteData) (char *, int);
|
||||
// int (*ReadData) (char *, int);
|
||||
// int (*IsReady) (void);
|
||||
// int (*IsIdle) (void);
|
||||
// int (*ReSubTopic) (char *);
|
||||
//} netWorkInterface_t;
|
||||
|
||||
|
||||
typedef struct NetPacket_t
|
||||
|
||||
+3
-3
@@ -18,7 +18,7 @@ int netDownloadHandle (uint8_t type, char *data, int length)
|
||||
//IntData = ty_byte2int (data, 4);
|
||||
//sprintf(buffer,"open:%02X%02X%02X%02X\r\n",data[0],data[1],data[2],data[3]);
|
||||
//NETSendLog(buffer);
|
||||
|
||||
|
||||
// sprintf(buffer,"open:%02X%02X%02X%02Xopen:%u\r\n",data[0],data[1],data[2],data[3],IntData);
|
||||
// NETSendLog(buffer);
|
||||
// MM_SluiceSetOpen (IntData / 100);
|
||||
@@ -125,7 +125,7 @@ int netDownloadHandle (uint8_t type, char *data, int length)
|
||||
}
|
||||
case 0XE6: // 上升
|
||||
{
|
||||
|
||||
|
||||
//sluice_run_motor(SysInfo.SlMotorType,RunOpen);
|
||||
//NETSendLog("debug runopen");
|
||||
|
||||
@@ -149,7 +149,7 @@ int netDownloadHandle (uint8_t type, char *data, int length)
|
||||
//NETSendLog(buffer);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
+17
-17
@@ -6,9 +6,9 @@
|
||||
|
||||
|
||||
// 网络上报线程
|
||||
void net_task(void)
|
||||
void net_task (void)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ void netWriteSluiceUp (void)
|
||||
tx_size = _651PacketDataSluiceUp (data);
|
||||
NetPacket_t packet;
|
||||
packet.data_size = PP_AddHeader (0x4E, data, tx_size, packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
NET_FifoWritebuffer (packet.data, packet.data_size);
|
||||
//FifoWrite (&g_NetFifo, (char *) &packet, sizeof (packet));
|
||||
// FifoWrite (&g_NetFifo, (unsigned char *) tx_data, tx_size);
|
||||
}
|
||||
@@ -49,7 +49,7 @@ void netWriteFlowReq (void)
|
||||
|
||||
// E0 升级应答 E2 配置应答
|
||||
// 应答E0 回复发送的数据
|
||||
void netWriteAck (uint8_t funccode,int k)
|
||||
void netWriteAck (uint8_t funccode, int k)
|
||||
{
|
||||
NetPacket_t packet;
|
||||
if (k == 1)
|
||||
@@ -60,7 +60,7 @@ void netWriteAck (uint8_t funccode,int k)
|
||||
{
|
||||
packet.data_size = PP_AddHeader (0xE0, "{\"result\":\"error\"}", strlen ("{\"result\":\"error\"}"), packet.data);
|
||||
}
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
NET_FifoWritebuffer (packet.data, packet.data_size);
|
||||
//FifoWrite (&g_NetFifo, (char *) &packet, sizeof (packet));
|
||||
}
|
||||
|
||||
@@ -92,7 +92,7 @@ void NETSendSluiceAck (void)
|
||||
tx_size = _651PacketDataSluiceAck (data);
|
||||
NetPacket_t packet;
|
||||
packet.data_size = PP_AddHeader (0x4E, data, tx_size, packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
NET_FifoWritebuffer (packet.data, packet.data_size);
|
||||
}
|
||||
|
||||
|
||||
@@ -102,7 +102,7 @@ void NETSendLog (char *data)
|
||||
{
|
||||
NetPacket_t packet;
|
||||
packet.data_size = PP_AddHeader (0xEF, data, strlen (data), packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
NET_FifoWritebuffer (packet.data, packet.data_size);
|
||||
|
||||
}
|
||||
|
||||
@@ -117,7 +117,7 @@ void NETSendRegist (void)
|
||||
sprintf (data, "{\"iccid\":\"%s\",\"version\":\"%s\"}", "1234567890", "V1.0.1");
|
||||
NetPacket_t packet;
|
||||
packet.data_size = PP_AddHeader (0xE4, data, strlen (data), packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
NET_FifoWritebuffer (packet.data, packet.data_size);
|
||||
}
|
||||
|
||||
void netWriteUnifData (void)
|
||||
@@ -127,21 +127,21 @@ void netWriteUnifData (void)
|
||||
tx_size = PP_PacketUnifData (data);
|
||||
NetPacket_t packet;
|
||||
packet.data_size = PP_AddHeader (0x31, data, tx_size, packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
NET_FifoWritebuffer (packet.data, packet.data_size);
|
||||
}
|
||||
|
||||
void netWriteHeartData(void)
|
||||
void netWriteHeartData (void)
|
||||
{
|
||||
|
||||
|
||||
char data[128];
|
||||
int tx_size = 0;
|
||||
tx_size = PP_PacketUnifData (data);
|
||||
NetPacket_t packet;
|
||||
packet.data_size = PP_AddHeader (0x2F, data, 4, packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
NET_FifoWritebuffer (packet.data, packet.data_size);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -156,7 +156,7 @@ void netWritebaseParams (void)
|
||||
int tx_size = 0;
|
||||
tx_size = Json651PacketBaseInfo (data, 512);
|
||||
packet.data_size = PP_AddHeader (0xE3, data, strlen (data), packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
NET_FifoWritebuffer (packet.data, packet.data_size);
|
||||
//packet.data_size = PP_AddHeader(0xE3, data, strlen(data), packet.data);
|
||||
log_d ("tx_size = %d\r\n", tx_size);
|
||||
log_d ("data = %s\r\n", data);
|
||||
@@ -172,7 +172,7 @@ void netWriteInterfaceParams (void)
|
||||
int tx_size = 0;
|
||||
tx_size = Json651PacketInterfaceInfo (data, 512);
|
||||
packet.data_size = PP_AddHeader (0xE3, data, strlen (data), packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
NET_FifoWritebuffer (packet.data, packet.data_size);
|
||||
log_d ("tx_size = %d\r\n", tx_size);
|
||||
log_d ("data = %s\r\n", data);
|
||||
}
|
||||
@@ -192,7 +192,7 @@ void netWriteSluiceParams (void)
|
||||
int tx_size = 0;
|
||||
tx_size = Json651PacketSluiceInfo (data, 512);
|
||||
packet.data_size = PP_AddHeader (0xE3, data, strlen (data), packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
NET_FifoWritebuffer (packet.data, packet.data_size);
|
||||
log_d ("tx_size = %d\r\n", tx_size);
|
||||
log_d ("data = %s\r\n", data);
|
||||
}
|
||||
@@ -209,7 +209,7 @@ void netWriteWaterParams (void)
|
||||
int tx_size = 0;
|
||||
tx_size = Json651PacketWaterInfo (data, 512);
|
||||
packet.data_size = PP_AddHeader (0xE3, data, strlen (data), packet.data);
|
||||
NET_FifoWritebuffer(packet.data,packet.data_size);
|
||||
NET_FifoWritebuffer (packet.data, packet.data_size);
|
||||
log_d ("tx_size = %d\r\n", tx_size);
|
||||
log_d ("data = %s\r\n", data);
|
||||
}
|
||||
+295
-82
@@ -10,107 +10,320 @@
|
||||
#include <string.h>
|
||||
#include "usart-board.h"
|
||||
|
||||
#include "mqtt-board.h"
|
||||
#include "network.h"
|
||||
#include "netdrv.h"
|
||||
#include "proto.h"
|
||||
#include "util.h"
|
||||
#include "data.h"
|
||||
#include "disdefine.h"
|
||||
#include "jsonpacket.h"
|
||||
#include "jsonunpack.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
ALIGN(RT_ALIGN_SIZE)
|
||||
|
||||
ALIGN (RT_ALIGN_SIZE)
|
||||
static char thread_stack[4096];
|
||||
static struct rt_thread netapp_thread;
|
||||
|
||||
static rt_event_t gnetEvents;
|
||||
|
||||
#define EVENT_COMM_TX (1U << 0)
|
||||
#define EVENT_COMM_RX (1U << 1) //
|
||||
|
||||
extern MqttDrv_t gMqttDrv;
|
||||
|
||||
|
||||
|
||||
// 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");
|
||||
// }
|
||||
static rt_timer_t timer;
|
||||
|
||||
// {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 enum {
|
||||
netDrvInit = 0, // 初始化网络驱动
|
||||
netDrvJoin = 1, // 等待网络注册成功
|
||||
netDrvSend = 2, // 发送数据
|
||||
netDrvRecv = 3, // 读取数据
|
||||
netDrvIdle = 4, // 读取数据
|
||||
}eDrvStatus;
|
||||
static netWorkInterface_t interface;
|
||||
static uint32_t g_net_5min_timer[SLUICE_COUTN] = {0};
|
||||
static uint32_t g_net_1min_timer[SLUICE_COUTN] = {0};
|
||||
|
||||
static void net_send_frame(void)
|
||||
|
||||
static void timerouter (void * parameter)
|
||||
{
|
||||
rt_event_send(gnetEvents,EVENT_COMM_TX) ;
|
||||
}
|
||||
// 网络链接成功
|
||||
static void net_connected(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static void thread_entry(void * argument)
|
||||
{
|
||||
eDrvStatus = netDrvInit;
|
||||
rt_kprintf("%s was start!\r\n",__FILE__);
|
||||
gnetEvents = rt_event_create("gnetEvents", RT_IPC_FLAG_FIFO) ;
|
||||
// 读取网络驱动类型
|
||||
char * drv = ef_get_env ("net_drv"); // 读取网络类型
|
||||
if(strcmp("dtu",drv) == 0) // 驱动程序位DTU模式,就是不通过本地配置,直接透传
|
||||
TypeIndexMail_t mail;
|
||||
for (int i = 0; i < SLUICE_COUTN; i++)
|
||||
{
|
||||
DTUThreadStart();
|
||||
// 初始化串口驱动
|
||||
// interface.Init = NULL;
|
||||
// interface.IsConnected = NULL;
|
||||
// interface.IsIdle = NULL;
|
||||
// interface.IsReady = NULL;
|
||||
// interface.ReadData = NULL;
|
||||
// interface.ReSubTopic = NULL;
|
||||
// interface.WriteData = NULL;
|
||||
|
||||
if (g_net_1min_timer[i] == 1)
|
||||
{
|
||||
g_net_1min_timer[i] = 60;
|
||||
mail.Type = MAIL_COMM_HEART;
|
||||
mail.index = i + 1;
|
||||
rt_mb_send (gTCommMail, * ( (uint32_t *) &mail));
|
||||
}
|
||||
if (g_net_5min_timer[i] == 1)
|
||||
{
|
||||
g_net_5min_timer[i] = 60 * 5;
|
||||
mail.Type = MAIL_COMM_STAND;
|
||||
mail.index = i + 1;
|
||||
rt_mb_send (gTCommMail, * ( (uint32_t *) &mail));
|
||||
}
|
||||
if (g_net_1min_timer[i] > 1)
|
||||
g_net_1min_timer[i]--;
|
||||
if (g_net_5min_timer[i] > 1)
|
||||
g_net_5min_timer[i]--;
|
||||
}
|
||||
// 注册网络驱动
|
||||
// 注册网络驱动
|
||||
while (1)
|
||||
{
|
||||
// 发送数据
|
||||
if( RT_EOK == rt_event_recv( gnetEvents, EVENT_COMM_TX,RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL ))
|
||||
{
|
||||
|
||||
}
|
||||
if ( RT_EOK == rt_event_recv( gnetEvents, EVENT_COMM_RX,RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL ))
|
||||
{
|
||||
|
||||
}
|
||||
rt_thread_delay(10);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void NET_APPThreadStart(void )
|
||||
|
||||
const static char upinfo[][10] = {"heart", "regist", "stand", "sluice", "upack", "slack","readcfg"} ;
|
||||
|
||||
static void thread_entry (void * argument)
|
||||
{
|
||||
rt_kprintf ("%s was start!\r\n", __FILE__);
|
||||
TypeIndexMail_t mail;
|
||||
timer = rt_timer_create ("timer", timerouter, RT_NULL, 1000, RT_TIMER_FLAG_PERIODIC);
|
||||
// 读取网络驱动类型
|
||||
netdrv_init();
|
||||
MQTTThreadStart();
|
||||
char data[100] = {0};
|
||||
int tx_size = 0;
|
||||
#ifndef USER_JSON_PACKET
|
||||
char rxdata_decode[256];
|
||||
int rxdata_decode_size = 0;
|
||||
uint32_t datak;
|
||||
#endif
|
||||
|
||||
// 判断站点类型
|
||||
//site_type
|
||||
char * p = ef_get_env ("site_type") ;
|
||||
int site_type = cSiteType2Index(p);
|
||||
rt_kprintf ("site_type:%d\r\n", site_type);
|
||||
|
||||
//CommTMail_t mail;
|
||||
// 注册网络驱动
|
||||
// 注册网络驱动
|
||||
while (1)
|
||||
{
|
||||
|
||||
INIT:
|
||||
if (RT_EOK == rt_event_recv (gTrigEvents, EVENT_TRIG_COMM_RST, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL))
|
||||
{
|
||||
rt_kprintf ("net work lost\r\n");
|
||||
mail.Type = MAIL_VIEW_NET_STE;
|
||||
mail.index = DIS_STE_ERROR;
|
||||
rt_mb_send (gViewMail, * ( (uint32_t*) &mail));
|
||||
rt_timer_stop (timer);
|
||||
// 发送消息给
|
||||
}
|
||||
if (MQTT_Subscribed() != 1) // 网络链接不成功
|
||||
{
|
||||
rt_thread_mdelay (1000);
|
||||
goto INIT;
|
||||
}
|
||||
// 订阅成功
|
||||
if (RT_EOK == rt_event_recv (gTrigEvents, EVENT_TRIG_MQTT_SUB, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL))
|
||||
{
|
||||
rt_kprintf ("netWork Sub Success\r\n");
|
||||
// 发送注册报
|
||||
mail.Type = MAIL_COMM_REGIST;
|
||||
mail.index = 1;
|
||||
rt_mb_send (gTCommMail, * ( (uint32_t *) &mail));
|
||||
for (int i = 0; i < SLUICE_COUTN; i++)
|
||||
{
|
||||
rt_timer_start (timer);
|
||||
g_net_1min_timer[i] = i * 10 + 5;
|
||||
g_net_5min_timer[i] = i * 10 + 10;
|
||||
mail.Type = MAIL_VIEW_NET_STE;
|
||||
mail.index = DIS_STE_SUCCSEE;
|
||||
rt_mb_send (gViewMail, * ( (uint32_t*) &mail));
|
||||
}
|
||||
}
|
||||
if (rt_mb_recv (gTCommMail, (rt_ubase_t *) &mail, RT_WAITING_NO) == RT_EOK)
|
||||
{
|
||||
rt_kprintf ("recv send mail: type:%s,index:%d\n", upinfo[mail.Type], mail.index);
|
||||
if (g_ifupdate != 1)
|
||||
{
|
||||
switch (mail.Type)
|
||||
{
|
||||
case MAIL_COMM_HEART:
|
||||
#ifdef USER_JSON_PACKET
|
||||
gMqttDrv.tx_size = JsonHeartDatapacket ( (uint8_t *) gMqttDrv.txbuff);
|
||||
gMqttDrv.tx_index = mail.index;
|
||||
#else
|
||||
// 心跳数据
|
||||
gMqttDrv.tx_size = PacketHeader (0x2F, data, 4, gMqttDrv.txbuff);
|
||||
gMqttDrv.tx_index = mail.index;
|
||||
|
||||
#endif
|
||||
MQTT_SendData () ;
|
||||
break;
|
||||
case MAIL_COMM_REGIST: // 注册报
|
||||
|
||||
#ifdef USER_JSON_PACKET // 使用Json格式数据包
|
||||
gMqttDrv.tx_size = JsonRegistDataPacket ((uint8_t *) gMqttDrv.txbuff);
|
||||
gMqttDrv.tx_index = mail.index;
|
||||
#else
|
||||
// 心跳数据
|
||||
tx_size = PacketUpRegist (data);
|
||||
gMqttDrv.tx_size = PacketHeader (0xE4, data, tx_size, gMqttDrv.txbuff);
|
||||
gMqttDrv.tx_index = mail.index;
|
||||
#endif
|
||||
MQTT_SendData () ;
|
||||
break;
|
||||
case MAIL_COMM_SLUICE: // 闸门状态自报
|
||||
tx_size = PacketSluiceUp (mail.index - 1, data);
|
||||
gMqttDrv.tx_size = PacketHeader (0x4E, data, tx_size, gMqttDrv.txbuff);
|
||||
gMqttDrv.tx_index = mail.index;
|
||||
MQTT_SendData () ;
|
||||
break;
|
||||
case MAIL_COMM_STAND: // 5分钟标准包上报
|
||||
|
||||
#ifdef USER_JSON_PACKET // 使用Json格式数据包
|
||||
// 判断站点类型
|
||||
switch (site_type)
|
||||
{
|
||||
case SiteSluice: // 闸门站
|
||||
gMqttDrv.tx_size = Json5MinSluiceDataPacket ( (uint8_t *) gMqttDrv.txbuff);
|
||||
break;
|
||||
case SiteFlow:
|
||||
case SiteSee:
|
||||
gMqttDrv.tx_size = Json5MinFlowDataPacket ( (uint8_t *) gMqttDrv.txbuff);
|
||||
break;
|
||||
case SiteColl:
|
||||
case SiteServer:
|
||||
break;
|
||||
}
|
||||
|
||||
gMqttDrv.tx_index = mail.index;
|
||||
#else
|
||||
// 心跳数据
|
||||
tx_size = PakcetTimerUp (mail.index - 1, data);
|
||||
gMqttDrv.tx_size = PacketHeader (0x31, data, tx_size, gMqttDrv.txbuff);
|
||||
gMqttDrv.tx_index = mail.index;
|
||||
#endif
|
||||
|
||||
MQTT_SendData () ;
|
||||
break;
|
||||
case MAIL_COMM_SLACK: // 提闸的应答
|
||||
tx_size = PacketSluiceAck (data);
|
||||
gMqttDrv.tx_size = PacketHeader (0x4E, data, tx_size, gMqttDrv.txbuff);
|
||||
gMqttDrv.tx_index = mail.index;
|
||||
MQTT_SendData();
|
||||
break;
|
||||
case MAIL_COMM_UPACK: // 升级的应答
|
||||
|
||||
#ifdef USER_JSON_PACKET // 使用Json格式数据包
|
||||
gMqttDrv.tx_size = JsonAckSuccPacket ((uint8_t *) gMqttDrv.txbuff);
|
||||
gMqttDrv.tx_index = mail.index;
|
||||
#else
|
||||
// 心跳数据
|
||||
tx_size = PacketAnsAck (data);
|
||||
gMqttDrv.tx_size = PacketHeader (0xE0, data, tx_size, gMqttDrv.txbuff);
|
||||
gMqttDrv.tx_index = mail.index;
|
||||
#endif
|
||||
|
||||
|
||||
MQTT_SendData();
|
||||
break;
|
||||
case MAIL_COMM_READPARA:
|
||||
#ifdef USER_JSON_PACKET // 使用Json格式数据包
|
||||
gMqttDrv.tx_size = JsonConfigReadDataPacket ((uint8_t *) gMqttDrv.txbuff);
|
||||
gMqttDrv.tx_index = mail.index;
|
||||
#else
|
||||
// 心跳数据
|
||||
tx_size = PacketUpRegist (data);
|
||||
gMqttDrv.tx_size = PacketHeader (0xE4, data, tx_size, gMqttDrv.txbuff);
|
||||
gMqttDrv.tx_index = mail.index;
|
||||
#endif
|
||||
MQTT_SendData();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// 接受数据
|
||||
if (RT_EOK == rt_event_recv (gTrigEvents, EVENT_TRIG_COMM_RX, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, RT_WAITING_NO, RT_NULL))
|
||||
{
|
||||
|
||||
#ifdef USER_JSON_PACKET // 使用Json格式数据包
|
||||
JsonUnPacket(gMqttDrv.rx_index - 1,gMqttDrv.rxbuff); // 第n个通道过来的数据
|
||||
// 解析数据
|
||||
#else
|
||||
|
||||
rxdata_decode_size = hexstr_to_hexbyte (gMqttDrv.rxbuff, rxdata_decode, gMqttDrv.rx_size);
|
||||
rt_kprintf ("<<<<<<<<<<<<rx_size:%d\r\n", rxdata_decode_size);
|
||||
for (int i = 0; i < rxdata_decode_size; i++)
|
||||
{
|
||||
rt_kprintf ("%02X ", rxdata_decode[i]);
|
||||
}
|
||||
rt_kprintf ("\r\n");
|
||||
switch ( (int) rxdata_decode[10])
|
||||
{
|
||||
case 0x4E: // 控制闸门操作
|
||||
{
|
||||
// 远程提闸
|
||||
datak = rxdata_decode[18];
|
||||
datak = (datak << 8) + rxdata_decode[19];
|
||||
rt_kprintf ("open:%u mm/10\r\n", datak);
|
||||
|
||||
//SluiceData[gMqttDrv.rx_index].opt = 1; // 执行操作闸门
|
||||
SluiceData[gMqttDrv.rx_index - 1].sopen = datak / 10;
|
||||
mail.Type = MAIL_SLUICE_OPT;
|
||||
mail.index = gMqttDrv.rx_index - 1;
|
||||
rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
|
||||
|
||||
// 回复应答
|
||||
mail.Type = MAIL_COMM_SLACK;
|
||||
mail.index = gMqttDrv.rx_index;
|
||||
rt_mb_send (gTCommMail, * ( (uint32_t*) &mail));
|
||||
break;
|
||||
}
|
||||
case 0xE0:// 远程升级
|
||||
{
|
||||
int filenamesize = 0;
|
||||
rt_memset (SysData.fileName, 0, 32);
|
||||
filenamesize = rxdata_decode[12] - 2;
|
||||
rt_memcpy (SysData.fileName, &rxdata_decode[16], filenamesize);
|
||||
// 启动升级线程
|
||||
rt_kprintf ("filename:[%s]\r\n", SysData.fileName);
|
||||
// 回复应答
|
||||
mail.Type = MAIL_COMM_UPACK;
|
||||
mail.index = gMqttDrv.rx_index;
|
||||
rt_mb_send (gTCommMail, * ( (uint32_t*) &mail));
|
||||
rt_thread_mdelay (2000);
|
||||
|
||||
UpgradeThreadStart();
|
||||
//
|
||||
// 应答ACK
|
||||
break;
|
||||
}
|
||||
case 0xE1: // 远程停止闸门
|
||||
{
|
||||
mail.Type = MAIL_SLUICE_STP; // 停止提
|
||||
mail.index = gMqttDrv.rx_index - 1;
|
||||
rt_mb_send (gSluiceMail, * ( (uint32_t*) &mail));
|
||||
break;
|
||||
}
|
||||
case 0xE2: // 读取远程参数
|
||||
{
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
// 网络连接丢失
|
||||
rt_thread_mdelay (10);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void NET_APPThreadStart (void)
|
||||
{
|
||||
/* 创建线程1,名称是thread1,入口是thread1_entry*/
|
||||
rt_thread_init(&netapp_thread, "netapp_thread",
|
||||
thread_entry, RT_NULL,
|
||||
&thread_stack[0],
|
||||
sizeof(thread_stack),
|
||||
NET_APP_THREAD_PRIORITY, NET_APP_THREAD_TIMESLICE);
|
||||
rt_thread_startup(&netapp_thread);
|
||||
|
||||
return ;
|
||||
rt_thread_init (&netapp_thread, "netapp_thread",
|
||||
thread_entry, RT_NULL,
|
||||
&thread_stack[0],
|
||||
sizeof (thread_stack),
|
||||
NET_APP_THREAD_PRIORITY, NET_APP_THREAD_TIMESLICE);
|
||||
rt_thread_startup (&netapp_thread);
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
+3
-3
@@ -184,7 +184,7 @@ int _651PacketDataSluiceAck (char *tx_data)
|
||||
tx_data[tx_size++] = 0;//SysInfo.baseAddr[2]; //(uint8_t) ( (SysInfo.Addr >> 16) & 0x000000FF);
|
||||
tx_data[tx_size++] = 0;//SysInfo.baseAddr[3]; //(uint8_t) ( (SysInfo.Addr >> 8) & 0x000000FF);
|
||||
tx_data[tx_size++] = 0;//SysInfo.baseAddr[4]; //(uint8_t) (SysInfo.Addr & 0x000000FF);
|
||||
return tx_size;
|
||||
return tx_size;
|
||||
}
|
||||
|
||||
// 打包 基础参数
|
||||
@@ -211,7 +211,7 @@ int Json651PacketBaseInfo (char *outBuffer, int length)
|
||||
// "NetDev", SysInfo.baseNetDev,
|
||||
// "StandTime", SysInfo.baseStandbyTime);
|
||||
// return k;
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
// 接口参数设置
|
||||
int Json651PacketInterfaceInfo (char *outBuffer, int length)
|
||||
@@ -251,7 +251,7 @@ int Json651PacketInterfaceInfo (char *outBuffer, int length)
|
||||
// "pwm3", SysInfo.PWMFunc[2],
|
||||
// "pwm4", SysInfo.PWMFunc[3]);
|
||||
// return k;
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Json651PacketSluiceInfo (char *outBuffer, int length)
|
||||
|
||||
+91
-88
@@ -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 *) ®_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 ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user