当前位置:文档之家› Modbus协议下51系列单片机与eView触摸屏的通讯方法

Modbus协议下51系列单片机与eView触摸屏的通讯方法

Modbus协议下51系列单片机与eView触摸屏的通讯方法(组图)
Modbus协议由于其具有开放性、透明性、本钱低、易于开发等特点,已成为当
今产业领域通讯协议的首选。

本文介绍了一种基于Modbus通讯协议的eView触摸屏与常用的51单片机的通
讯方法。

该方法通过C51编程实现Modbus通讯,在51系列单片机上具有通用性,
有一定的鉴戒作用。

产业控制中经常需要观察系统的运行状态或者修改运行参数。

触摸屏能够直
观、生动地显示运行参数和运行状态,而且通过触摸屏画面可以直接修改系统运
行参数,人机交互性好。

单片机广泛应用于工控领域中,与触摸屏配合,可组成
良好的人机交互环境。

触摸屏与单片机通讯,需要根据触摸屏采用的通讯协议为单片机编写相应的通
讯程序。

Modbus协议是美国Modicon公司推出的,一种有效支持控制器之间以
及控制器经过网络(如以太网)与其他设备之间进行通讯的协议。

本文以STC89C51
单片机和人机电子有限公司的eView触摸屏为例,介绍其通讯程序的开发过程。

1 系统结构
实现触摸屏与单片机的通讯,主要是解决通讯协议的题目。

本文使用开放的Modbus通讯协议,以触摸屏作主站,单片机作从站。

eView触摸屏本身支持Modbus 通讯协议,假如单片机也支持Modbus协议,就可以进行通讯了。

eview触摸屏支持RS-232和RS-485两种通讯接口。

在产业控制领域,由于RS-485具有可靠性高、传输间隔远、抗干扰能力强等优点,所以在本系统中触摸屏与单片机通讯采用RS-485连接,传输速率设置为9600 kbps。

RS-485信号传输是一种半双工的传输方式,单片机通过一个RS-232/RS-485无源转换器把232信号转换成485信号,连接到eView触摸屏上。

图l为该系统的原理图。

单片机控制系统采用STC89C51系列单片机,其内部集成MAX810/STC810专用复位电路(原有外部复位可继续保存,与Intel 8051引脚兼容),具有抗干扰能力强、加密性强、高抗静电(ESD)、超低功耗等特点,而且价格低廉。

在本系统中,触摸屏是上位机,单片机是下位机。

2 Modbus协议
2.1 Modbus协议简介
Modbus协议是应用于电子控制器上的一种通用语言。

通过此协议,控制器相互之间、控制器经过网络(如以太网)与其他设备之间可以通讯。

它已经成为一种通用产业标准。

不同厂商生产的控制设备可以通过它连成产业网络,集中监控。

Modbus协议定义了一个控制器能熟悉使用的消息结构,而不管它们是经过何种网络进行通讯的。

它描述了一控制器请求访问其他设备的过程.如何回应来自其他设备的请求,以及怎样侦测错误并记录;制定了消息域格式和内容的公共格式。

当在某一Modbus网络上通讯时,此协议决定了每个控制器需要知道它们的设备地址,识别按地址发来的消息,以及决定要产生何种行动。

假如需要回应,则控制器将天生反馈信息并用Modbus协议发出。

在其他网络上,包含了M0dhus协
议的消息转换为在此网络上使用的帧或包结构。

2.2 Modbus RTU通讯数据传输模式
当控制器设备基于Modbus协议以RTU模式通讯时,消息中的每个字节包含2个4位的十六进制字符。

这种方式的主要优点是:在同样的波特率下,可比ASCII 方式传送更多的数据。

编码采用8位二进制,十六进制数0~9和A~F;消息中每个8位域都是由2个十六进制字符组成。

组织结构如下:
2.3 Modbus RTU消息帧结构
M odbus RTU消息帧结构如下:
(1)地址码
地址码为通讯传送的第一个字节。

这个宁节表明,由用户设定地址码的从机将接收由主机发送来的信息。

每个从机都有具有唯一的地址码,只有符合地址码的从机才能响应回送,且响应回送均以各自的地址码开始。

主机发送的地址码则表明将发送到的从机地址,而从机发送的地址码表明回送的从机地址。

地址0用作广播地址,以使所有的从设备都能熟悉。

(2)功能代码
功能代码为通讯传送的第二个字节。

Modbus通讯规约定义可能的代码范围是十进制的1~255。

当然,有些代码适用于所有控制器,有些仅适用于某种控制器,还有些保存以备后用。

主机发送请求,通过功能码告诉从机执行什么动作;从机响应请求,从机发送的功能码与从主机发送来的功能码一样,表明从机已响应主机进行操纵。

假如从机发送的功能码的最高位为1,则表明从机没有响应操纵或发送出错,主设备应用程序得到异议的回应后,典型的处理是重发消息。

表l列出了常用Modbus支持的部分功能码。

以读取线圈状态为例说明。

主站发送命令:[设备地址][命令号01][起始寄存器地址高8位][低8位][读取的寄存器数高8位][低8位][CRC校验的低8位][高8位]。

从站响应:[设备地址][命令号01][返回的字节个数][数据1][数据2]…[数据n][CRC校验的低8位][高8位]。

(3)数据区
数据区根据功能码的不同而不同。

数据区包含需要从机执行什么动作,或由从机采集的返送信息。

这些信息可以是实际数值、设置点、主机发送给从机或从机发送给主机的地址等。

例如,功能码告诉从机读取寄存器的值,则数据区必须包含要读取寄存器的起始地址及读取长度。

对于不同的从机,地址和数据信息都不相同。

(4)错误校验码
主机或从机可用校验码判别接收信息是否出错。

错误检测域包含一个16位的值(用2个8位的字符来实现)。

错误检测域的内容是通过对消息内容进行“循环冗余检测”得出的。

CRC域附加在消息的最后,添加时先是低字节然后是高字节,故CRC的高位字节是发送消息的最后一个宁节。

错误校验采用CRC-16校验方法。

3 软件编程
下面是采用C5l编写的软件,主要包括CRC校验和终端接收及波特率设置等。

由于篇幅有限,其他程序略。

相关主题