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

发布者:花海鱼最新更新时间:2023-09-06 来源: elecfans关键字:C51  单片机  PLC  通讯 手机看文章 扫描二维码
随时随地手机看文章

1、 HMI(人机界面)以其体积小,高性能,强实时等特点,越来越多的应用于工业自动化系统和设备中。


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


2、Modbus通讯协议

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

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



(1)典型的RTU消息帧

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


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


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

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


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


(2)所有的Modbus功能码

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


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

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

(1)串口初始化

voidProtocolInit(void)

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

(2)CRC简单函数

unsignedcharCrc16(unsignedchar*puchMsg,unsignedcharusDataLen)

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

(3)初始化变量

voidInitvar(void)

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

(4)串行中断服务程序

voidProtocolSerialProcess(void)interrupt4using2

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

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

voidProtocolRead_bit(unsignedcharDeviceAddr/*PLC局号*/,unsignedcharRegType/*寄存器类型*/,unsignedintBitAddr/*起始地址*/,unsignedcharSubAddr/*子地址*/,unsignedintBitNum/*位数*/)

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

(6)写一个位变量

voidProtocolSetBit(unsignedcharDeviceAddr/*PLC局号*/,unsignedcharRegType/*寄存器类型*/,unsignedintBitAddr/*地址*/,unsignedcharSubAddr/*子地址*/,unsignedi

ntClrSet/*写值“1”或“0”*/)

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

(7)读N个字节变量

voidProtocolReadByte(unsignedcharDeviceAddr/*PLC局号*/,unsignedcharRegType/*寄存器类型*/,unsignedintRegAddr/*起始地址*/,unsignedcharSubAddr/*子地址*/,unsignedintRegNum/*个数*/)

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

(8)写N个字节变量

voidProtocolSetByte(unsignedcharDeviceAddr/*PLC局号*/,unsignedcharRegType/*寄存器类型*/,unsignedintRegAddr/*起始地址*/,unsignedcharSubAddr/*子地址*/,unsignedintRegNum/*个数*/)

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


4、结束语

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


关键字:C51  单片机  PLC  通讯 引用地址:如何实现C51单片机和PLC之间通讯

上一篇:单片机静态办法点亮数码管电路图解
下一篇:C51单片机的PID程序编写

推荐阅读最新更新时间:2024-11-09 11:17

基于51单片机+DHT11温湿度+LCD1602显示
DHT11温湿度相关介绍 DHT11产品概述 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传 感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高 的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测 温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快 响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的 湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内 部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集 成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,使 其成为各类应用甚至最为
[单片机]
基于51<font color='red'>单片机</font>+DHT11温湿度+LCD1602显示
51单片机~继电器,续流二极管相关原理
继电器: 继电器上标识:AC表示交流电,最下面一行05V是5V额定电压。下面的30VDC表示直流电压30V。 继电器电路图接:如下图中间部分; (1) 4,5口是D,E; (2)2常开,3常闭; (3)1,3组成闭合,1和2组成开启; 使用衔铁的原因:衔铁不会被磁化。 续流二极管: 》工作原理:(用感应电动势相关知识理解)所以续流二极管需要在电路截至后迅速打开。
[单片机]
51<font color='red'>单片机</font>~继电器,续流二极管相关原理
C51单片机设计的水箱温度PID控制系统的程序,PID控制程序
此系统是基于PID的单片机温度控制系统,我在网上搜到一段完整的程序,并按他的程序做出了相应的proteus硬件仿真,但 是并没有达到预期的效果.待提高。 程序如下: #include<reg51.h #include<intrins.h #include<math.h #include<string.h struct PID { unsigned int SetPoint; // 设定目标 Desired Value unsigned int Proportion; // 比例常数 Proportional Const unsigned int Integral; // 积分常数 Integral Const
[单片机]
51单片机学习笔记———4.两个按键控制LED小灯
两个按键的控制LED的程序: /* * @Author: 王云龙 * @Date: 2020-02-23 12:48:51 * @Last Modified by: 王云龙 * @Last Modified time: 2020-02-23 15:37:24 */ #include reg52.h #define LED P0;//设置LED引脚 sbit KEY1 = P3^4;//设置按键1引脚 sbit KEY2 = P3^5;//设置按键2引脚 void LightLed1();//点亮方式1 void LightLed2();//点亮方式2 void delay(unsigned int n);//n
[单片机]
在avr单片机(atmega16)上移植freertos
atmega16单片机配置: 内存:1KB flash:16KB 结果:移植后flash只剩4KB左右 内存只剩300KB左右 因此:移植之后基本上只能开启一两个任务,内存已经不够了 正文 一.基础铺垫 二.移植freertos 三.重定向printf到uart0 四.makefile的编写 背景: 在学校学习avr一般都是iccavr这个软件,后面工作后vscode + ubuntu成为了习惯,于是搜索后有了vscode + ubuntu + avr-gcc + isp下载hex文件的玩法。 一.基础铺垫 1.在window上安装vscode 2.在window上安装虚拟机+ubuntu 3.使用vscode ssh登录
[单片机]
在avr<font color='red'>单片机</font>(atmega16)上移植freertos
Profinet接口通讯协议是什么
随着工业自动化技术的不断发展,各种传感器和执行器在工业生产中扮演着越来越重要的角色。而编码器作为一种能够将机械运动转换成数字信号输出的设备,也成为了工业自动化领域中不可或缺的一部分。而Profinet接口通讯协议的编码器,则是目前市场上应用最广泛、性能最优秀的一种编码器。 什么是Profinet接口通讯协议呢?简单来说,它是一种基于以太网技术开发出来的实时通讯协议。相比于传统的Fieldbus技术,Profinet具有更高的数据传输速率和更低的延迟时间,并且支持更大规模、更复杂的网络拓扑结构。因此,在现代工业自动化领域中,越来越多厂商开始采用Profinet作为其设备之间通讯协议。 而对于编码器而言,采用通讯协议则可以带来
[嵌入式]
SIMATIC S7-1500 PLC梯形图编程示例
经验设计法就是在一些典型的梯形图的基础上,根据具体的对象对控制系统的具体要求,对原有的梯形图进行修改和完善。这种方法适合有一定工作经验的人,这些人有现成的资料,特别在产品更新换代时,使用这种方法比较节省时间。下面举例说明这种方法的思路。 【例1】图1为小车运输系统的示意图和I/O接线图,SQ1、SQ2、SQ3和SQ4是限位开关,小车先左行,在SQ1处装料,10s后右行,到SQ2后停止卸料10s后左行,碰到SQ1后停下装料,就这样不停循环工作,限位开关SQ3和SQ4的作用是当SQ2或者SQ1失效时,SQ3和SQ4起保护作用,SB1和SB2是启动按钮,SB3是停止按钮。 图1 解】小车左行和右行是不能同时进行的,因此有联锁关系
[嵌入式]
SIMATIC S7-1500 <font color='red'>PLC</font>梯形图编程示例
如何通过网关实现PLC的远程控制?
网关是一种充当转换重任的计算机系统或设备 在工业现场中,PLC承担自动化设备的控制作用,影响到整个生产线的运作,因此很多企业注重PLC的控制管理和维护,但在疫情时代,派人出差进行现场维护的弊端越来越大,需要面对随时可能发生的疫情,一旦发生就是一两星期的额外花销。对于设备厂商来说,付出的成本和承担的风险不匹配,效率极差。因此企业对于PLC的远程维护需求愈发强烈,需要一整套服务完善、性价比高的解决方案。 工业物联网系统 要实现PLC的远程控制和程序上下载,其实市场上早就有成熟完备的解决方案,仅需要根据自己需求选择工业网关去打造合适的工业物联网系统,就能轻松实现PLC远程调试或程序更新。 组建工业物联网系统的第一步就是选择一个带
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved