logo资料库

基于MODBUS协议的单片机与触摸屏通信.doc

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
科技信息 计算机与网络 基于 MODBUS 协议的单片机与触摸屏通信 郑州市电子信息工程学校 金 杰 [摘 要]本文介绍一种在MCS- 51 单片机与触摸屏之间采用 ModBus 协议实现异步串行通信的方法。简单介绍了 ModBus 通信协 议,给出了硬件电路连接图、程序流程图以及用MCS- 51 单片机C 语言编写的通信程序。实际使用证明该方法数据传输稳定可靠, 并提供了良好的人机交互环境。 [关键词]触摸屏 MCS- 51 单片机 ModBus 协议 通信 在工业控制中经常需要观察系统的运行状态或者修改运行参数。 触摸屏能够直观、生动地显示运行参数和运行状态,而且通过触摸屏画 面可以直接修改系统运行参数,人机交互性好。单片机广泛应用于工控 领域中,与触摸屏配合,可组成良好的人机交互环境。触摸屏和单片机 通信,需要根据触摸屏采用的通信协议为单片机编写相应的通信程序。 ModBus 协议是美国Modicon 公司推出的一种有效支持控制器之间以及 控制器经由网络(例如以太网)和其它设备之间进行通信的协议。本文 以 AT89S51 单片机和威纶通科技有限公司的 MT6070iH 型触摸屏为 例,介绍其通信程序的开发过程。 一、系统结构 实现触摸屏与单片机的通讯,主要是解决通讯协议的问题。本文使 用开放的 ModBus 通讯协议,以触摸屏作主机(MAster),单片机作从机 (SlAver)。MT6070iH 触摸屏本身支持 ModBus 通讯协议,只要单片机按 照ModBus 协议进行收发数据,就可以进行通信了。触摸屏与单片机之 间采用 RS-485 标准接口直接连接,传输速率设置为 9600Bps。图 1 为 该系统的电路图。 图1 系统电路图 将 AT89S51 单片机的 TXD、RXD 口设置为异步串行通信模式,经 过MAX485 芯片将TTL 电平转换为 RS485 电平,再与 MT6070iH 触摸 屏 RS-485 2W 接口相连,即完成了硬件连接,其中 P3.2 作为收发控制 信号。MT6070iH 触摸屏RS-4852W 接口的管脚2 为485A,管脚1 为 485B,管脚5 为公共地。 二、如何将MT6070iH 设定成ModBus 装置 图2 将MT6070iH 设定成ModBus 装置 将 MT6070iH 触摸屏设定成 ModBus 装置(以称为 ModBus Server), 单片机或其它装置只需使用 ModBus 协议,透过 RS232/485 接口,即可 读写MT6070iH 上的数据。将MT6070iH 设定成 ModBus 装置的方法如 下: 首先需在MT6070iH 使用的MTP 程序的设备清单(devicetABle)中增 加一个新的设备,此时 PLC 种类需选择“MODBUSServer”,PLC 接口可 以选择 RS232、RS485 2W、RS485 4W 或 Ethernet,这里选择 RS485 2W。 如图2 所示。 当接口选择使用RS485 时,需选择使用的连接端口(COM1~COM3), 并设定正确的通讯参数及站号。这里选择COM1(9600,N,8,1),站号设定 为1。 按下“确定”键后可以在设备清单中发现一个新的装置:MODBUS Server,此时即完成了 ModBus 装置的设定,在完成 MTP 档案的编译并 将获得的 XOB 档案下载到触摸屏后,即可透过 ModBus 协议读写 MT6070iH 上的数据。 三、ModBus 通信协议介绍 ModBus 通信协议是一种串行的主从通信协议,网络里仅有一台设 置可作为主机(称 MAster),其它设备作为从机(称 SlAver),主机不需编 号,从机必须编号。协议定义了主机查询及从机应答的信息帧格式。通 信时,主机首先向从机发出请求信息,符合相应地址码的从机接收通讯 命令,并除去地址码,读取信息,如果没有出错,则执行相应的任务,然 后把执行结果返给主机。若从机接收到的校验码与本机计算的不同,则 说明数据在通信过程中出现错误,从机把这次请求视为无效,功能代码 将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错 误信息的代码。当主机收到这一信息时,会重新发送请求信息。校验方 式分为LCR(传送数据为ACSII 时)校验或 CRC(传送数据为二进制时) 校验,这里采用 CRC 校验方式。信息传输为异步方式,并以字节为单 位。主从站之间通讯的字格式如下: 字格式(串行数据) 10 位二进制 1 位 起始位 8 位 数据位 奇偶校验位 无 停止位 ModBus 协议可支持 ASCII 码或二进制格式的数据传输。ACSII 码 1 位 方式下每一个字节数据分两个字节传送,二进制方式下用一个字节传 送,为了减少数据传输量,一般选二进制数据方式。各个区允许发送的 字节均为16 进制的0~9,A~F。二进制信息帧标准结构为: 功能码 初始结构≥4 字节的时间 1 字节 地址码 1 字节 N 字节 数据区 错误校验 16 位CRC 码 结束结构≥4 字节的时间 二进制模式中,信息开始至少需要 3.5 个字符的静止时间,依据使 用的波特率,很容易计算这个静止时间。发送完最后一个字符后,也有 一个至少3.5 个字符的静止时间,然后才能发送一个新的信息。网络上 的设备连续监测网络上的信息,包括静止时间。 四、通信程序的开发 MT6070iH 触摸屏只支持 Bit 和 Word 地址类型,而实际的单片机 或其它控制器还有 Byte、DouBleWord 等表示方法,因此在进行通信时, 需要把单片机和触摸屏的数据进行变换。触摸屏画面元件读取地址的 设备类型有LW、0x、1x、3x、4x、RWI、RW 等选项。其中,LW 表示该元件 读取的是触摸屏内部的地址,如其它元件的地址;0x 表示读取的是控制 器的输出信号;1x 表示读取的控制器的输入信号;3x 和 4x 指控制器的 寄存器地址类型,其中 4x 是可读可写的,3x 是只读的;RWI、RW 都是触 — 235—
科技信息 计算机与网络 摸屏的内部地址,起辅助作用。这里仅以读写LW 的0 地址的数据为例 说明读写过程。 MT6070iH 触摸屏与单片机以ModBus 协议通信,用到的 ModBus 功 能码如下: 功能码 名称 作用 01 02 03 04 05 06 读取线圈状态 取得一组逻辑线圈的当前状态(ON/OFF) 读取输入状态 取得一组开关输入的当前状态(ON/OFF) 读取保持寄存器 在一个或多个保持寄存器中取得当前的 下: 二进制值 读取输入寄存器 在一个或多个输入寄存器中取得当前的 二进制值 强置单线圈 强置一个逻辑线圈的通断状态 预置单寄存器 把具体二进值装入一个保持寄存器 1.串口程序的初始化 使用定时器1 作为波特率发生器,对串口的初始化程序如下: voidInitiAl(void) { SCON=0x50; TMOD=0x20; TL1=0xFd; TH1=0xFd; EA=1; TR1=1; // 串口方式1,允许接收 // 定时器1 方式2 // 波特率设为9600 // 存储定时器初始值 // 全局中断允许 / 启动定时器 } 2.向MT6070iH 触摸屏LW 的0 地址写入数据 向 MT6070iH 触摸屏 LW 的 0 地址写入数据 0x3A4B,功能码为 6, 程序如下: voidDAteWrite(void) { // 站号 // 功能码 // 起始地址高位 // 起始地址低位 // 寄存器个数高位 // 寄存器个数低位 // 字节数 ES=0; // 关中断 unsigned int A; unsigned int crc; inDAtA[0]=1; inDAtA[1]=6; inDAtA[2]=0; inDAtA[3]=0; inDAtA[4]=0; inDAtA[5]=1; inDAtA[6]=2; inDAtA[7]=0x3A; // 要写入数据高位 inDAtA[8]=0x4B; // 要写入数据低位 crc=0xffff; crc=cAlccrc(9,&inDAtA[0]); // 根据前9 个字节计算CRC 值 inDAtA[9]=crc&0xff; //CRC 值低8 位 inDAtA[10]=crc>>8; //CRC 值高8 位 for(A=0;A<11;A++) // 共发送11 个字节 { SBUF=inDAtA[A]; // 发送数据 while(!TI); (上接第234 页) 农业论坛以及农业人才服务。 (5)http://www.12582.com/ 农信通农村信息网,涉农生活服务移动互联网平台,提供最新农业 信息,化肥、饲料、农机等价格行情,农民工招聘、就业信息;食品、水果、 蔬菜等农产品交易信息,是城乡互动、乡村旅游、农家乐的综合展示窗 口。 (6)http://www.feedtrAde.com.cn/ 中国饲料行业信息网,为饲料生产加工、饲料原料贸易、饲料添加 剂及畜牧养殖企业提供全面的新闻、行情、价格和分析预测等信息资讯 服务。 (7)http://www.yuAnlin.com/ 中国园林网,提供园林绿化苗木资讯、园林绿化景观、园林绿化苗木 工程、园林绿化设计等方面信息,为相关园林绿化苗圃企业提供商铺,是 园林绿化,苗木园艺的专业园林绿化门户。 — 236— TI=0; } ES=1; // 开串行口中断 } 3.从MT6070iH 触摸屏LW 的0 地址读取数据 从 MT6070iH 触摸屏 LW 的 0 地址读取数据,功能码为 3,程序如 voidDAteWrite(void) { // 站号 // 功能码 // 起始地址高位 // 起始地址低位 // 寄存器个数高位 // 寄存器个数低位 ES=0; // 关中断 unsigned int A; unsigned int crc; inDAtA[0]=1; inDAtA[1]=3; inDAtA[2]=0; inDAtA[3]=0; inDAtA[4]=0; inDAtA[5]=1; crc=0xffff; crc=cAlccrc(6,&inDAtA[0]); // 根据前6 个字节计算CRC 值 inDAtA[6]=crc&0xff; //CRC 值低8 位 inDAtA[7]=crc>>8; //CRC 值高8 位 for(A=0;A<8;A++) // 共发送8 个字节 { SBUF=inDAtA[A]; // 发送数据 while(!TI); TI=0; } ES=1; // 开串行口中断 } 发送完读取数据的信息,一旦 MT6070iH 触摸屏接收到该信息,经 过 CRC 校验,如果没有错误,就会把 LW 的 0 地址数据发送给单片机, 共7 个字节,数据格式如下: 站号 功能码 读取字节数 寄存器数据高位 字节 数据段名称 1 2 3 4 5 6 CRC 校验码低位 7 CRC 校验码高位 单片机接收完这 7 个字节,根据站号、功能码及 CRC 校验判断是 否正确,如果接收正确,则第 4 个字节和第 5 个字节的值就是所需要的 MT6070iH 触摸屏LW 的0 地址的数据。 寄存器数据低位 本系统具有连接电路简单、组态灵活、通信可靠性高等特点。由于 ModBus 通信协议的开放性的特点,国外进口控制器串行通信大都支持 该协议,因此本文所实现的采用 ModBus 协议的串行通信具有广泛的应 用价值。 (8)http://BBs.AweB.com.cn/ 中国三农论坛,博览天下农事,关注农村、关心农业、关爱农民。 除以上信息资源外,专题讨论组、电子论坛等也可以方便地为相同 科学领域的农业专家提供交流空间,这也是当前网络获取农业信息资源 的重要方式之一。 参考文献 [1]刘艳华,徐勇《不同搜索引擎在农业领域的应用效果对比》《农 . . 业网络信息》,2009 年08 期. [2]严方《互联网上农业信息资源的整合、利用与管理研究》《华中 . . [3] 陈林官《浅谈国内网上农业信息资源》 农业图书情报学刊》, 农业大学》,硕士论文. .《. 2001 年02 期.
分享到:
收藏