手机网站网址申请,网站备案域名用二级域名,中企动力常州分公司,简单的h5制作开发基于MODBUS协议的单片机与(串口屏)触摸屏通信(图文) 导读#xff1a;触摸屏能够直观、生动地显示运行参数和运行状态#xff0c;而且通过触摸屏画面可以直接修改系统运行参数#xff0c;人机交互性好。触摸屏和单片机通信#xff0c;需要根据触摸屏采用的通信协议为单片机编…基于MODBUS协议的单片机与(串口屏)触摸屏通信(图文) 导读触摸屏能够直观、生动地显示运行参数和运行状态而且通过触摸屏画面可以直接修改系统运行参数人机交互性好。触摸屏和单片机通信需要根据触摸屏采用的通信协议为单片机编写相应的通信程序。Modbus协议是美国Modicon公司推出的一种有效支持控制器之间以及控制器经由网络例如以太网和其它设备之间进行通信的协议。关键词触摸屏MCS-51单片机Modbus协议通信 在工业控制中经常需要观察系统的运行状态或者修改运行参数。触摸屏能够直观、生动地显示运行参数和运行状态而且通过触摸屏画面可以直接修改系统运行参数人机交互性好。单片机广泛应用于工控领域中与触摸屏配合可组成良好的人机交互环境。触摸屏和单片机通信需要根据触摸屏采用的通信协议为单片机编写相应的通信程序。Modbus协议是美国Modicon公司推出的一种有效支持控制器之间以及控制器经由网络例如以太网和其它设备之间进行通信的协议。本文以AT89S51单片机和广州易显科技有限公司的HMImaker触摸屏为例介绍其通信程序的开发过程。 一、系统结构 实现触摸屏与单片机的通讯主要是解决通讯协议的问题。本文使用开放的Modbus通讯协议以触摸屏作主机Master单片机作从机Slaver。HMImaker触摸屏本身支持Modbus通讯协议只要单片机按照Modbus协议进行收发数据就可以进行通信了。触摸屏与单片机之间采用RS-232或者RS-485标准接口直接连接传输速率设置为9600bps。图1为该系统的电路图。 图1 系统电路图 将AT89S51单片机的TXD、RXD口设置为异步串行通信模式经过MAX485芯片将TTL电平转换为RS485电平再与HMImaker触摸屏RS-485 2W接口相连即完成了硬件连接其中P3.2作为收发控制信号。HMImaker触摸屏RS-485 2W接口的管脚2为485A管脚1为485B管脚5为公共地。 二、如何将HMImaker触摸屏设定成Modbus装置 将HMImaker触摸屏设定成Modbus装置以称为Modbus RTU Master单片机或其它装置只需使用Modbus协议透过RS232/485接口即可读写HMImaker触摸屏上的数据。将HMImaker触摸屏设定成Modbus装置的方法如下 首先需在HMImaker触摸屏使用的程序的界面协议中增加一个新的设备此时PLC种类需选择“Modbus RTU Master”PLC接口可以选择RS232、RS4852W、RS485 4W或Ethernet这里选择RS485 2W。如图2所示。 图2 将HMImaker触摸屏设定成Modbus装置 当接口选择使用RS485时需选择使用的连接端口COM1COM3并设定正确的通讯参数及站号。这里选择COM19600,N,8,1站号设定为1。 按下“确定”键后可以在设备清单中发现一个新的装置Modbus RTU Master此时即完成了Modbus装置的设定在完成界面设计的编译并将获得的NANDflash档案下载到触摸屏后即可透过Modbus协议读写HMImaker触摸屏上的数据。 三、Modbus通信协议介绍 Modbus通信协议是一种串行的主从通信协议网络里仅有一台设置可作为主机称Master其它设备作为从机称Slaver主机不需编号从机必须编号。协议定义了主机查询及从机应答的信息帧格式。论文大全。通信时主机首先向从机发出请求信息符合相应地址码的从机接收通讯命令并除去地址码读取信息如果没有出错则执行相应的任务然后把执行结果返给主机。若从机接收到的校验码与本机计算的不同则说明数据在通信过程中出现错误从机把这次请求视为无效功能代码将被修改以用于指出回应消息是错误的同时数据段包含了描述此错误信息的代码。当主机收到这一信息时会重新发送请求信息。校验方式分为LCR传送数据为ACSII时校验或CRC传送数据为二进制时校验这里采用CRC校验方式。信息传输为异步方式并以字节为单位。主从站之间通讯的字格式如下 字格式串行数据 10位二进制 起始位 1位 数据位 8位 奇偶校验位 无 停止位 1位 Modbus协议可支持ASCII码或二进制格式的数据传输。ACSII码方式下每一个字节数据分两个字节传送二进制方式下用一个字节传送为了减少数据传输量一般选二进制数据方式。各个区允许发送的字节均为16进制的09AF。二进制信息帧标准结构为 初始结构 ≥4字节的时间 地址码 1字节 功能码 1字节 数据区 N字节 错误校验 16位CRC码 结束结构 ≥4字节的时间 二进制模式中信息开始至少需要3.5个字符的静止时间依据使用的波特率很容易计算这个静止时间。发送完最后一个字符后也有一个至少3.5个字符的静止时间然后才能发送一个新的信息。网络上的设备连续监测网络上的信息包括静止时间。 四、通信程序的开发 HMImaker触摸屏只支持Bit和Word地址类型而实际的单片机或其它控制器还有Byte、Double Word等表示方法因此在进行通信时需要把单片机和触摸屏的数据进行变换。触摸屏画面元件读取地址的设备类型有LW、0x、1x、3x、4x、RWI、RW等选项。其中LW表示该元件读取的是触摸屏内部的地址如其它元件的地址0x表示读取的是控制器的输出信号1x表示读取的控制器的输入信号;3x和4x指控制器的寄存器地址类型其中4x是可读可写的3x是只读的;RWI、RW都是触摸屏的内部地址起辅助作用。这里仅以读写LW的0地址的数据为例说明读写过程。 HMImaker触摸屏与单片机以Modbus协议通信用到的Modbus功能码如下 功能码 名称 作用 01 读取线圈状态 取得一组逻辑线圈的当前状态ON/OFF) 02 读取输入状态 取得一组开关输入的当前状态ON/OFF) 03 读取保持寄存器 在一个或多个保持寄存器中取得当前的二进制值 04 读取输入寄存器 在一个或多个输入寄存器中取得当前的二进制值 05 强置单线圈 强置一个逻辑线圈的通断状态 06 预置单寄存器 把具体二进值装入一个保持寄存器 1. 串口程序的初始化 使用定时器1作为波特率发生器对串口的初始化程序如下 void Initial(void) { SCON0x50; //串口方式1允许接收 TMOD0x20; //定时器1方式2 TL10xFd; //波特率设为9600 TH10xFd; //存储定时器初始值 EA1; //全局中断允许 TR11; //启动定时器 } 2. 向HMImaker触摸屏LW的0地址写入数据 向HMImaker触摸屏LW的0地址写入数据0x3A4B功能码为6程序如下 void DateWrite(void) { ES0; //关中断 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; //要写入数据低位 crc0xffff; crccalccrc(9,inData[0]); //根据前9个字节计算CRC值 inData[9]crc0xff; //CRC值低8位 inData[10]crc8; //CRC值高8位 for(a0;a11;a) //共发送11个字节 { SBUFinData[a]; //发送数据 while(!TI); TI0; } ES1; //开串行口中断 } 3. 从HMImaker触摸屏LW的0地址读取数据 从HMImaker触摸屏LW的0地址读取数据功能码为3程序如下 void DateWrite(void) { ES0; //关中断 unsigned int a; unsigned int crc; inData[0]1; //站号 inData[1]3; //功能码 inData[2]0; //起始地址高位 inData[3]0; //起始地址低位 inData[4]0; //寄存器个数高位 inData[5]1; //寄存器个数低位 crc0xffff; crccalccrc(6,inData[0]); //根据前6个字节计算CRC值 inData[6]crc0xff; //CRC值低8位 inData[7]crc8; //CRC值高8位 for(a0;a8;a) //共发送8个字节 { SBUFinData[a]; //发送数据 while(!TI); TI0; } ES1; //开串行口中断 } 发送完读取数据的信息一旦HMImaker触摸屏接收到该信息经过CRC校验如果没有错误就会把LW的0地址数据发送给单片机共7个字节数据格式如下 字节 数据段名称 1 站号 2 功能码 3 读取字节数 4 寄存器数据高位 5 寄存器数据低位 6 CRC校验码低位 7 CRC校验码高位 单片机接收完这7个字节根据站号、功能码及CRC校验判断是否正确如果接收正确则第4个字节和第5个字节的值就是所需要的HMImaker触摸屏LW的0地址的数据。 本系统具有连接电路简单、组态灵活、通信可靠性高等特点。由于Modbus通信协议的开放性的特点国外进口控制器串行通信大者支持该协议因此本文所实现的采用Modbus协议的串行通信具有广泛的应用价值。 转载于:https://www.cnblogs.com/vgalvds/p/6728685.html