zoukankan      html  css  js  c++  java
  • 基于MODBUS协议的单片机与(串口屏)触摸屏通信(图文)

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

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

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

    在工业控制中经常需要观察系统的运行状态或者修改运行参数。触摸屏能够直观、生动地显示运行参数和运行状态,而且通过触摸屏画面可以直接修改系统运行参数,人机交互性好。单片机广泛应用于工控领域中,与触摸屏配合,可组成良好的人机交互环境。触摸屏和单片机通信,需要根据触摸屏采用的通信协议为单片机编写相应的通信程序。Modbus协议是美国Modicon公司推出的一种有效支持控制器之间以及控制器经由网络(例如以太网)和其它设备之间进行通信的协议。本文以AT89S51单片机和广州易显科技有限公司的HMImaker触摸屏为例,介绍其通信程序的开发过程。
      一、系统结构
      实现触摸屏与单片机的通讯,主要是解决通讯协议的问题。本文使用开放的Modbus通讯协议,以触摸屏作主机(Master),单片机作从机(Slaver)。HMImaker触摸屏本身支持Modbus通讯协议,只要单片机按照Modbus协议进行收发数据,就可以进行通信了。触摸屏与单片机之间采用RS-232或者RS-485标准接口直接连接,传输速率设置为9600bps。图1为该系统的电路图。
      基于MODBUS协议的单片机与(串口屏)触摸屏通信

      图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所示。
      

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

      图2 将HMImaker触摸屏设定成Modbus装置
      当接口选择使用RS485时,需选择使用的连接端口(COM1~COM3),并设定正确的通讯参数及站号。这里选择COM1(9600,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进制的0~9,A~F。二进制信息帧标准结构为:
      初始结构 ≥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)
      {
       SCON=0x50; //串口方式1,允许接收
       TMOD=0x20; //定时器1方式2
       TL1=0xFd; //波特率设为9600
       TH1=0xFd; //存储定时器初始值
       EA=1; //全局中断允许
       TR1=1; //启动定时器
      }
      2. 向HMImaker触摸屏LW的0地址写入数据
      向HMImaker触摸屏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. 从HMImaker触摸屏LW的0地址读取数据
      从HMImaker触摸屏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; //开串行口中断
      }
      发送完读取数据的信息,一旦HMImaker触摸屏接收到该信息,经过CRC校验,如果没有错误,就会把LW的0地址数据发送给单片机,共7个字节,数据格式如下:
      字节 数据段名称
      1 站号
      2 功能码
      3 读取字节数
      4 寄存器数据高位
      5 寄存器数据低位
      6 CRC校验码低位
      7 CRC校验码高位
      单片机接收完这7个字节,根据站号、功能码及CRC校验判断是否正确,如果接收正确,则第4个字节和第5个字节的值就是所需要的HMImaker触摸屏LW的0地址的数据。
      本系统具有连接电路简单、组态灵活、通信可靠性高等特点。由于Modbus通信协议的开放性的特点,国外进口控制器串行通信大者支持该协议,因此本文所实现的采用Modbus协议的串行通信具有广泛的应用价值。

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


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

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

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

    串口触摸屏人机界面,工控机,嵌入式工控机,VGA工控机,15寸触摸屏,12寸触摸屏,10寸触摸屏,8寸触摸屏,7寸触摸屏,5寸触摸屏,4.3寸触摸屏,人机界面,单片机人机界面,PLC人机界面,单片机或PLC驱动控制5至80寸触摸显示器与电视机等系列产品。
  • 相关阅读:
    商贸通帐套隐藏方法
    固定资产打开提示:上年度数据未结转!
    ZOJ 2432 Greatest Common Increasing Subsequence
    POJ 1080 Human Gene Functions
    POJ 1088 滑雪
    POJ 1141 Brackets Sequence
    POJ 1050 To the Max
    HDOJ 1029 Ignatius and the Princess IV
    POJ 2247 Humble Numbers
    HDOJ 1181 变形课
  • 原文地址:https://www.cnblogs.com/vgalvds/p/6728685.html
Copyright © 2011-2022 走看看