📄 串行通信说明.txt
字号:
串行通信模块说明->
系统与外界通信接口为串口;
采用基于RS-485的电流环方式传输数据;
上层传输控制协议自定义为HouseTran 1.0;
HouseTran 1.0协议规定:
//##########################智能数据采集系统串行通讯协议简要:############################//
//#数据帧帧头:0xEB 0x90 0xEB 0x90 0xEB 0x90
//#有效数据块:远程主机地址 本地主机地址 命令 参数和校验数据总长度 命令参数
//#帧序号(FrameNum) 校验码(CRCHigh CRCLow)
//#数据帧帧尾:0x7E /*SCOM空闲时保持Mark状态即逻辑'1'*/
//#######################################################################################//
协议内容:
/*------------------------------------------------------*/
a.所有传输操作都以帧的形式进行;
/*------------------------------------------------------*/
b.帧结构:头(6B) + 主机地址(1B)+本机地址(1B) +命令(1B) + 参数数据长度 + 命令带的参数
+ 帧序号(1B) + 校验常数(2B) + 尾(0x7E)
/*------------------------------------------------------*/
c.采用CRC和累加和校验方式,可以任意选择使用;
校验数据从本机地址开始到帧序号结束;
/*------------------------------------------------------*/
d.数据有:
测量数据: 温度 湿度
时钟数据: 日期 时间
系统数据: 启动参数(主机地址 本机地址)
/*------------------------------------------------------*/
e.命令帧的传递:
任何命令都蕴藏在帧中,可以带参数数据也可不带;
地址分配原则:PC:0x80-0xff; MCU:0x00-0x7f
/*------------------------------------------------------*/
f.数据帧类型规定: //帧数据大小(B) 帧描述
TRecord= 1 // 10 完整的采样记录类型
TTemperature= 2 // 2 采样温度帧
THumidity= 3 // 2 采样湿度帧
TDate= 4 // 3 采样日期帧
TTime= 5 // 3 采样时钟帧
TSystemParameter=6 // 2 参数传递帧
具体结构:
(符号+整数)(1bit+7bits)+小数(1B)
年+月+日 (3B)
时+分+秒 (3B)
存储地址+参数值(2B)
/*------------------------------------------------------*/
g.具体的传输方式:
站点A(主) 站点B(从)
SiteA SiteB
发送一帧到 B
B的响应过程为:
○接收头
○接收地址
○接收有效命令和数据
○进行出错校验
○进行地址核对
○进行帧处理
○恢复端口初始化状态
/*------------------------------------------------------*/
h.协议常数规定:
标志 具体数值 描述
TCommand=0 // 1B 实现一个特定的操作
TRecord= 1 // 10 完整的采样记录类型
TTemperature= 2 // 2 采样温度帧
THumidity= 3 // 2 采样湿度帧
TDate= 4 // 3 采样日期帧
TTime= 5 // 3 采样时钟帧
TSystemParameter=6 // 2 参数传递帧
//系统用户
#define _ADMINI 0xff //系统管理员
#define _PC_T_ID 0xfe //系统测试默认操作员刚出产的MCU都是这个ID
#define _MCU_T_ID 0x00 //下位机测试初始化用地址刚出产的MCU都是这个ID
//定义通讯相关命令字常数0x00-0x7f
#define _CMD_END 0x7f //帧尾常数
#define _CMD_LOG_IN 0x7e //上线
#define _CMD_LOG_OUT 0x7d //下线
#define _CMD_ACK 0x7c //确认信号命令
#define _CMD_ERROR 0x7b //数据出错信号命令
#define _CMD_SITE_INIT 0x7a //站点初始化
#define _CMD_REAL_GET 0x79 //定时采样
//定义读数据采样相关命令字常数0x80-0xaf
#define _CMD_RD_TEMP 0x80 //采样温度不带参数
#define _CMD_RD_HUMI 0x81 //采样湿度不带参数
#define _CMD_RD_TIME 0x82 //采样时钟不带参数
#define _CMD_RD_ALARM 0x83 //采样闹钟不带参数
#define _CMD_RD_DATE 0x84 //采样日期不带参数
#define _CMD_RD_WEEK 0x85 //采样周几不带参数
#define _CMD_RD_RECORD 0x86 //采样历史记录不带参数
#define _CMD_RD_RECNUM 0x87 //采样历史记录数量
#define _CMD_RD_MCUID 0xaf //采样MCU认证号不带参数
#define _CMD_RD_PCID 0xae //采样MCU上存储的当前PC地址
#define _CMD_RD_PCUSER 0xad //采样MCU上存储的当前PC用户
//所有_CMD_RD_XX命令都以_CMD_WR_XX带参数响应返回0Xb0-0Xff
#define _CMD_WR_TEMP 0xB0 //写入或送出温度带参数
#define _CMD_WR_HUMI 0xB1 //写入或送出湿度带参数
#define _CMD_WR_TIME 0xB2 //写入或送出时钟带参数
#define _CMD_WR_ALARM 0xB3 //写入或送出闹钟带参数
#define _CMD_WR_DATE 0xB4 //写入或送出日期带参数
#define _CMD_WR_WEEK 0xB5 //写入或送出周几带参数
#define _CMD_WR_RECORD 0xB6 //写入或送出历史记录带参数
#define _CMD_RD_RECNUM 0xB7 //写入或送出历史记录数量
#define _CMD_WR_ID 0xff //写入或送出MCU认证号带参数
#define _CMD_WR_PCID 0xfe //写入或送出MCU上存储的当前PC地址
#define _CMD_WR_PCUSER 0xfd //写入或送出MCU上存储的当前PC用户
/*------------------------------------------------------*/
全局变量:
uchar CurrentMaster; //当前PC用户ID
uchar SelfAddr; //当前采集站的ID
uchar code CmdsBuf[]; //命令字存放空间
uchar data UartRecBuf[_MAX_LENG]; //通讯用缓冲
推荐:
波特率:19200;
CRC循环冗余校验CRCVerify(*Ptr,Len);
注意:
下位机在开机时对发送登陆帧到上位机,上位机检测其地址如果为测试地址则对其进行初始化;
上位机每次切换用户时必须及时通知所有采集站修改其CurrentMaster单元内容;
/*------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -