0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用Modbus通讯协议如何在人机系统中实现C51单片机和PLC的通信

电子设计 来源:网络整理 作者:佚名 2019-11-21 07:50 次阅读

、引言

HMI(人机界面)以其体积小,高性能,强实时等特点,越来越多的应用于工业自动化系统和设备中。它有字母、汉字、图形和图片等不同的显示,界面简单友好。配有长寿命的薄膜按钮键盘,操作简单。它一般采用具有集成度高、速度快、高可靠且价格低等优点的单片机作为其核心控制器,以实现实时快速处理。 PLC和单片机结合不仅可以提 PLC的数据处理能力,还可以给用户带来友好简洁的界面。本文以 Modbus通讯协议为例,详细讨论了一个人机系统中,如何用C51实现单片机和PLC之间通讯的实例。

2、Modbus通讯协议

Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信

Modbus协议提供了主—从原则,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据作出相应反应。主设备查询的格式:设备地址(或广播,此时不需要回应)、功能代码、所有要发送的数据、和一错误检测域。从设备回应消息包括确认地址、功能码、任何要返回的数据、和一错误检测域。如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。

控制器能设置为两种传输模式:ASCII和 RTU,在同样的波特率下,RTU可比ASCII方式传送更多的数据,所以采用KTU模式。

(1) 典型的RTU消息帧

典型的RTU消息帧如表1所示。

利用Modbus通讯协议如何在人机系统中实现C51单片机和PLC的通信

RTU消息帧的地址域包含8bit。可能的从设备地址是0.。.127(十进制)。其中地址0是用作广播地址,以使所有的从设备都能认识。主设备通过将要联络的从设备的地址放入消息中的地址域来选通从设备。当从设备发送回应消息时,它把自己的地址放入回应的地址域中,以便主设备知道是哪一个设备作出回应。

RTU消息帧中的功能代码域包含了8bits,当消息从主设备发往从设备时,功能代码域将告之从设备需要执行哪些行为;当从设备回应时,它使用功能代码域来指示是正常回应(无误)还是有某种错误发生(称作异议回应,一般是将功能码的最高位由0改为1)。

从主设备发给从设备消息的数据域包含附加的信息:从设备必须用于进行执行由功能代码所定义的行为。这包括了像不连续的寄存器地址,要处理项的数目,域中实际数据字节数。如果没有错误发生,从从设备返回的数据域包含请求的数据。如果有错误发生,此域包含一异议代码,主设备应用程序可以用来判断采取下一步行动。

当选用RTU模式作字符帧时,错误检测域包含一16Bits值(用两个8位的字符来实现)。错误检测域的内容是通过对消息内容进行循环冗长检测(CRC)方法得出的。CRC域附加在消息的最后,添加时先是低字节然后是高字节。

(2) 所有的Modbus功能码

Modbus的功能码定义如表2所示。

利用Modbus通讯协议如何在人机系统中实现C51单片机和PLC的通信

3、常用功能通讯程序的设计

本文介绍了几个Modbus常用功能程序的设计。采用单片机作为主机,在单片机上编写程序实现单片机与PLC之间的通讯。由单片机向PLC发出命令信息,PLC自动作出回应。PLC通过单片机的串行通讯口通讯,程序用C51实现。程序的子函数及其功能:

(1) 串口初始化

void ProtocolInit(void)

函数功能:串口设置为异步通讯方式1(起始位1位,数据位8位,停止位1位);定时/计数器1设置为波特率发生器,通讯速率 9600bps;开串行中断,并把串行中断设置为高优先级。

(2) CRC简单函数

unsigned char Crc16(unsigned char *puchMsg, unsigned char usDataLen)

函数功能:先调入一值是全“1”的16位寄存器,然后调用一过程将消息中连续的8位字节各当前寄存器中的值进行处理。每个8位字符都单独和寄存器内容相或 (OR),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。整个过程要重复8次。在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的当前值相或。最终寄存器中的值,是消息中所有的字节都执行之后的 CRC值。

(3) 初始化变量

void Initvar(void)

函数功能:初始化所有过程变量。

(4) 串行中断服务程序

void ProtocolSerialProcess(void) interrupt 4 using 2

函数功能:发送中断发送主机形成的命令数组,发送完后置标志位;接收中断接收PLC返回的响应数组,存入接收数组,并置标志位,且假设响应正确,留待主机处理。

(5) 读N个位变量(线圈)

void ProtocolRead_bit(unsigned char DeviceAddr/* PLC局号*/, unsigned char RegType/*寄存器类型*/, unsigned int BitAddr/*起始地址*/, unsigned char SubAddr/*子地址*/, unsigned int BitNum/*位数*/)

函数功能:根据函数参数,形成读N个位变量的命令数组,启动发送。等待发送完并接收完(如超时未接收完则重新发送)。分析接收数组:正确,保存读取的数据;错误,重新发送。

(6) 写一个位变量

void ProtocolSetBit(unsigned char DeviceAddr/* PLC局号*/, unsigned char RegType/*寄存器类型*/, unsigned int BitAddr/*地址*/, unsigned char SubAddr/*子地址*/, unsigned i nt ClrSet/*写值“1”或“0”*/)

函数功能:根据函数参数,形成置某位变量为“1”或“0”的命令数组,启动发送。等待发送完并接收完(如超时未接收完则重新发送)。分析接收数组:正确,返回;错误,重新发送。

(7) 读N个字节变量

void ProtocolReadByte(unsigned char DeviceAddr/* PLC局号*/, unsigned char RegType/*寄存器类型*/, unsigned int RegAddr/*起始地址*/, unsigned char SubAddr/*子地址*/, unsigned int RegNum/*个数*/)

函数功能:根据函数参数,形成读N个字节变量的命令数组,启动发送。等待发送完并接收完(如超时未接收完则重新发送)。分析接收数组:正确,保存读取的数据;错误,重新发送。

(8) 写N个字节变量

void ProtocolSetByte(unsigned char DeviceAddr/* PLC局号*/, unsigned char RegType/*寄存器类型*/, unsigned int RegAddr/*起始地址*/, unsigned char SubAddr/*子地址*/, unsigned int RegNum/*个数*/)

函数功能:根据函数参数,形成写N个字变量的命令数组(要写的数从某参数数组中读取),启动发送。等待发送完并接收完(如超时未接收完则重新发送)。分析接收数组:正确,返回;错误,重新发送。

4、结束语

以上的程序已经通过实验,并应用于实际的人机系统中。依照类似的方法,可以编写其他不同功能的程序,实现对PLC的不同控制和操作。利用单片机和PLC进行优势互补,可以组成网络化、智能化的工业控制系统。另外整个单片机系统程序用C51语言编程,程序简洁,便于阅读与调试。单片机和人机界面结合可以实时的显示PLC的工作状况,实时的控制、设置、调整PLC工作情况,提高工业控制的自动化程度和实时性。

责任编辑:gt


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6039

    文章

    44579

    浏览量

    636450
  • plc
    plc
    +关注

    关注

    5013

    文章

    13327

    浏览量

    464072
  • 计数器
    +关注

    关注

    32

    文章

    2256

    浏览量

    94705
收藏 人收藏

    评论

    相关推荐

    如何用C51实现单片机PLC之间通讯

    本文以 Modbus通讯协议为例,详细讨论了一个人机系统,如何用
    发表于 05-26 06:42

    TMS320F240 DSP与C51单片机串行通讯实现

    本文介绍一种实现TMS320F240 DSP与C51单片机串行通讯的方法。详细说明了TMS320F240 DSP与C51
    发表于 11-23 15:55 27次下载

    C51实现单片机CRC快速算法

    摘要:本文介绍了CRC的基本原理和计算方法,给出了利用C51实现单片机CRC的快速算法关键字:CRC;C51
    发表于 09-10 11:14 51次下载

    MODBUS实现触摸屏与单片机通信

    讲解如何利用 MODBUS通信协议实现触摸屏与单片机通信和控审I。详细介绍了触摸屏与
    发表于 08-15 14:27 329次下载
    用<b class='flag-5'>MODBUS</b><b class='flag-5'>实现</b>触摸屏与<b class='flag-5'>单片机</b>的<b class='flag-5'>通信</b>

    利用Keil C51实现单片机与PC串口通信任务

    【LabVIEW从入门到精通】5.2.4.1 利用Keil C51实现单片机与PC串口通信
    发表于 01-08 15:47 0次下载

    利用Keil C51实现单片机与PC串口通信任务2

    【LabVIEW从入门到精通】5.2.4.3 利用Keil C51实现单片机与PC串口通信
    发表于 01-08 15:47 0次下载

    modbus通信协议51单片机C语言实现免费下载

    本文档的主要内容详细介绍的是modbus通信协议51单片机C语言实现免费下载。
    发表于 07-02 16:06 145次下载
    <b class='flag-5'>modbus</b><b class='flag-5'>通信协议</b><b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>C</b>语言<b class='flag-5'>实现</b>免费下载

    单片机C51语言程序设计基础的资料合集免费下载

    本文档的主要内容详细介绍的是单片机C51语言程序设计基础的资料合集免费下载包括了:单片机开发概述,构建C51集成开发环境,单片机
    发表于 03-16 08:00 18次下载
    <b class='flag-5'>单片机</b><b class='flag-5'>C51</b>语言程序设计基础的资料合集免费下载

    C51单片机流水灯C代码

    C51单片机流水灯C代码
    发表于 11-05 15:20 34次下载
    <b class='flag-5'>C51</b><b class='flag-5'>单片机</b>流水灯<b class='flag-5'>C</b>代码

    C51单片机实现双机通讯

    C51单片机实现双机通讯(代码为原创,供参考)一、实验任务:编程控制单片机实现与其他
    发表于 11-11 18:21 60次下载
    <b class='flag-5'>C51</b><b class='flag-5'>单片机</b><b class='flag-5'>实现</b>双机<b class='flag-5'>通讯</b>

    C51单片机与实时系统RTX51(Tiny / Full)

    C51单片机与实时系统RTX51(Tiny / Full)
    发表于 11-18 14:51 50次下载
    <b class='flag-5'>C51</b><b class='flag-5'>单片机</b>与实时<b class='flag-5'>系统</b>RTX<b class='flag-5'>51</b>(Tiny / Full)

    C51单片机C52单片机内部的资源区别

    C52单片机可以理解为是C51单片机的增强版• 两个方面有差异,存储空间和定时器计数器方面有区别 ○ C52
    发表于 11-19 10:36 20次下载
    <b class='flag-5'>C51</b><b class='flag-5'>单片机</b>与<b class='flag-5'>C</b>52<b class='flag-5'>单片机</b>内部的资源区别

    如何利用MODBUS通信协议实现触摸屏与单片机通信和控制

    讲解如何利用MODBUS通信协议实现触摸屏与单片机通信和控审I。详细介绍了触摸屏与
    发表于 08-02 09:50 18次下载

    8051单片机RS485通讯C51程序

    8051单片机RS485通讯C51程序。
    发表于 04-07 15:01 19次下载

    如何利用ModBus通信协议实现触摸屏与单片机通信

    电子发烧友网站提供《如何利用ModBus通信协议实现触摸屏与单片机通信.pdf》资料免费下载
    发表于 10-19 11:19 9次下载
    如何<b class='flag-5'>利用</b><b class='flag-5'>ModBus</b><b class='flag-5'>通信协议</b><b class='flag-5'>实现</b>触摸屏与<b class='flag-5'>单片机</b>的<b class='flag-5'>通信</b>