技术文档

plc 单片机 通信 PLC如何与单片机进行通讯?共有三种方法!你会用几个?

小编 2025-08-05 技术文档 23 0

PLC如何与单片机进行通讯?共有三种方法!你会用几个?

原创不易,请勿抄袭!

通讯是一个工控朋友学习或者工作到一定程度不得不面对的一个难题,可也是区别新手和高手的一道分水岭,新手遇到通讯问题往往会比较抓狂,不知道如何着手,而老手即使面对没有经验的设备也会有一个大概的思路.有朋友问我关于西门子PLC与单片机通讯的问题,今天给大家汇总一下.

首先西门子PLC与单片机共有三种办法进行信号交换:

1 信号线连接.这是一种最简单的方式,即在单片机和PLC之间进行连接信号线,PLC的输入接单片机输出;PLC输出接单片机输入,这是一种最普遍的方式,通过这种方式PLC几乎可以和任何工控的控制装置连接,比如伺服系统,变频器,机器人等等!缺点是如果需要传递的信号太多,那么电缆数量也会很大,而且一旦电缆损坏,维护起来很困难!

2 自由口通讯,以前我们多次讲到过自由口通讯,而且专门讲解过ASCII码,有需要的朋友可以去我以前的文章里去找,今天不重复了。

3 第三种方法是利用ModBus协议进行通讯。

本节主要讲解以PLC作主站,51单片机作从站,用ModBus协议进行通讯。PLC读取单片机保持寄存器区的数据。S7-200PLC程序主要通过调用Modubs RTU 主站指令库完成。

一、调用 Modbus RTU 主站初始化和控制子程序

使用 SM0.0 调用 MBUS_CTRL 完成主站的初始化,并启动其功能控制:

各参数意义如下:

1 EN 使能:必须保证每一扫描周期都被使能(使用 SM0.0)

2 Mode 模式:为 1 时,使能 Modbus 协议功能;为 0 时恢复为系统 PPI 协议

3 Baud 波特率:支持的通讯波特率为1200,2400,4800,9600,19200,38400,57600,115200。

4 Parity 校验:校验方式选择;0=无校验,1=奇较验,2=偶较验。

5 Timeout 超时:主站等待从站响应的时间,以毫秒为单位,典型的设置值为 1000 毫秒(1 秒),允许设置的范围为 1 - 32767。

注意: 这个值必须设置足够大以保证从站有时间响应。

6 Done 完成位:初始化完成,此位会自动置1。可以用该位启动 MBUS_MSG 读写操作(见例程)

7 Error 初始化错误代码(只有在 Done 位为1时有效): 0= 无错误,1= 校验选择非法,2= 波特率选择非法,3= 模式选择非法。

二、调用 Modbus RTU 主站读写子程序MBUS_MSG,发送一个Modbus 请求;

各参数意义如下:

常见的错误:

如果多个 MBUS_MSG 指令同时使能会造成 6 号错误库存储区被程序其它地方复用,有时也会造成6 号错误从站 delay 参数设的时间过长会造成主站 3 号错误从站掉电或不运行,网络故障都会造成主站 3 号错误。

含义如下:

1 EN 使能:同一时刻只能有一个读写功能(即 MBUS_MSG)使能

注意:建议每一个读写功能(即 MBUS_MSG)都用上一个 MBUS_MSG 指令的 Done 完成位来激活,以保证所有读写指令循环进行(见例程)。

2 First 读写请求位:每一个新的读写请求必须使用脉冲触发

3 Slave 从站地址:可选择的范围 1 - 247

4 RW 从站地址:0 = 读, 1 = 写;注意:

1. 开关量输出和保持寄存器支持读和写功能

2. 开关量输入和模拟量输入只支持读功能

5 Addr 读写从站的数据地址:选择读写的数据类型

00001 至 0xxxx - 开关量输出

10001 至 1xxxx - 开关量输入

30001 至 3xxxx - 模拟量输入

40001 至 4xxxx - 保持寄存器

6 Count 数据个数;通讯的数据个数(位或字的个数)

注意: Modbus主站可读/写的最大数据量为120个字(是指每一个 MBUS_MSG 指令)

7 DataPtr 数据指针:

1. 如果是读指令,读回的数据放到这个数据区中

2. 如果是写指令,要写出的数据放到这个数据区中

8 Done 完成位 读写功能完成位

9 Error 错误代码:只有在 Done 位为1时,错误代码才有效

0 = 无错误

1 = 响应校验错误

2 = 未用

3 = 接收超时(从站无响应)

4 = 请求参数错误(slave address, Modbus address, count, RW)

5 = Modbus/自由口未使能

6 = Modbus正在忙于其它请求

7 = 响应错误(响应不是请求的操作)

8 = 响应CRC校验和错误

-

101 = 从站不支持请求的功能

102 = 从站不支持数据地址

103 = 从站不支持此种数据类型

104 = 从站设备故障

105 = 从站接受了信息,但是响应被延迟

106 = 从站忙,拒绝了该信息

107 = 从站拒绝了信息

108 = 从站存储器奇偶错误

三、需要从站支持的功能及Modbus 保持寄存器地址映射

为了支持上述 Modbus 地址的读写,Modbus Master 协议库需要从站支持下列功能:

Modbus 保持寄存器地址映射举例:

四、S7-200PLC程序

五、单片机程序;STC11F04E单片机,9600波特率

START: MOV TMOD,#21H ;定时器1是8位再装入,定时器0为16位定时器

MOV TH1,#0FDH;预置初值(按照波特率9600BPS预置初值)

MOV TL1,#0FDH; 0FDH=9600=11.0592

MOV TH0, #0DCH;88H ;8800=12t,7000=stc1t

MOV TL0, #00H

ORL IE, #92H ;EA=1,ES=1;ET0=1

SETB PS ;串口中断优先

SETB TR1 ;启动定时器1

MOV 98H,#50H ;scon

MOV P1M0,#01000000b ; P1M0=0 P1M1=0双向口 P1M0=1 P1M1=0输入口 P1M0=0 P1M1=1推挽输出20ma

MOV P1M1,#10000000b

MOV WDT_CONTR ,#27H 看门狗设置使能

QL0: MOV A,#00H

MOV R0,#10H

MOV R2,#9BH ;10-ABH清零

CLEAR: MOV @R0,A

INC R0

DJNZ R2,CLEAR

CLR FLAG

CLR FLAG_0

SETB TR0 ;启动定时器0

;ANL AUX,#07FH ;p3.0p3.1当串口

ORL AUX,#80H ;p1.7,p1.6当串口

CLR P3.7 ;485芯片接收使能

WA1: ;MOV WDT_CONTR ,#37H;喂狗; SETB CW

JNB FLAG_0,WA1 ;FLAG_0=1表示已经接收到上位机数据

CLR TR0

MOV A,2CH ;检查设备地址是01h码,设本机地址码是1

MOV R2,A

XRL A,#01H

JNZ QL0

ACALL FSZJ ;FH: DB 01H,03H,16,00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,10H,11H,12H,0DH,0EH,0FH,10H,11H,12H,13H,14H,15H,16H,17H,18H,19H,1AH,1BH,1CH,1DH,1EH,1FH;18

ACALL DELAY

CALL FZJ

AJMP QL0

FZJ: MOV R0,#2cH ;向主机发送数据子程序

FZJ0: MOV R2,#10H

FZJ1: CLR EA

ANL AUX,#07FH ;p3.0p3.1当串口

FZL1: MOV A,@R0

MOV SBUF,A

JNB TI,$

CLR TI

INC R0

DJNZ R2,FZL1

SETB EA

RET

FSZJ: MOV DPTR,#FH

MOV R2,#19;

ORL AUX,#80H

SETB P3.7 ;发送数据

MOV R0,#40H

FSZJA: MOV A,#0H

MOVC A,@A+DPTR

MOV @R0,A

INC R0

INC DPTR

DJNZ R2,FSZJA

MOV R0,#40H

MOV CRCCD,#19

LCALL CRC1

MOV R2,#21

MOV R0,#40H

FSZJ2: MOV A,@R0

MOV SBUF,A

JNB TI,$

CLR TI

INC R0

DJNZ R2,FSZJ2

SETB EA

RET

FH:DB 01H,03H,16,00H,01H,02H,03H,04H,05H,06H,07H,08H,09H,10H,11H,12H,0DH,0EH,0FH,10H,11H,12H,13H,14H,15H,16H,17H,18H,19H,1AH,1BH,1CH,1DH,1EH,1FH;18

用串口助手检测到的数据如下图。

喜欢的话请点赞并分享,您的支持是我坚持下去的动力!送人玫瑰,手有余香!

什么是PLC?单片机和PLC有什么区别?

自二十世纪六十年代美国推出PLC取代传统继电器控制装置以来,PLC得到了快速发展,在世界各地得到了广泛应用。同时PLC的功能也不断完善,随着计算机技术、信号处理技术、控制技术网络技术的不断发展和用户需求的不断提高,PLC在开关量处理的基础上增加了模拟量处理和运动控制等功能。今天的PLC不再局限于逻辑控制,在运动控制、过程控制等领域也发挥着十分重要的作用。

PLC

PLC (Programmable Logic Controller) 是可编程逻辑控制器,专为工业生产设计的一种数字运算操作的电子装置,它采用一类可编程的存储器,用于其内部存储程序、执行逻辑运算、顺序控制、定时、计数与算术操作等面向用户的指令,并通过数字或模拟式输入/输出控制各种类型的机械或生产过程。是工业控制的核心部分。

单片机

单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在各个领域广泛应用。

诸如手机、汽车电子、工业上的步进马达、机器手臂的控制等,都可见到单片机的身影。单片机的特点是编程、维护相对复杂,编程方式常用C语言或者汇编语言,成本较低,I/O接口相对有限。

PLC与单片机的区别

PLC是应用单片机构成的比较成熟的控制系统,是已经调试成熟稳定的单片机应用系统的产品,有较强的通用性。单片机可以构成各种各样的应用系统,使用范围更广,但单就“单片机”而言,它只是一种集成电路,还必须与其它元器件及软件构成系统才能应用。从工程的使用来看,对单项工程或重复数极少的项目,采用PLC快捷方便,成功率高,可靠性好,但成本较高。对于量大的配套项目,采用单片机系统具有成本低、效益高的优点,但这要有相当的研发力量和行业经验才能使系统稳定。

从本质上说,PLC其实就是一套已经做好的单片机(单片机范围很广泛)系统。  

PLC的特点

PLC广泛使用梯形图代替计算机语言,对编程有一定的优势。你可以把梯形图理解成是与汇编等计算器语言一样,是一种编程语言,只是使用范围不同。而且通常做法是由PLC软件把你的梯形图转换成C或汇编语言(由PLC所使用的CPU决定),然后利用汇编或C编译系统编译成机器码。PLC运行的只是机器码而已,梯形图只是让使用者更加容易使用而已。

如所说,MCS-51单片机也可以用于PLC制作,只是8位CPU在一些高级应用如:大量运算(包括浮点运算)、嵌入式系统(现在UCOS也能移植到MCS-51)等,有些力不从心而已。不过加上DSP就已经能满足一般要求了,而且同样使用梯形图编程,我们可把梯形图转化为C51再利用KEIL的C51进行编译。不难发现不同型号的PLC会选用不同的CPU,其实也说明PLC就是一套已经做好的单片机系统。  

这样一看PLC其实并不神秘,不少PLC是很简单的,其内部的CPU除了速度快之外,其他功能还不如普通的单片机。通常PLC采用16位或32位的CPU,带1或2个的串行通道与外界通讯,内部有一个定时器即可,若要提高可靠性再加一个看家狗定时器问题就解决了。  

另外,PLC的关键技术在于其内部固化了一个能解释梯形图语言的程序及辅助通讯程序,梯形图语言的解释程序的效率决定了PLC的性能,通讯程序决定了PLC与外界交换信息的难易。对于简单的应用,通常以独立控制器的方式运作,不需与外界交换信息,只需内部固化有能解释梯形图语言的程序即可。

实际上,设计PLC的主要工作就是开发解释梯形图语言的程序。现在的单片机完全可以取代PLC。以前的单片机由于稳定性和抗电磁干扰能力比较的弱和PLC是没有办法相比的,现在的单片机已经做到了高稳定性和很强的抗干扰能力在某些领域已经实现了替换。

单片机可以取代PLC吗?

有人说这是个伪问题,单片机是元器件,PLC是由元器件以及庞大的软件构成的系统,两者在这一方面没有可比性 —— 大多PLC的控制芯片实际上就是单片机,也就是说可以将PLC看成是单片机的二次开发。单论工业防护等级,单片机的稳定性和可靠性能根本比不了PLC这种IP67类的产品( IP为标记字母,第一标记数字表示接触保护和外来物保护等级,第二标记数字表示防水保护等级)。而且就PLC这种能应对工业恶劣环境的产品还开发出一套冗余系统。

I/O功能

单片机的I/O点实在有限,而反观PLC呢?针对不同的现场信号,均有相应的I/O点可与工业现场的器件(如按钮、开关、传感电流变送器、电机启动器或控制阀等)直接连接,并通过总线与CPU主板连接。工业里几乎任意一条生产线,都有上百甚至上千I/O点,就这点单片机完全无法比拟。

开发周期

PLC的品牌多达200多种,几乎每个品牌都有不同编程软件,而且都在不断完善自己的编程软件,使之能够越来越简单的服务于电气工程师,而各种程序块也是越来越方便人性化的任意去调用,比如PID模块、运动控制模块等,大大减轻了工程师的开发压力也缩短了开发周期。

那单片机要如何实现?没有现成的模块使用,那就只能开发,那么做过非标自动化设备的工程师都会遇到工期不足问题。PLC这种高度集成化模块化的产品在达到满足设备所需的开发周期,在工期面前也是抓襟见肘,更不用说如同白纸一张的单片机。

通信距离

现在大多数流水线是要跨区域整合与监视的,所用的通讯方式多为以太网加中继器,或者直接走民用宽带光纤,所用的东西到最后很可能是用的就是微软的IE浏览器,很明显PLC是有RJ-45接口,即使本体没有RJ-45也可以配备以太网模块,可单片机搭载的PCB板能加上这个接口然后开发出以太网通信吗?开发需要多久?

编程语言

这点对单片机来讲是一个优势,同时也是一个劣势。上面提到PLC的品牌有两百多种,编程软件更多,尽管大多数PLC的编程语言都大同小异,但是每接触一款不同品牌的PLC,电气工程师就要从PLC的硬件参数、软元件、编程软件等等各个方面从头了解一次才能使用的得心应手。而单片机的编程语言用的是C语言或者汇编语言,这对于任何单片机都是通用的。换句话说,学会C语言或者汇编语言,便可以应用任何单片机开发想要的功能(前提是要有相关的电工电子学基础)。

但话又说回来,电气工程师不是电子工程师,他们的工作不是单单考虑单片机如何驱动继电器来控制机床的,甚至有的电气工程师都不会C语言、汇编语言之类的MCU开发语言。近些年,IEC-61131-3标准的推广,越来越多的PLC支持多种编程语言,如类似C语言的ST语言,类似电路图的CFC语言。这种便利的功能是传统单片机开发环境真的无法实现。

在工业控制领域,PLC占据绝对优势,就目前形势(单片机的功能、稳定性、易用性、编程及维护等)来看,单片机取代PLC那将是一项不可能完成,或者说期限趋向于无穷的艰巨任务。

相关问答

PLC 单片机 通信 怎么实现?

可以采用两种方式:一,采用串口与单片机通迅,采用无协议方式.但必须注意PLC通信方式,做必要的转换.如RS422,RS485等,可以采用与之对应的芯片与MCU连接.二,采...

plc 通讯怎样理解?

1、不管是PLC还是什么,只要是两个“大脑”(人脑或其它芯片)要想沟通,那就是通讯了。2、其实我们现在的交流要是通讯的一种方式。那么两个PLC相互沟通呢?PLC...

12个 plc 如何通讯?

PLC=ProgrammableLogicController,可编程逻辑控制器,一种数字运算操作的电子系统,专为在工业环境应用而设计的。它采用一类可编程的存储器,用于其内部存...

plc 与上位机交互区别?

一、主体不同1、上位机:可以直接发出操控命令的计算机。2、PLC:直接控制设备获取设备状况的计算机,一般是PLC/单片机之类的。二、通讯协议不同1、上位机:...

PLC 单片机 的优缺点?

PLC。优势为:高可靠性和稳定性。缺陷:PLC的体系结构是封闭的,各PLC厂家的硬件体系互不兼容,编程语言及指令系统也各异,当用户选择了一种PLC产品后,必须...

PLC 单片机 的区别点?

PLC(可编程逻辑控制器)和单片机是工业控制领域常用的两种控制设备,它们有以下区别:1.功能:PLC主要用于工业自动化控制系统,能够处理大规模的控制任...PLC(...

PLC 单片机 有什么区别?

PLC(可编程逻辑控制器)和单片机是工业控制领域常用的两种控制设备,它们有以下区别:1.功能:PLC主要用于工业自动化控制系统,能够处理大规模的控制任...PLC(...

单片机 PLC 有什么不同?

单片机和PLC是两种不同的控制系统。单片机是一种微型计算机芯片,用于控制和执行特定任务,如家电、汽车电子等。它具有较小的规模和较低的成本,适用于简单的控...

伺服驱动器控制伺服电机和 plc 或者 单片机 控制伺服电机有何区别?

不一定。其实,PLC从来不是伺服电机的直接控制者。伺服电机是通过伺服驱动器,或者叫做伺服放大器来驱动的。PLC通过PTO(脉冲串)或者通信(总线,串口等)的...

设计工业机械手,控制部分用 PLC 单片机 、ARM那个好?

你好,谢谢邀请!工业机械手的编程很多是用的不是这些语言,他们很多是制造商自己开发了一种语言。这个语言很像汇编语言。但不是汇编语言。你现在学了AVR单片机...

猜你喜欢