rs485通信设计
物理层:rs485半双工
通信方式:传感器网络的拓扑结构采用总线方式。传送数据采用主从站方式。PC 机作主站,网络传感器(微处理器) 作从站。主站启动并控制网上的每一次通信。每个网络传感器都有一个识别地址(由从站寄存器保存)。只要当某一传感器被寻址时,该传感器才同主站应答数据(包括信号传送以及传感器远程标定)。
每次数据的传送采用帧格式。其中数据值为0-127,大于127的用于控制。
帧格式:
包括控制状态帧和数据帧
帧头 地址 帧类型 长度 数据1 ??数据N 帧尾
1B 1B 1B 1B nB 1B
FFH 0-127 0-127 0-127 0-127 FEH
10位AD采样的数据转换为三个字节发送,10位由低位起每四位加30H变为一个字节,高两位为一个字节。如:1ffHà31H 3fH 3fH。因此采样的数据在30H――3fH之间,另外再限制地址,帧类型,长度等的第八位为0,使7f以上的数据用于控制(如帧头,帧尾)传送。
主机功能:地址为0
1.初始化串口,获得从机数,能够设定从站地址
2.向从机发送数据请求
3.保存各从机数据
4.用不同颜色曲线显示数据
5.异常处理
从机功能:地址从1-126,127为广播地址
1.地址从1依次开始且各从机地址固定,用寄存器保存
2.AD,按固定周期采样转换,存在缓冲区
3.响应主机请求,发送缓冲区所有数据(最多5组)
4.异常处理
异常处理:
1.从机缓冲区空,从机发送状态,主机接受到后请求下一主机。
2.缓冲区满,直接覆盖以前数据
3.从机未响应(故障或者忙),主机延时一定时间(???),请求重发,最多重发一次,否则转向请求下一从机。
数据采集系统从站设计
软件设计:
程序的说明:
本程序为从站程序。完成AD,接受命令,并发送数据等功能,以及实现主从式485协议(见rs485)中的从站功能。
1.该程序有以下功能:初始化,AD,定时器,串口接受,串口发送
2.主程序完成初始化。之后不断查询是否有接受数据,并作出相应处理:启动AD,发送数据,状态等。从而实现了主从式rs485的从站功能。
3.AD采用中断方式,且不使用中断嵌套
数据变量:
本机站点地址: lcl_adr RAM:20H EEPROM固化:00H
本机状态: lcl_status 21H
总线状态: bus_status 22H
接受到的主机命令: host_cmd 23H
保存status reg: 24H status_temp
w reg 25H , a5H 并且能从体3,体4映射过来即所有体的该单元定义为w_temp
fsr_temp equ 26H
缓冲区队列变量: 计数:2aH 对头:2bH 对尾:2cH 队列:50H---7fH
发送,接受数据用到变量: 起与30H
rc_da
rc_count equ 31H ;接受计数器
tx_count equ 32H ;发送计数器,一次最多发送5组,15 byte数据
tx_da
暂存AD结果变量, 中间变量:起与40H
ad_resl equ 40H ;暂存ad结果,这三个单元必须连续
ad_resl1 equ 41H
ad_resh equ 42H
temp0 equ 46H ;中间变量
temp1 equ 47H
count equ 48H ;循环计数器
int_count equ 49H ;中断程序中用到计数器,避免中断保护
本机状态:lcl_status 21H
bit 7 | Bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit1 | bit0 |
|
|
|
|
|
|
| ad_start |
总线状态:bus_status 22H
bit 7 | Bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 |
|
|
|
|
| Broadcast | is_adr | Lcl_da |
接受到的主机命令:host_cmd 23H
00H 数据帧标志
01H 启动AD
02H 关闭AD
03H,请求数据
04H,请求重发
05H 广播设置分站地址
06H 查询地址
问题及说明:
1.查询方式是否能及时接受,也即当接受处理一个字节的数据时,下一个数据是否能及时接受。
解决:接受一个字节数据需要时间,只要处理时间在这个时间范围内就可以及时接受。以19.2K为例,这个时间至少为:10/19.2ms=0.52ms
关键是从机发送一帧数据时间较长,但是主机发送两帧数据之间有很长时间的间隔,因此,如果是本机数据,则接收完一帧再做相应处理。即使是发送一帧数据也足以完成
2.AD包括采样时间20us和转换时间11TAD,以4MHZ,8Tosc为例,就是88us
3.缓冲区数据是变换后3个一组存入的,如何保证数据不会发生错位
4.中断程序用到了变量fsr,count,temp0,temp1等
解决:将count改为int_count,不用保护
fsr保存于fsr_temp
temp0,temp1仅中断程序用到,不用保护
其他并无需要保护的变量
5.本结构流图并未考虑广播地址及对站点地址的修改,地址查询命令等功能。
6.如果发送AD命令及发送数据请求命令,而AD未有启动,这是启动AD,即启动定时器。
7.各中断标志的变化
8.掉电复位功能还未禁用
扩展:
加入对站点地址的修改
加入初始化时地址的查询命令
评论