嵌入式系统中MODBUS通信的教学研究与实践.doc

嵌入式系统中MODBUS通信的教学研究与实践.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式系统中MODBUS通信的教学研究与实践   打开文本图片集   摘   要:针对moDBUS通信协议进行了实践和教学研究。首先,指出了moDBUS协议的重要性以及地位作用;其次,分析了moDBUS帧的结构和通信原理,再利用一个通信项目分析了moDBUS通信的详细过程和开发代码;最后,指出moDBUS通信过程中需要注意的问题,并进行了总结,这对于moDBUS项目的研究与开发有重要的参考价值。   关键词:moDBUS通信协议;STc单片机;485通信;工业物联网   1   网络通信概述   随着计算机通信技术的发展,越来越多的计算机系统连接到网络当中,网络通信成为当前信息科学最为热点的问题之一,尤其在工业控制与物联网领域,如何安全、快速、便捷地传送数据,成为衡量工业发展水平的重要标志之一。与传统Pc机相比,工业领域的信息通信的特点[1]在于:通信主机结构类型不尽相同;通信环境有可能会受到辐射干扰;通信设备成本限制;通信组网信息安全;网络拓扑结构各异。在这种背景下,选择什么样的通信方式和通信协议,就显得异常关键。   2   moDBUS通信协议   moDBUS[2]是由施耐德电气(现在的modicon公司)于1979年为PLc之间的通信而研发的一种串行通信协议,它为连接至不同类型总线或网络的设备之间提供了c/S通信,目前已经成为工业领域通信协议的业界标准。自1979年以来,使成千上万的自动化设备能够通信,很好地解决工业领域面临的通信难题,成为目前主流的工业物联网通信协议。   moDBUS协议定义了一个与基础通信层无关的简单协议数据单元(ProtocolDataUnit,PDU)。特定总线或网络上的moDBUS协议映射能够在应用数据单元(ApplicationDataUnit,ADU)上引入一些附加域。启动moDBUS事务处理的客户机创建moDBUS应用数据单元。功能码向服务器指示将执行哪种操作。moDBUS协议建立了客户机启动的请求格式。moDBUS事务处理流程如图1所示。   3   moDBUS通信实践与教学   总体结构   采用单片机与Pc上位机的串口通信方式,并采用RS485总线进行信号传输,以保证信号的总体质量。单片机一端作为服务器端,不主动发送数据,只是等待应答客户端请求的数据。Pc机作为客户端,负责启动请求与接收响应。   与RS232相比,采用RS485总线的好处在于:(1)传输方式不同。RS-232采取不平衡传输方式,即所谓单端通信。而RS485则采用平衡传输,即差分传输方式。在稳定性和抗干扰性方面都有明显优势。(2)传输距离不同。RS-232适合本地设备之间的通信,传输距离一般不超过20m。而RS-485的传输距离为几十米到上千米。(3)主机数量不同。RS-232只允許一对一通信,而RS-485接口在总线上是允许连接收发器多达128个。   moDBUS软件设计   moDBUS公共功能码是moDBUS协议通用的功能码,这个功能码是预先被定义好的,并且需要保证是唯一的、公开证明的。对应于每个操作访问,相关程序代码如下:   voidreadcoil(void);//读线圈   voidreadRegisters(void);//读寄存器   voidforceSinglecoil(void);//强制单个线圈   voidpresetSingleRegister(void);//设置单个寄存器   voidpresetmultipleRegisters(void);//设置多个寄存器   voidforcemultiplecoils(void);//强制多个线圈   moDBUS通信从机软件设计   moBUS通信的主要过程包括:(1)进行系统初始化设置,主要包括定时器初始化,串口初始化,中断服务函数的编写和变量定义。(2)定时处理,不是指定时器与计数器的初始化,而是指判断一个完整的moDBUS帧是否结束的时间。关于区分两个帧的间隔时间,有许多衡量方法,一般采用延时几十微秒的方法。(3)循环监听moDBUS状态,一旦收到完整的数据帧,便开始处理,利用前面讲到的moDBUS库函数进行处理。在完成读写任务后,按照moDBUS帧规则,应答数据通过moDBUS总线传回客户端。部分初始化代码如下。   //串口初始化代码   voidUartInit(ULoNGbaud,UcHARmode)   {IE=0x90;   TmoD=(TmoD0X0F)|0X20;   TH1=/12/32/9600;   TL1=/12/32/9600;   TR1=1;   ScoN=0X50;   PcoN|=0X80;}   //串口中断服务函数代码   voidcommIn

文档评论(0)

586334000 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档