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接收信号的端口(对模拟量来说一般为0-40MA直流电流或0-10V直流电压信号),输入接线是指外部输入器件(任何无源的触点和集电极开路的NPN三极管)接通输入回路闭合,同时输入指示的发光二极管亮。常用外部输入器件有按钮,接近开关,转换开关,拨码器,各种感应器等,是对系统发出各种控制信号的主令电器。
(一)PLC输入模块与主令电器电器类设备的连接
图中松下PLC为直流汇点式输入,即所以输入点共用一个公共端COM,同时COM端内带有DC24V电源,在编写程序时注意外部设备使用的是常闭还是常开触点
输入端的电气原理图中停止按钮SB0用常闭触点,串在控制线中,用于停机控制。启动按钮SB1用常开触点。在设计的两个梯形图完成的控制功能相同,但停机信号X0使用的触点类型不同,那么连接在端点的外部停机按钮触点类型也就不同
I/O分配SB0-X0,SB1-X1,输出K0-Y0。当外部使用长闭触点,不操作该按钮,输出Y0正常接通,在PLC控制系统中,外部开关无论是启动还是停止一般都选用常开型。
(二)接近开关与PLC输入模块的连接
在PLC控制系统设计中接线的工作比重叫小,但它是编程设计的基础。要保证接线工作正确性,需PLC的输入输出电路有一个清楚的了解。
1.PLC直流输入电路:分有源型(共阳极)输入电路,漏型(共阴极)输入电路。所以漏型输入电路PLC的COM端是外接直流电源的正极,如西门子S7-400PLC直流输入模块的COM端必须接外部电源的正极。所以西门子PLC输入信号为低压信号,如果外部信号为高压信号应该通过中间继电器转换。
2.PLC交流输入电路电压一般为AC120V或AC230V,经过电阻的限流和电容的隔离在经过整流变成直流三个环节,所以输入信号延迟时间比直流电路长,但是输入端是高电压,输入信号的可靠信高,一般用于环境恶劣,对响应要求不高的场合。
(三)开关量信号与PLC输入模块的连接
对于不同的PLC输入电路应正确选择传感器(NPN或PNP)的输入方式,NPN型传感器动作时,OUT端为0V,(NPN型输出端OUT应和PLC的输入端漏型相连)输出低电平信号。PNP型传感器动作时,OUT端为+V,输出高电平信号。
(四)PLC输入回路接线的优化
1、减少输入点数,分组输入
如图上系统分自动和手动两种工作方式,Q1-Q8为手动方式用到的 输入信号,S1-S8为自动方式用到的输入信号。S1和Q1共用输入点X0,PLC运行时只会用到其中一组信号,所以可以共用PLC的输入点。(图中二极管是用来防止寄生回路,避免错误输入信号的产生。
2、输入设备的多功能化:在PLC系统中可以借助PLC逻辑功能来实现一个设备在不同条件下产生不同作用的信号。
3、不同形式的直流输入信号与PLC连接
直流有源输入输入信号一般都是24V,这类信号与其他无源开关量信号混合接入PLC输入点时电压的0V点一定要接。上图输入点I0.0,I0.1连接光电编码器,接近开关的输出OUT信号,它们的驱动电源由PLC自身的24V电压提供
不同电压直流信号与PLC输入模块输入点的连接,注意信号电位差的参考点必须相同。即它们的0V信号必须连接在一起。
4、对与用长线引入PLC的开关量信号可以用小行继电器来转接输入信号,避免外部的强电感应的干扰。
二、输出回路接线
由于PLC输出元件被封装在线路板上并连接至输出端子板上,若将输出元件短路将烧毁印制电路板,所以应用熔断器保护输出元件。开关量输出模块有继电器,晶体管,晶闸管输出。输出端接线分公共输出和独立输出。直流输出的续流管保护,交流输出阻容吸收电路,晶体管,晶闸管输出的旁路电阻保护,以及外部紧急停车电路。
(一)PLC输出有三种,这三种输出回路的配线应注意
1、继电器输出配线:通用于交直流电路,不同公共点可以带不同交直流电压负载。负载容量以负载性质区分,阻抗负载2A/1点,8A/4点COM ,感抗负载容量80VA,灯泡负载100W。可知继电器型输出的PLC可通过相对大的电流,但输出触点响应的时间相对较慢。
2、晶体管输出:通用于直流电路,电压范围DC5-30V,阻抗负载0.5A/1点,0.8A/4点COM ,感抗负载容量12W/DC24,灯泡负载1.5W/DC24。可知晶体管型输出的PLC输出触点响应时间快,但个通过的电流小。
3、晶闸管输出:适应高频动作,但只能带DC5-30V,负载最大电流电流为0.5A,灯泡负载30W。
4、在输出回路必须设置适当熔断器作为保护。DC直流感抗负载要并联二极管以延长触点寿命,二极管规格为耐压时负载电压5-10倍,电路大于负载电流。
5、氖灯或小电流负载需要并联浪涌吸收器。
6、马达正反转电路,除PLC内部程序要设计互锁,输出外部配线也必须互锁配线。
(二)COM 点的选择
因为PLC内部没有熔断器,需在COM点处加一个熔断器。当负载种类多且电流大可采用一个COM点带1-2个输出点的PLC产品,当负载数量多且种类少可采用一个COM点带4-8个输出点的PLC产品。
(三)PLC与感性设备的连接
当PLC输入输出端接有感性负载元件时,直流输出的续流管保护(直流电路两端并联续流二极管),交流输出阻容吸收电路。
对与大容量负载电路,须在继电器主触头两端连接RC阻容吸收电路
(四)PLC与七段LED显示器的连接
上图两只CD4513的数据输入端A-D共用PLC四个输出端Y0-Y3,A为最底D为最高,LE 为寄存输入端,当LE 为高电平时,输入数据将存在芯片内的寄存器中,并将其译码后显示出来。如PLC使用继电器输出模块时,与CD4513相连的输出各端在接一个下拉电阻,避免输出继电器断开的时候CD4513输入端悬空。
七段数码管有共阴极(公共极接地)和共阳极(公共极接+5V)两种,是电气仪表常用的数显器件。
(五)PLC控制系统输出回路接线的优化
1、减少输出点的措施
① 巨阵输出:要使某个设备(负载)接通工作,只要控制相对应的输出继电器接通即可,采用巨阵输出必须将同一时间段接通的负载安排在同一列。
②分组输出:PLC每个输出点可以控制两个不同时工作的负载,当两组负载不会同时工作事,可以通过外部转换开关SA进行切换。
③ 并联输出:两个通段完全相同的负载可并联后共用PLC的一个输出点。
④ 提高PLC输出可靠性措施:PLC输出模块的继电器触点容量一般为2A,如果输出点的负载功率太大,可以采用输出继电器带动一个中间继电器,在由中间继电器驱动负载。
相关问答
plc芯片介绍?
PLC,是ProgrammableLogicController的缩写,即可编程逻辑控制器,是一种数字运算操作的电子系统,专为在工业环境应用而设计的。目前很多芯片是使用PLC,但不能...
plc的芯片和cpu有什么区别?
一、主体不同1、PLC:具有微处理机的数字电子设备。2、CPU:计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。二、作用不同1、PLC:用于自...
目前比较流行的三种plc芯片?
PLC中常采用的CPU有三类:1)通用微处理器(如Z80、8086、80286等)2)单片微处理器(如8031、8096等)3)位片式微处理器(如AMD29W等)小型PLC:大多采用8位...
永宏PLC连接到电脑上,端口有显示:prolificUSB-to-serialco...
1、启动windows764位系统,在“windows启动管理”界面(如图1)出现时按F8,进入“高级启动选项”(如图2)。图1“windows启动管理”界面图2“高级启动选项”界...
PLC的RS485接口怎么和,单片机,的(RXD,TXD)接口通讯。请简要说下,我需要对PLC做哪些设置?
单片机的(RXD,TXD)接口是TTL电平的232,得用芯片max485PLC端肯定需要程序单片机的(RXD,TXD)接口是TTL电平的232,得用芯片max485PLC端肯定需要程序
200plc编程软件旁边隐藏了肿么整出来-ZOL问答
点工具-点选项-点浏览条-回复默认-确定主板芯片组Intel讨论回答(4)标题栏,查看,框架里面是左边的查看,指令树等,可以点击全部还原就有了。工具栏里是赋值...
单片机编程和PLC编程有什么区别?
一、区别:1、PLC是建立在单片机之上的产品,单片机是一种可编程的集成芯片。2、plc就是由单片机加上外围电路做成的,单片机开发式底层开发,程序编写用汇编...
三菱PLC输出COM端接线问题?
三菱PLC的输出COM端接线问题可以分为以下几个方面:1.接线标准:根据PLC设备的型号和说明书,查找输出COM端接线的标准。通常,PLC芯片的输出COM端为公共端,可...
信捷PLC数据线与三菱PLC数据线可共用吗-131****0410的回...
信捷PLC通信口是RS232通信格式,三菱PLC通信口是RS422通信格式,两者的数据线不能通用。不可以的,两个共用品牌的端口定义是不一样的。一个是圆的,一...
plc输出为什么是短接24v电?
24v是通用的标准电压,直流,安全。自动化控制和机床电路以及大型设备,体现了弱电控制强电,plc控制24继电器,继电器控制交流接触器。另外其内部是单片机,单...