单片机MCU与可编程逻辑器件PLC详解与对比
文章前记 程序员工作久了便可能整日忙碌于“增删改查”中,迷失方向,毫无进步。该公众号致力于分享软件开发相关的原创干货,助你完成从程序员到架构师的进阶之路!努力!做一个NB的Coder!许多人在接触到单片机(MCU)和可编程逻辑控制器(PLC)时,都会感到疑惑。疑惑主要有两点:
工业环境中,很多控制逻辑用MCU都可以很容易的实现,为何要用PLC?其实MCU与PLC两者都是可编程的控制器件,有什么不同?此文便在于解答大家的疑惑。
1 工业环境为何都用PLC
接触过工业生产的工程师可能会发现,其实大多数工业生产的控制要求,使用MCU都可以做到。
但同时又会发现,MCU在工业环境中极少被应用,取而代之的是PLC 。那为什么在廉价的MCU可以实现功能的地方,要使用昂贵的PLC呢?
1.1 可靠性方面
工业现场要求设备达到工业级 。我们一般购买的单片机及其他元器件一般为商业级。加之自己开发后测试等水平达不到,所以可靠性很难保证,例如防电磁干扰等,要知道工业环境中电磁干扰是非常多的,如继电器的通断、电机的起停,这都可能导致单片机的重启、通讯的失误。
而PLC等设备满足工业级要求,在抗干扰方面、输入输出点可靠性方面更为优越 ,并采用可靠的组态方式,因此可靠性更高,而且通信方面有很多工业控制设备采用光纤以抗干扰。
1.2 易用性方面
采用单片机实现,通信等系统架构太过麻烦 ,例如一个工业车间的几十个单片机工作小站可靠通信就很难实现。同时代码的增加也进一步降低了可靠性。在简单并且不关键的部位可采用单片机实现部分功能。
而PLC等设备可采用整体式或者积木式,各个组件可以按需选用,并便于组态实现 。各个工作站之间采用规范的总线通讯,这都是模块内置的,只需配置无需编写代码,可靠简单。
工业设备的可靠性是极为关键的,关系到人身安全、连续工作的时间、生产的质量等,这时候生产设备的成本是相对次要的,可靠性才是首要的 。因此单片机虽然便宜,但用单片机作为工业设备控制器是舍本逐末的。
当然,也并不是说单片机在工业环境中就完全没有应用。例如,目前有采用Arduino进行工业环境和设备运行情况监测的应用,但不涉及关键生产过程的控制。相信以后也会有更多的单片机应用到工业环境中,但也不会作为核心的控制器。
2 MCU与PLC到底有何异同?
那究竟是何种原因导致了PLC和MCU的不同呢?假设,你要用一款MCU完成工业现场的核心控制任务,那应该怎么做?
首先,工业环境下,受周围交流电机启停等的影响,电压可能会有较大的波动。为了应对这种恶劣的环境,必须为MCU设计相应的电源模块,是的电压剧烈变动时不会引发MCU的工作异常。
同时,在工业环境下,传感器的输出多采用4~20mA、0~10V的形式,这与MCU常用的0~3.3V或者0~5V的AD模块不相符合,因此需要针对工业环境设计传感信号接收模块。
并且,工业环境的输出很多是用来控制继电器(经过继电器隔离后,再去控制电机等的启停),而MCU的输出只能控制微型继电器,无法驱动常用的工业继电器,因此,要在MCU外围设计具有大驱动能力的IO接口。
同时,为了保证工业环境下通讯的可靠:
有很多工业数据总线协议。为了能保证MCU与外界正常通讯,需要封装模块来支持这些协议;为了能够控制变频器,需要设计相应的变频器控制模块;为了能保证一定的防尘、防水级别,需要设计外壳满足相应的防护等级;为了保证编程的简单性,可能需要设计一套便于工业使用的控制语言……当以上这些工作都完成的时候,一个PLC就诞生了!
所以,PLC就是在MCU基础上,针对工业环境专门设计的产物。PLC的内部就是一款MCU。
到这里,PLC与MCU的异同,大家也应该明了了。
—END—
欢迎关注我们,不错过每期的原创干货!
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是在单片机基础上发展起来的,主要是为缩短工程开发周期而出现的一种产品,跟单片机最根本的差别就是简单易用,不需要了解太多的电子电路知识。单片机(MCU)...
plc芯片是什么?
PLC其实是个产品,其内应用到的控制芯片(CPU/MCU)就是单片机,这单片机芯片MCU不同的厂家会应用不同MCU设计制造商的MCU,比如西门子PLC中应用的8096序列单片机...
mcu和gcu的区别?
mcu又称单片微型计算机或者单片机,是把中央处理器的频率与规格做适当缩减,并将内存(memory)、计数器(Timer)、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LC...
电驱mcu是什么?
mcu又叫微控制单元,又称单片微型计算机或者单片机,是把中央处理器(CPU)的频率与规格做适当缩减,并将内存(memory)、计数器(Timer)、USB、A/D转换、UART、PLC、...
win10hyper-v,怎么让USB口和hyper-v里系统通信-Microsoft...
[回答]了解到您的问题。如果要让虚拟机使用usb端口的话,您可能需要自己编写驱动或者使用一些第三方软件。由于涉及到开发的相关内容,为了您获得更加详尽,...
麻烦诸位看官!在线等:MCU技术原理是什么?
[回答]1、微掌控单元(MicrocontrollerUnit;MCU),又称单片微型计算机(SingleChipMicrocomputer)或者单片机,是把中央处理器(CentralProces...
plc需要芯片吗?
PLC一般需要专用的数字处理器芯片作为主控制芯片,这些芯片依不同厂商的产品、型号、系列等等不同,并不是所有的PLC都是采用同样的控制核心。PLC内部控制还是...
mcu20是啥?
中文意思是微控制单元(MicrocontrollerUnit;MCU),又称单片微型计算机(SingleChipMicrocomputer)或者单片机,是把中央处理器(CentralPro...
mcu芯片是什么芯片?
MCU是MicrocontrollerUnit的简称,中文叫微控制器,俗称单片机,是把CPU的频率与规格做适当缩减,并将内存、计数器、USB、A/D转换、UART、PLC、DMA等周边接口...