欢迎来到论文网! 识人者智,自知者明,通过生日认识自己! 生日公历:
网站地图 | Tags标签 | RSS
论文网 论文网8200余万篇毕业论文、各种论文格式和论文范文以及9千多种期刊杂志的论文征稿及论文投稿信息,是论文写作、论文投稿和论文发表的论文参考网站,也是科研人员论文检测和发表论文的理想平台。lunwenf@yeah.net。
您当前的位置:首页 > 科技论文 > 计算机论文

基于MODBUS协议的单片机与触摸屏通信(图文)

时间:2011-04-23  作者:秩名

论文导读:触摸屏能够直观、生动地显示运行参数和运行状态,而且通过触摸屏画面可以直接修改系统运行参数,人机交互性好。触摸屏和单片机通信,需要根据触摸屏采用的通信协议为单片机编写相应的通信程序。Modbus协议是美国Modicon公司推出的一种有效支持控制器之间以及控制器经由网络(例如以太网)和其它设备之间进行通信的协议。
关键词:触摸屏,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-485 2W接口的管脚2为485A,管脚1为485B,管脚5为公共地。

二、如何将MT6070iH设定成Modbus装置

将MT6070iH触摸屏设定成Modbus装置(以称为Modbus Server),单片机或其它装置只需使用Modbus协议,透过RS232/485接口,即可读写MT6070iH上的数据。将MT6070iH设定成Modbus装置的方法如下:

首先需在MT6070iH使用的MTP程序的设备清单(device table)中增加一个新的设备,此时PLC种类需选择“MODBUS Server”,PLC接口可以选择RS232、RS4852W、RS485 4W或Ethernet,这里选择RS485 2W。如图2所示。论文大全。

图2 将MT6070iH设定成Modbus装置

当接口选择使用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位

奇偶校验位 无

停止位 1位

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

初始结构 ≥4字节的时间

地址码 1字节

功能码 1字节

数据区 N字节

错误校验 16位CRC码

结束结构 ≥4字节的时间

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

四、通信程序的开发

MT6070iH触摸屏只支持Bit和Word地址类型,而实际的单片机或其它控制器还有Byte、Double Word等表示方法,因此在进行通信时,需要把单片机和触摸屏的数据进行变换。触摸屏画面元件读取地址的设备类型有LW、0x、1x、3x、4x、RWI、RW等选项。其中,LW表示该元件读取的是触摸屏内部的地址,如其它元件的地址;0x表示读取的是控制器的输出信号;1x表示读取的控制器的输入信号;3x和4x指控制器的寄存器地址类型,其中4x是可读可写的,3x是只读的;RWI、RW都是触摸屏的内部地址,起辅助作用。这里仅以读写LW的0地址的数据为例说明读写过程。

MT6070iH触摸屏与单片机以Modbus协议通信,用到的Modbus功能码如下:

功能码 名称 作用 01 读取线圈状态 取得一组逻辑线圈的当前状态(ON/OFF) 02 读取输入状态 取得一组开关输入的当前状态(ON/OFF) 03 读取保持寄存器 在一个或多个保持寄存器中取得当前的二进制值 04 读取输入寄存器 在一个或多个输入寄存器中取得当前的二进制值 05 强置单线圈 强置一个逻辑线圈的通断状态 06 预置单寄存器 把具体二进值装入一个保持寄存器 1. 串口程序的初始化

使用定时器1作为波特率发生器,对串口的初始化程序如下:

void Initial(void)

{

SCON=0x50; //串口方式1,允许接收

TMOD=0x20; //定时器1方式2

TL1=0xFd; //波特率设为9600

TH1=0xFd; //存储定时器初始值

EA=1; //全局中断允许

TR1=1; //启动定时器

}

2. 向MT6070iH触摸屏LW的0地址写入数据

向MT6070iH触摸屏LW的0地址写入数据0x3A4B,功能码为6,程序如下:

void DateWrite(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);

TI=0;

}

ES=1; //开串行口中断

}

3. 从MT6070iH触摸屏LW的0地址读取数据

从MT6070iH触摸屏LW的0地址读取数据,功能码为3,程序如下:

void DateWrite(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协议的串行通信具有广泛的应用价值。

 

 

查看相关论文专题
加入收藏  打印本文
上一篇论文:基于MAX7219的PLC数码管显示器
下一篇论文:基于NiosII的嵌入式标清高清视觉检测系统的设计
科技论文分类
科技小论文 数学建模论文
数学论文 节能减排论文
数学小论文 低碳生活论文
物理论文 建筑工程论文
网站设计论文 农业论文
图书情报 环境保护论文
计算机论文 化学论文
机电一体化论文 生物论文
网络安全论文 机械论文
水利论文 地质论文
交通论文
相关计算机论文
最新计算机论文
读者推荐的计算机论文