分享

pic单片机与触摸屏串行通信的modbus协议实现

 共同成长888 2020-06-23

中经常需要观察系统的运行状态或者修改运行参数。能够直观、生动地显示运行参数和运行状态,而且通过触摸屏画面可以直接修改系统运行参数,人机交互性好。广泛应用于工控领域中,与触摸屏配合,可组成良好的人机交互环境。触摸屏和单片机通信,需要根据触摸屏采用的通信协议为单片机编写相应的通信程序。modbus协议是美国modicon公司推出的一种有效支持控制器之间以及控制器经由网络(例如以太网)和其它设备之间进行通信的协议。本文以pic16f877单片机和人机有限公司的eview mt510t型触摸屏为例,介绍其通信程序的开发过程。

1 系统结构

实现触摸屏与单片机的通讯,主要是解决通讯协议的问题。本文使用开放的modbus通讯协议,以触摸屏作主站,单片机作从站。eview触摸屏本身支持modbus通讯协议,如果单片机也支持modbus协议,就可以进行通信了。触摸屏与单片机之间采用的rs-232c兼容接口直接连接,传输速率设置为9600kb/s。图1为该系统的。

将pic16f877单片机rc6、rc7口设置为异步串行通信模式,经过max232芯片将ttl电平转换为rs232电平,再与eview触摸屏[rs-232]接口相连,即完成了硬件连接。eview触摸屏plc[rs-232]接口的管脚2为txd,管脚3为rxd。

2 modbus通信协议介绍

modbus通信协议是一种串行的主从通信协议,网络里仅有一台设置可作为主机(称master),其它设备作为从机(称slaver),主机不需编号,从机必须编号。协议定义了主机查询及从机应答的信息帧格式。通信时,主机首先向从机发出请求信息,符合相应地址码的从机接收通讯命令,并除去地址码,读取信息,如果没有出错,则执行相应的任务,然后把执行结果返给主机。若从机接收到的校验码与本机计算的不同,则说明数据在通信过程中出现错误,从机把这次请求视为无效,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。当主机收到这一信息时,会重新发送请求信息。校验方式分为lcr(传送数据为acsii时)校验或crc(传送数据为二进制时)校验,这里采用crc校验方式。

信息传输为异步方式,并以字节为单位。主从站之间通讯的字格式如表1所示。

表1 通讯的字格式

字格式(串行数据)10位二进制
起始位1位
数据位8位
奇偶校验位
停止位1位

modbus协议可支持ascii码或二进制格式的数据传输。acsii码方式下每一个字节数据分两个字节传送,二进制方式下用一个字节传送,为了减少数据传输量,一般选二进制数据方式。各个区允许发送的字节均为16进制的0~9,a~f。二进制信息帧标准结构为:

初始结构 ≥4字节的时间

地址码 1字节

功能码 1字节

数据区 n字节

错误校验 16位crc码

结束结构 ≥4字节的时间

二进制模式中,信息开始至少需要3.5个字符的静止时间,依据使用的波特率,很容易计算这个静止时间。发送完最后一个字符后,也有一个至少3.5个字符的静止时间,然后才能发送一个新的信息。网络上的设备连续监测网络上的信息,包括静止时间。

3 单片机与触摸屏地址的对应关系

eview触摸屏只支持bit和word地址类型,而实际的单片机或其它控制器还有byte、double word等表示方法,因此在进行通信时,需要把单片机和触摸屏的数据进行变换。触摸屏画面元件读取地址的设备类型有lw、0x、1x、3x、4x、rwi、rw等选项。其中,lw表示该元件读取的是触摸屏内部的地址,如其它元件的地址;0x表示读取的是控制器的输出信号;1x表示读取的控制器的输入信号;3x和4x指控制器的寄存器地址类型,其中4x是可读可写的,3x是只读的;rwi、rw都是触摸屏的内部地址,起辅助作用。使用这些读取地址的设备类型,触摸屏即可显示或设定控制器寄存器或i/o口的数值。以“数值输入”元件为例,通过“小键盘”输入数据即可设置单片机寄存器或i/o口的数值。如果启动了“触发地址”,那么当被触控时,输入的数据就被存放到了指定的单片机地址中。

4 通信程序的开发

触摸屏与单片机的通信程序采用pic单片机c语言编写。编译工具选择hitech公司的picc编译器。程序共分三大模块,即初始化模块、数据接收模块以及数据处理及发送模块。主程序流程图如图2所示。

pic16f877单片机usart功能模块带有一个八位的波特率发生器brg,brg支持usart的同步和异步工作方式。用spbrg寄存器控制一个独立的八位定时器的周期。在异步方式下,发送状态/控制寄存器txsta的brgh位(即d2)被用来控制波特率。对串行口进行的初始化如下:

gie=1; %全局中断允许;

spbrg=25; %设置波特率为9600;

txsta=0x04; %选择异步高速方式;

rcsta=0x80; %允许同步串行口工作;

rtisc6=1;

trisc7=1; %将c口的rc6和rc7设置为异步串行通信模式;

pfie=1; %外围接口中断允许;

rcie=1; %usart接收中断允许;

txie=1; %usart发送中断允许;

数据接收模块由一个中断函数组成。该中断函数将触摸屏发来的modbus数据帧存储在一个自定义的数组中,当一帧数据接收完时,置接收结束标志位为1,转入数据处理及发送模块。串行通信接收器的核心是接收移位寄存器rsr,当接收到停止时,如果rcreg缓冲器为空,rsr就把接收到的数据送入rcreg。传送完成后,接收中断标志位rcif被置1。实际的中断是否被cpu响应,可以通过设置外围接口中断允许寄存器pie1的中断允许位rcie来控制。

数据处理及发送模块执行modbus协议功能码对应的运用。eview触摸屏与单片机以modbus协议通信,用到的modbus功能码如表2所示。

表2 通信程序用到的功能码

功能码eview地址名称含 义作 用
010x读开关量输出读取一路或多路开关量输出状态
034x读保持寄存器读取一个或多个保持寄存器的数据
050x

1x

写开关量输出强置一路的“分/合”输出
163x

4x

预置多寄存器把具体的数据装入一组连贯的保持寄存器

以modbus功能码03为例来说明触摸屏及单片机的实际通信数据格式。如单片机地址编号为01h,触摸屏需要查看单片机中地址为0031h的寄存器的值,发送命令格式如表3所示。

表3 触摸屏发送数据结构

数据段名称数据值
地址01
功能码03
读取地址高位00
读取地址低位31
读取数据个数高位00
读取数据个数低位01
crc校验码高位d5
crc校验码低位c5

假设单片机中地址为0031h的寄存器中断为05h,则单片机的回复命令如表4所示。

表4 单片机应答数据结构

数据段名称数据值
地址01
功能码03
读取字节数02
寄存器数据高位00
寄存器数据低位05
crc校验码高位78
crc校验码低位47

当波特率达到38400kb/s时,通信仍然稳定可靠。本系统具有连接电路简单、组态灵活、通信可靠性高等特点,并已成功应用于物料筛选控制系统项目中。由于modbus通信协议的开放性的特点,国外进口控制器串行通信大者支持该协议,因此本文所实现的采用modbus协议的串行通信具有广泛的应用价值。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多