三、软件设计
1.通信协议
由于485总线是异步半双工的通信总线,在某一个时刻,总线上必然有一台始终处于主机地位的设备在巡检其它的从机,所以需要制定一套合理的通信协议来协调总线的分时共用。在通信协议中,每一台从机都规定了确定的地址号,开始时所有从机复位,即处于监听状态,等待主机的呼叫。当主机向系统发出某一从机的地址时,所有从机接收到该地址并与自己的地址相比较,如果相符,说明主机在呼叫自己,应发回应答信号,表示准备好开始接收后面的命令和数据;否则不予理睬,继续监听呼叫地址。主机收到从机的应答后,则开始一次通信。通信完毕,从机继续处于监听状态,等待呼叫。为此下发数据要带目的地址,接收上行数据要识别数据来源,下位机上传数据要带本机地址。
下发命令采用如下格式:下位机地址字节(1)+命令/数据字节(1—7)+回车上传数据格式:下位机地址字节(1)+数据字节(1—7)+回车
2.通信程序设计
(1)PC机程序设计
主机程序用VB编写而成。VB中利用一个MSComm控件实现串行通信,该控件完成串口的初始化、发送数据和接收数据的功能。
(2)分机程序设计
在RS-485实现多机通信的过程中,由于各分机多应用于实时性较强的控制场合,为了少占用CPU的时间,充分发挥CPU的功能,我们在分机程序设计中采用中断方式和微机进行通信。
当分机接收到微机发来的呼叫信号时,就转入中断服务程序,其中断服务程序流程图如下图所示。
下面为分机的串口初始化程序,包括打开串口、设置串口的波特率和串
四、调试
在调试中,我们发现当晶振为6MHz,波特率为2400时,求得计数常数为OOF9H,此时从机发送0-9字符时,PC机收到的字符不是0-9,而是P-Y,后将晶振改为12MHz,波特率设置为9600.计数常数为FFD9H,即设置参数BAUDRATE65497时,收到正确的字符。经过分析后发现是前者的圆整误差过大造成的。
由于RS-485总线可靠性高、硬件设计简单、控制方便、成本低廉等优点,可广泛应用于智能化小区、工厂自动化、工业控制、水利自动报测、宾馆、多点数据采集系统等领域,具有广阔的应用前景。