📄 scom说明.txt
字号:
串行通信模块说明->
系统与外界通信接口为串口;
采用基于RS-485的电流环方式传输数据;
上层传输控制协议自定义为HouseTran 1.0;
HouseTran 1.0协议规定:
test frame: 9已经包括了crc字节在内
EB 90 EB 90 EB 90 ff 01 25 08 01 02 03 04 05 01 8F B7
EB 90 EB 90 EB 90 ff 01 26 0d 01 02 03 04 05 01 02 03 04 05 02 FA F9
EB 90 EB 90 EB 90 ff 01 27 0f 01 02 03 04 05 01 02 03 04 05 06 07 03 AF 36
EB 90 EB 90 EB 90 ff 01 28 08 01 02 03 04 05 01 D9 D3
//##########################智能数据采集系统串行通讯协议简要:############################//
//#数据帧帧头:0xEB 0x90 0xEB 0x90 0xEB 0x90
//#有效数据块:源主机地址 目标地址 命令 数据长度 Datas(数据) FrameNumHigh FrameNumLow CRCHigh CRCLow#
//#数据帧帧尾:0x7F /*SCOM空闲时保持Mark状态即逻辑'1'*/
//#######################################################################################//
协议内容:
/*------------------------------------------------------*/
a.所有传输操作都以帧的形式进行;
/*------------------------------------------------------*/
b.帧结构:头(6B) + 主机地址(1B)+本机地址(1B) +命令(1B) + 参数数据长度 + 命令带的参数
+ 帧序号(2B) + 校验常数(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 + -