基于Modbus协议实现单片机与PLC之间的通讯
PLC与单片机之间的串行通信实现方法探讨

PLC与单片机之间的串行通信实现方法探讨随着工业自动化的不断发展,PLC(Programmable Logic Controller,可编程逻辑控制器)和单片机作为常用的控制设备,扮演着越来越重要的角色。
在实际的工业生产中,PLC和单片机往往需要进行数据的交互和通信,以实现对工艺过程的控制和监测。
而在这种通信中,串行通信被广泛应用。
本文将探讨PLC和单片机之间的串行通信实现方法,以期为实际应用提供一些参考。
一、串行通信概述串行通信是指在数据传输中,比特按照一定的顺序进行传送,也就是每次只传送一个比特位。
与之相对应的是并行通信,其数据在传输时多个比特同时传送。
在实际工业控制系统中,串行通信由于线缆布置简单、传输距离远和干扰小等特点而得到了广泛的应用。
串行通信包含同步和异步两种方式。
在同步串行通信中,发送和接收设备通过一个时钟信号实现同步传输。
而在异步串行通信中,传输的数据通过起始位和停止位的表示来进行同步。
在工业控制系统中,由于同步通信受到时钟信号的限制,一般采用异步串行通信的方式。
二、PLC与单片机之间的串行通信现在让我们来讨论PLC与单片机之间的串行通信。
PLC作为工业控制中的核心设备,通常负责控制和监测生产过程。
而单片机则常用于硬件控制和数据的采集。
在工业控制系统中,PLC和单片机之间需要进行数据的交互和通信,以实现工艺过程的控制和监测。
在实际的应用中,PLC与单片机之间的串行通信一般采用RS-232、RS-485、Modbus等通信协议。
RS-232是一种传统的串行通信标准,其传输距离较短,一般在15米左右。
RS-485则是一种适用于远距离传输的串行通信标准,其传输距离可以达到1200米。
而Modbus是一种通信协议,广泛应用于工业控制系统中,其采用主从架构,支持点对点和多点通信。
1、使用串口通信模块在实际应用中,我们可以在PLC和单片机上分别搭载串口通信模块,通过串口通信模块实现两者之间的数据交互。
基于PLC的Modbus通信协议的实现

基于PLC的Modbus通信协议的实现————————————————————————————————作者: ————————————————————————————————日期:摘要:介绍了三菱FX2N系列PLC 在无协议通信方式下与基于DS18b20 型数字温度传感器的STA-D 温度采集模块以Modbus 协议通信,实现即时读取温度, 并给出了相关程序。
随着3C 技术迅速发展, 网络集成信息自动化正迅速应用到现场设备、控制中, 现场总线控制系统正逐步取代传统的集散控制系统,其中Modbus现场总线协议在基于PLC 的控制系统中得到了越来越广泛的应用. 在本系统中,以PLC为主机、温度采集模块为从机, 完成对生产过程的自动控制、工业流程及工艺参数的显示、修改, 根据PLC 的无协议通信功能, 用Modbus现场总线协议实现主机与从机的通讯。
本文基于某监控系统的设计,实现了三菱FX2N 系列PLC在无协议通信方式下与DS18b20型数字温度传感器的采集模块以Mo dbus 协议通信,在电炉熔化工作过程中,对电炉、电容、冷却水等100多点的温度实现巡检。
1系统硬件组成温度监控部分系统的硬件由DS18b20型数字温度传感器、采集模块、FX2N 系列PLC、FX2N-485-BD、HITECH 触摸屏组成,其结构如图1 所示。
图1 系统硬件组成DS18b20 是世界上首个支持单线总线接口( 1w ire bus interface)的数字化温度传感器, 单总线接口便于构建分布式的温度测控网络,数字化的输出提高了信号传输的可靠性,而且使外围电路大为简化。
DS18b20 具有很高的适应性和性价比, 其测温范围为-55~125 ℃, 测温精度为±0. 5℃, 测温距离最大为200m , 测温方式使用3线制,本系统使用的传感器排序方式为指定排序。
DS18b20 内部主要有3 个数字部件: 1个温度传感器、1个64 位的激光刻蚀ROM、9 字节高速暂存器ScratchpadRAM和3字节EERAM. ROM 上64 位数据是传感器的序列号。
探讨PLC与单片机之间的串行通信实现

探讨PLC与单片机之间的串行通信实现PLC (可编程逻辑控制器) 和单片机是现代自动化控制系统中常用的两种设备。
PLC 主要用于工业自动化控制,而单片机则常用于嵌入式系统和小型控制器中。
在某些应用中,PLC 和单片机之间的数据交换是必要的。
这可以通过串行通信实现。
串行通信是一种在两个设备之间传输数据的方式,通过一根线路逐位地传输数据。
常见的串行通信协议包括 RS232、RS485、Modbus 等。
需要确定 PLC 和单片机之间的物理接口。
通常情况下,PLC 和单片机使用 RS485 接口进行通信。
RS485 是一种高速、远距离传输的串行通信协议,适用于工业环境。
PLC 和单片机分别连接到一个 RS485 转换器,将信号转换为串行通信所需的电平和协议。
在 PLC 端,需要编写一个通信模块,用于接收和发送数据。
该模块可以通过 PLC 的编程软件进行开发。
通常,PLC 支持多种编程语言,如 Ladder Diagram (梯形图),Structured Text (结构化文本)等。
在通信模块中,需要使用特定的指令来配置和控制串行通信。
在单片机端,也需要编写一个串行通信的程序。
通常情况下,单片机可以使用 C 语言来开发。
程序包括设置串行通信的参数,如波特率、数据位、停止位等,以及接收和发送数据的函数。
在数据传输过程中,需要协商好数据格式和通信协议。
数据格式指定了数据的组织形式,如字节顺序、数据类型等。
通信协议则定义了数据的传输方式和规则。
常见的通信协议包括 Modbus、Profibus、CAN 等。
在 PLC 和单片机之间,需要约定好使用的通信协议,并编写相应的程序来实现数据的传输和解析。
除了硬件和软件的设置外,还需要注意一些通信过程中的问题。
PLC 和单片机之间的通信速度应该相匹配,以避免数据丢失或溢出。
需要确保通信连接的稳定性和可靠性,例如使用合适的电缆连接、地线和屏蔽等。
PLC 和单片机之间的串行通信是现代自动化控制系统中常见的需求之一。
PLC与单片机之间的串行通信实现方法探讨

PLC与单片机之间的串行通信实现方法探讨PLC(可编程逻辑控制器)和单片机是工业自动化领域中常用的控制设备。
它们通常需要进行数据交换和通信,以实现更复杂的控制功能。
本文将探讨PLC与单片机之间的串行通信实现方法。
1. 基于RS485的串行通信RS485是一种常用的串行通信协议,具有传输距离远、抗干扰能力强等特点。
在PLC和单片机之间建立RS485通信可以实现可靠的数据传输。
需要在PLC和单片机之间建立RS485物理连接。
一般使用双线制,其中一条线为发送线(A)、另一条线为接收线(B),同时需要接地线(GND)。
在硬件层面上,PLC和单片机需要通过485转232转换器实现电平转换。
PLC的UART串口通过485转232转换器连接到单片机的串口,以实现数据的传输。
在软件层面上,PLC和单片机需要定义一套通信协议,以规定数据的传输方式、格式和顺序。
通常可以使用Modbus协议来实现PLC与单片机之间的串行通信。
PLC作为Modbus 从站,单片机作为Modbus主站,通过读写寄存器的方式进行数据的读取和写入。
2. 基于CAN总线的串行通信CAN(Controller Area Network)总线是一种高可靠性、高带宽、多节点、实时性强的串行通信协议,广泛应用于汽车电子和工业控制领域。
通过CAN总线实现PLC和单片机之间的串行通信,可以实现多节点的数据交换和实时的控制。
在软件层面上,PLC和单片机需要使用CAN通信协议,如CANOpen或者DeviceNet协议,来实现数据的传输和控制。
在硬件层面上,PLC和单片机需要具备以太网接口,并通过以太网交换机或者路由器连接到同一个局域网中。
在软件层面上,PLC和单片机可以使用TCP/IP协议来实现数据的传输和控制。
PLC作为服务器,单片机则可以作为客户端,通过建立TCP连接来进行数据的读写操作。
PLC与单片机之间的串行通信可以通过不同的通信协议实现,如RS485、CAN总线和以太网。
PLC与单片机之间的串行通信实现方法探讨

PLC与单片机之间的串行通信实现方法探讨PLC(可编程逻辑控制器)和单片机是现代工业自动化中常见的控制设备,它们通常被用于监控和控制工厂中的设备和生产线。
在实际应用中,很多情况下需要PLC和单片机之间进行通信,以便实现数据传输和控制指令的交互。
本文将探讨PLC与单片机之间的串行通信实现方法,为工程师在实际应用中提供一些参考。
一、PLC与单片机之间的通信方式PLC与单片机之间的通信方式主要包括串行通信和网络通信。
在工业控制系统中,串行通信是最常用的一种通信方式,它可以简单地通过串口连接实现设备之间的数据传输。
PLC和单片机都支持串行通信,因此在实际应用中可以选择串行通信方式进行通讯。
二、串行通信的基本原理串行通信是将数据一位一位地按照一定的时间间隔发送出去,接收端再按照相同的时间间隔接收数据。
串行通信有两种方式:同步串行通信和异步串行通信。
在工业控制系统中,异步串行通信方式更常见,因此本文将重点介绍异步串行通信的实现方法。
异步串行通信是将数据分为帧进行传输,每一帧包括起始位、数据位、校验位和停止位。
起始位和停止位用来标识一帧数据的开始和结束,数据位用来传输实际的数据,校验位用来检测数据传输过程中是否发生错误。
在实际应用中,可以通过串口模块来实现异步串行通信。
1. 使用串口模块在实际应用中,可以在PLC和单片机上分别连接串口模块,通过串口模块来实现两者之间的串行通信。
串口模块可以实现串口转换和数据传输,它能够将串行数据转换为并行数据,方便单片机和PLC进行数据交换。
2. 使用Modbus协议Modbus是一种常用的工业通信协议,它可以在串行通信中实现设备之间的数据传输。
在实际应用中,可以使用Modbus协议来实现PLC和单片机之间的通信。
单片机可以通过Modbus协议向PLC发送控制指令,PLC可以通过Modbus协议向单片机发送传感器数据,从而实现数据交换和控制指令的传输。
3. 使用RS485通信以一个简单的例子来说明PLC与单片机之间的串行通信实现方法。
用Modbus协议实现DCS与PLC之间的串行通讯

用Modbus协议实现DCS与PLC之间的串行通讯万立氧空分装置是2008年辽化公司20万吨环氧乙烷/乙二醇改造的配套项目,该装置仪控系统采用了先进的Honeywell PKS集散控制系统来实现对整个装置的各系统及主要设备的工艺参数的监控,并实现各主要操作阀门、切换阀门的自动控制或遥控操作,以及必要的联锁保护措施。
氮压机选用Ingersoll—rand的CENTAC 3C70MX5N2型压缩机,该压缩机配置独立的控制系统CM C控制器,为了有效的监控氮压机的运行参数,我们利用Modbus协议实现了Honeywell PKS集散系统与Ingersoll—rand CM C可编程序控制器之间串行通讯。
2 Modbus协议简介Modbus是Modicon公司于1 979年提出的一种通信协议,经过多年的实际应用,已经成为一种应用于工业控制器上的标准通信协议。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。
它描述了控制器请求访问其它设备的过程,以及怎样侦测错误并记录,它制定了消息域格局和内容的公共格式[5]。
当在Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。
如果需要回应,控制器将生成反馈信息并用Modbus协议发出。
标准的Modbus口是使用RS-232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。
控制器能直接或经由MOdem组网。
2.1 Modbus报文如图1所示,Modbus通信使用主从技术,即仅设备(主设备)能初始化传输(查询)。
其它设备(从设备)根据主设备查询提供的数据作出相应反应。
主设备可单独和从设备通信,也能以广播方式和所有从设备通信。
如果单独通信,从设备返回消息作为回应,如果是以广播方式查询的,则不作任何回应。
基于Modbus协议的PLC与单片机的多机通讯

本系统利用RS485总线来完成多机通讯的,而RS485只是ISO /OSI 七层模型的最底层—物理层,要完成可靠的多机通讯则必须还要加上应用层。
本系统则是采用Modbus 协议,Modbus 协议是应用于电子控制器上的一种通用语言。
通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信。
它已经成为一通用工业标准。
有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。
1系统总体方案设计本系统的上位机采用的是西门子S7-200PLC ,作为系统的主站,而多个AT89S52单片机则作为从机通过RS485连接至上位机S7-200。
本系统的通讯过程如下:上位机S7-200通过RS485总线发送控制命令,各个单片机从机接收数据帧,从数据帧中提取出地址信息并与自身的地址作较。
若不符合则丢弃该数据帧,反之,则接收数据帧,完成相应的功能,并返回数据帧给PLC 。
其中上述数据帧的格式在Modbus 协议中定义。
系统结构如图1所示。
2硬件电路设计单片机串行通讯口是标准的TTL 电平,为了完成和PLC 之间的多机通讯则需加上MAX485芯片。
采用MAX485芯片,一方面是了完成电平转换,降低了传输数据误码率;另一方面MAX485芯片有数据收发控制端,方便了多机通讯的实现。
单片机与MAX485的接线图如图2所示,其中P2.0控制了MAX485芯片的数据收发,当期高电平时,MAX485只能发送数据;反之则只能接收数据。
因此基于RS485总线的多机通讯是半双工的。
单片机的发送数据端和接收端分别接至MAX485芯片的发送数据端和接收数据端。
经MAX485芯片转换后,其输出引脚分别和其他所有单片机的A 、B 两端连接,无需交叉,最终汇总至S7-200的自由口。
图2单片机与MAX485芯片接线图3软件设计S7-200和单片机之间通讯除了借助于RS485总线这个物理层,还需应用层的支持,本系统应用层采用的是Modbus 协议。
基于MODBUS协议和PLC的通讯

基于MODBUS协议和PLC的通讯'判断电机是否在转动Public Sub WaitMotorStop()'判断电机是否在转动Dim str1 As String = '1'Do Until str1 = '0'Comm2PLC(RCS, Relay901, '')System.Threading.Thread.Sleep(50)Dim str2 As String = FormMain.RS232.ReadExisting().ToString()FormMain.RS232.DiscardInBuffer()FormMain.RS232.DiscardOutBuffer()'先高低位转换,再16进制转换为10进制。
例如把78563412转换为12345678If str2.Length > 6 Thenstr1 = str2.Substring(6, 1)End IfLoopThread.Sleep(200)End Sub‘----------------------------------------------------------------’'写入PLCPublic Sub Comm2PLC(ByRef _Code As String, ByRef _Address As String, ByVal _Command As String)Dim str1 As String = _Code & _Address & _Command'代码字+中间继电器+命令字Dim str2 As String = Calculte_Vertification_bit(str1)Dim str3 As String = str1 & str2FormMain.RS232.WriteLine(str3 + vbCr)FormMain.RS232.DiscardOutBuffer()End Sub‘---------------------------------------------------------------- '计算校验位Function Calculte_Vertification_bit(ByVal str)Dim str2 As String = NothingFor i As Integer = 1 To Len(str)Dim str1 As String = Asc(Mid(str, i, 1))str2 = str2 Xor str1NextReturn Hex(str2)End Function‘---------------------------------------------------------------- '运动坐标读取Private Sub ReadCoord()System.Threading.Thread.Sleep(10)FormMain.RS232.DiscardInBuffer()Comm2PLC(RD, Register1, '')TrySystem.Threading.Thread.Sleep(200)Dim str1 As String = FormMain.RS232.ReadExisting().ToString()'先高低位转换,再16进制转换为10进制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Modbus协议实现单片机与PLC之间的通讯
来源:PLC&FA 作者:蔡晓燕赵兴群万遂人董鹏云
关键词:可编程控制器 Modbus 通讯协议
1 引言
HMI(人机界面)以其体积小,高性能,强实时等特点,越来越多的应用于工业自动化系统和设备中。
它有字母、汉字、图形和图片等不同的显示,界面简单友好。
配有长寿命的薄膜按钮键盘,操作简单。
它一般采用具有集成度高、速度快、高可靠且价格低等优点的单片机[1]作为其核心控制器,以实现实时快速处理。
PLC和单片机结合不仅可以提PLC的数据处理能力,还可以给用户带来友好简洁的界面。
本文以Modbus通讯协议为例,详细讨论了一个人机系统中,如何用C51实现单片机和PLC之间通讯的实例。
2 Modbus通讯协议[4]
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 常用功能通讯程序的设计[5]
本文介绍了几个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 RegTy pe/*寄存器类型*/, 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/*子地址*/, unsign ed int ClrSet/*写值“1”或“0”*/)
函数功能:根据函数参数,形成置某位变量为“1”或“0”的命令数组,启动发送。
等待发送完并接收完(如超时未接收完则重新发送)。
分析接收数组:正确,返回;错误,重新发送。
(7) 读N个字节变量
void ProtocolReadByte(unsigned char DeviceAddr/* PLC局号*/, unsigned char RegTy pe/*寄存器类型*/, unsigned int RegAddr/*起始地址*/, unsigned char SubAddr/*子地址* /, unsigned int RegNum/*个数*/)
函数功能:根据函数参数,形成读N个字节变量的命令数组,启动发送。
等待发送完并接收完(如超时未接收完则重新发送)。
分析接收数组:正确,保存读取的数据;错误,重新发送。
(8) 写N个字节变量
void ProtocolSetByte(unsigned char DeviceAddr/* PLC局号*/, unsigned char RegTyp e/*寄存器类型*/, unsigned int RegAddr/*起始地址*/, unsigned char SubAddr/*子地址*/, unsigned int RegNum/*个数*/)
函数功能:根据函数参数,形成写N个字变量的命令数组(要写的数从某参数数组中读取),启动发送。
等待发送完并接收完(如超时未接收完则重新发送)。
分析接收数组:正确,返回;错误,重新发送。
4 结束语
以上的程序已经通过实验,并应用于实际的人机系统中。
依照类似的方法,可以编写其他不同功能的程序,实现对PLC的不同控制和操作。
利用单片机和PLC进行优势互补,可以组成网络化、智能化的工业控制系统。
另外整个单片机系统程序用C51语言编程,程序简洁,便于阅读与调试。
单片机和人机界面结合可以实时的显示PLC的工作状况,实时的控制、设置、调整PLC工作情况,提高工业控制的自动化程度和实时性。