引入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

+90
View File
@@ -2,6 +2,8 @@
#include<stdint.h>
#include "crc.h"
#include "modbus-m.h"
#include "rtthread.h"
// 读取保持寄存器的值
// addr 寄存器地址
@@ -22,6 +24,25 @@ int modbus_m_read_regist(uint8_t id,uint16_t addr,uint16_t length,uint8_t * data
return index;
}
// 读取输入的值
// addr 寄存器地址
// id 丛机地址
// length 读取丛机数据长度
int modbus_m_read_input(uint8_t id,uint16_t addr,uint16_t length,uint8_t * data)
{
uint16_t index = 0,crc;
data[index++] = id;
data[index++] = 0x04;
data[index++] = (addr >> 8) & 0x00FF;
data[index++] = addr & 0x00FF;
data[index++] = (length >> 8) & 0x00FF;
data[index++] = length & 0x00FF;
crc = MX_CRC_CALC(data,index);
data[index++] = crc & 0x00FF;
data[index++] = (crc >> 8) & 0x00FF;
return index;
}
// 写入寄存器
// addr 寄存器地址
@@ -43,3 +64,72 @@ int modbus_m_write_regist(uint8_t id,uint16_t addr,uint16_t key,uint8_t * data)
}
//03 10 00 02 00 02 04 41 00 00 00
// 写入寄存器
// addr 寄存器地址
// id 丛机地址
// length 读取丛机数据长度
int modbus_m_write_mregist(uint8_t id,uint16_t addr,uint8_t *key,uint16_t size ,uint8_t * data)
{
uint16_t index = 0,crc;
data[index++] = id;
data[index++] = 0x10;
data[index++] = (addr >> 8) & 0x00FF;
data[index++] = addr & 0x00FF;
data[index++] = (size >> 8) & 0x00FF;
data[index++] = size & 0x00FF;
data[index++] = size * 2;
for (int i =0;i < size * 2;i++)
{
data[index++] = key[i];
}
crc = MX_CRC_CALC(data,index);
data[index++] = crc & 0x00FF;
data[index++] = (crc >> 8) & 0x00FF;
return index;
}
// 写入寄存器
// addr 寄存器地址
// id 丛机地址
// length 读取丛机数据长度
int modbus_m_write_coil(uint8_t id,uint16_t addr,uint16_t key,uint8_t * data)
{
uint16_t index = 0,crc;
data[index++] = id;
data[index++] = 0x05;
data[index++] = (addr >> 8) & 0x00FF;
data[index++] = addr & 0x00FF;
if (key == 1)
{
data[index++] = (addr >> 8) & 0x00FF;
data[index++] = addr & 0x00FF;
}
else
{
data[index++] = 0x00;
data[index++] = 0x00;
}
crc = MX_CRC_CALC(data,index);
data[index++] = crc & 0x00FF;
data[index++] = (crc >> 8) & 0x00FF;
return index;
}
MOD_T modbus_m_crc_check(uint8_t * data,int size )
{
uint16_t rcrc = 0,ccrc;
if (size < 4)
{
return MOD_ERR;
}
ccrc = MX_CRC_CALC(data,size-2);
rcrc = ((uint16_t)data[size-1] << 8 )+ (uint16_t)data[size-2];
if (ccrc == rcrc )
return MOD_OK;
return MOD_ERR;
}
+9
View File
@@ -2,9 +2,18 @@
#define MODBUS_M_H
#include <stdint.h>
typedef enum {
MOD_OK = 0,
MOD_ERR = 1
}MOD_T;
int modbus_m_read_regist(uint8_t id,uint16_t addr,uint16_t length,uint8_t * data);
int modbus_m_write_regist(uint8_t id,uint16_t addr,uint16_t key,uint8_t * data);
int modbus_m_read_input(uint8_t id,uint16_t addr,uint16_t length,uint8_t * data) ;
int modbus_m_write_coil(uint8_t id,uint16_t addr,uint16_t key,uint8_t * data);
MOD_T modbus_m_crc_check(uint8_t * data,int size );
int modbus_m_write_mregist(uint8_t id,uint16_t addr,uint8_t *key,uint16_t size ,uint8_t * data);
#endif
+4 -6
View File
@@ -3,9 +3,10 @@
#include<stdint.h>
#include "crc.h"
#include "modbus-s.h"
#include "modbus-m.h"
#if !defined(LOG_TAG)
#define LOG_TAG "main"
#define LOG_TAG "modbus-s"
#endif
#include <elog.h>
@@ -22,19 +23,16 @@ void ModbusSlaveInit(ModBusSlave_t * drv,uint8_t ID,uint8_t * data,uint16_t * r
//-1 地址错误
int ModbusSlaveHandle(ModBusSlave_t * drv,uint8_t * data,uint16_t length )
{
uint16_t rcrc = 0,ccrc = 0 ;
if( (data[0] != drv->ID) && (data[0] != 0x00))
{
// 地址错误
return -1;
}
rcrc = ((uint16_t)data[length- 1] << 8) + (uint16_t)data[length- 2] ;
ccrc = MX_CRC_CALC(data,length-2);
if (rcrc != ccrc )
if(modbus_m_crc_check(data,length) != MOD_OK)
{
log_e("rcrc:%04X,ccrc:%04X\r\n",rcrc,ccrc) ;
return -2;
}
drv->func = data[1] ;
switch (drv->func)