您现在所在的是:

PLC论坛

回帖:21个,阅读:4462 [上一页] [1] [2] [3] [下一页]
990
f314957590
文章数:21
年度积分:50
历史总积分:990
注册时间:2012/5/18
发站内信
西门子PLC体验(特)
发表于:2017/1/7 11:39:42
#0楼
利用PLC的IO点实现串行通信-
0、前言

       本文目的主要是深入研究通信原理。其次是针对一些特殊场合,比如不具备通信口的PLC,想要低成本通信组网,或者说距离上较远,一般的通讯不能满足要求,而数据量又不大,实时性要求不高的,如果能利用PLC的普通IO点模拟异步串行通信,则可以节约很大成本。而且该通信方案可以在其他领域推广而不只是PLC,也许有用的到的一天。
   对于很多人回复里关注的实用性,我举个例子?我在工厂遇到过一个情况。有两台距离较远的PLC。其中一台小型PLC,有剩余IO输入输出点,没有扩展能力,没有通讯接口。有一台大型PLC,接触摸屏,现在想要通过触摸屏对小型PLC的一些计数值进行显示,并对小型PLC的一些参数进行设置。此时,可以采用这种方法,进行一些通讯,完成这个功能。
一,通信协议
1,单工异步通信硬件结构
        该通信系统采用两线制主从机结构,主机端只能发送命令,从机端只能接收命令。对于主机两根发送线,分别接输出点和公共端。对于从机接收线接本机输入点和本机电源公共端,主机输出点,相当于外接开关。
附件 psb1.jpg
2,全双工异步通信硬件结构

       与单工异步通信完全相同,只是互为主机可以进行发送,同时又都是从机。这里研究全双工异步通信系统设计,而半双工异步串行通信是其一部分。如果不是相同电源,一定要注意COM端接线串电源的问题。
附件 2.jpg

3、半双工异步通信硬件结构
       可以实现多个PLC之间的通信,但是对电源有要求,同一时间,只可以有一台发送,其他接收。
附件 3.jpg

3,协议内容
        由于采用全双工异步串行通信,那么通信协议可以设计成“请求-应答”方式,整体协议内容如下。
       起始码+信息长度+指令类别+状态编码+读写选择+地址+数值+校验
举例:请求修改对方D1000寄存器的值为#1234,则发送数据: #FFFF #0006 #0101 #0000 #0505 #03E8 #1234 #FFFF
附件 4.jpg

说明:
〇起始码:一个固定的值,用来判断是否开始接收数据。
①信息长度:是指从指令类别到校验的总字数,这里恒定为6。
②指令类别分:请求指令和应答指令,例如如果是请求指令可以用“#0101”表示,应答指令可以用“#0505”表示。
③状态编码:表示回复信息的内容,是正常内容,还是报警内容,如果是报警内容,则可以根据状态编码知道对方反馈的故障。
④读写选择:区分该指令是对从机的读操作还是写操作。例如读用“#0101”表示,写用“0505”表示。
⑤地址,是指D区的地址号,通信只能通过间接寻址操作D区,如果想要读写对方的D区以外的寄存器区域,需要用D区作为中转。例如想控制CIO0002输出模块,可以通信操作D3000,然后将D3000赋值给CIO0002即可。输入模块读取则反向赋值。
⑥数值,只有在发送写数值请求指令和发送读数值答复指令时才有,读请求指令和写值答复指令可以没有,发送一个无意义的数据。
⑦校验,根据指令内容计算校验码 。
二,信号实现
1、信号定义

附件 5.jpg
①待机信号,输出端取无输出时为待机信号,待机信号为0。接收端闲才允许接收,用标志位表示,1代表忙,0代表闲。开始接收置1,停止接收T1后,为0。停止接收的条件是连续高电平或者连续低电平超过T1,正常情况应该是连续高电平超过T1。
②利用信号反转作为检测。
③利用信号反转间隔作为0和1判断,如果信号反转间隔小于T2,则为0,间隔时间大于T2,则为1。T2要是PLC可以区分的时间。
④综上所述,每次闲的时候,接收第一个反转,为信号起始,下一个反转计时结果开始记录,每次反转都记录,即使干扰也要记录,最新的16个位和起始码进行比较,一旦相同,后面的就是信号,此时信息接收信号置1。
⑤新接收的16位是信息长度,按照该长度,记录后续数字。接收完该数字的长度后,信息接收信号置0。如果信息接收信号为0,T1时间内,又收到信号,则判断为信息粘连,给予故障报警。直到接收信号变为0,清除报警。经过T1时间,没有信号反转则接收完毕,接收标志变0。所以如果发送最后一个字符后是高电平,需要等到超过T1时间反转待机。
⑥所有发送都应该具有应答,发送完指令后,开启应答等待位,如果超过T3时间,未收到应答,则视为断线。
2、信号时间确定
       根据PLC的实际运行能力,我们做这样的时间规划
附件 6.jpg

       一个bit最长时间30ms,所以最低波特率为33bps。假如0-1平均,则波特率为50bps。0越多,波特率越高,这是一种波特率不固定的传输方式。 发送一条完整指令共8word,共128bit,最多需要4s。
三、PLC编程
1、寄存器占用
    发送和接收是分开的,这里是发送和接收全部的寄存器占用。
附件 7.jpg


2、发送程序助记符

'  指令类别:0101请求,0505答复\n状态编码:0000正常,0505故障\n读写选择:0101读,0505写\n地址:十进制地址\n数据:16进制数据
@LD W0.08
MOV(021) #FFFF W28
MOV(021) &6 W27
MOV(021) #0101 W26
MOV(021) #0000 W25
MOV(021) #0505 W24
MOV(021) W33 W23
MOV(021) W32 W22
MOV(021) #FFFF W21
'  串口为0时,且信息没有发送,可以请求发送,停止发送计时器到时,认为发送完毕
%LD W0.08
ANDNOT W0.00
ANDNOT W0.01
OR W0.01
ANDNOT T0000
@ANDNOT W0.08
OUT W0.01
'  5t算发送停止,其他情况,只要串口反转,则重新开始计数-接收端一旦接收超过6t则认为发送停止
LD W0.01
@ANDNOT W0.00
%ANDNOT W0.00
TIMH(015) 0000 #6
'  串口开始发送,设置一个上升,计数器清0
@LD W0.01
SET W0.00
MOV(021) #0 W2
'  串口发送结束,设置一个下降
%LD W0.01
RSET W0.00
'  当前端口状态为1,而应该输出也为1时,如果没有发送完所有为,3t时间后,串口反转,计数器重置
LD W0.00
AND W29.00
AND<(310) T0 #3
AND<=(315) W2 &128
RSET W0.00
MOV(021) #6 T0
'  当前端口状态为1,而应该输出也为0时,需要1t后,串口反转
LD W0.00
ANDNOT W29.00
AND<(310) T0 #5
AND<=(315) W2 &128
RSET W0.00
MOV(021) #6 T0
'  当前端口状态为0,而应该输出也为1时,需要3t后,串口反转
LDNOT W0.00
AND W29.00
AND<(310) T0 #3
AND<=(315) W2 &128
SET W0.00
MOV(021) #6 T0
'  当前端口状态为0,而应该输出也为0时,需要1t后,串口反转
LDNOT W0.00
ANDNOT W29.00
AND<(310) T0 #5
AND<=(315) W2 &128
SET W0.00
MOV(021) #6 T0
'  串口反转,则读入下一个数据到发送位
@LD W0.00
%OR W0.00
OUT TR0
++(590) W2
LD TR0
LD P_Off
SFT(010) W21 W29


3、接收程序助记符

'  启动接收条件:没有接收时,遇到上升沿-停止接收条件:接收定时器到时-
LDNOT W1.01
@AND W1.00
OR W1.01
ANDNOT T0001
OUT W1.01
'  接收中,遇到串口信号反转,记录反转的时差,小于2t为0,大于2t为1
@LD W1.00
%OR W1.00
AND W1.01
OUT TR0
AND>=(325) T1 #3
RSET W1.08
LD TR0
AND<(310) T1 #3
SET W1.08
'  将收到的数据位移位进入接收缓存-每次开始接收时,要清缓存
LD W1.08
@LD W1.00
%OR W1.00
AND W1.01
@LD W1.01
SFT(010) W41 W48
'  开始接收时,开启接收定时器,每次遇到信号反转,重置定时器-发送信号最长为3t,所以定时5t,认为发送结束-
LD W1.01
@ANDNOT W1.00
%ANDNOT W1.00
TIMH(015) 0001 #5
'  接收完成,执行相应的指令要求
%LD W1.01
AND=(300) W46 #0101
AND=(300) W44 #0505
MOV(021) W43 D0
MOV(021) W42 @D0
[此贴子已经被作者于2017/1/7 14:21:54编辑过]
28244
cfg168
文章数:17074
年度积分:58
历史总积分:28244
注册时间:2012/11/28
发站内信
2018论坛解答高手
2015论坛贡献奖
发表于:2017/1/7 11:41:43
#1楼
感觉好复杂,其实扩展一个RS232或者RS485口成本并不高。
16218
zrx517697809
文章数:6262
年度积分:50
历史总积分:16218
注册时间:2014/3/28
发站内信
2018论坛热心网友
三菱电机活动(三)
寻找英威腾(三)
发表于:2017/1/7 11:53:07
#2楼
是不是省钱没地方省了
致力于自动化
伺服 PLC HMI
37975
cvlsam 版主
文章数:12476
年度积分:586
历史总积分:37975
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2017/1/7 11:56:04
#3楼
以下是引用cfg1682017/1/7 11:41:43的发言:
感觉好复杂,其实扩展一个RS232或者RS485口成本并不高。

现在RS232,485通讯115K的速率都嫌慢吧,就算19200的速率,普通IO点承受的住么?所以这种通讯方法是毫无价值的。

Good Luck~
990
f314957590
文章数:21
年度积分:50
历史总积分:990
注册时间:2012/5/18
发站内信
西门子PLC体验(特)
发表于:2017/1/7 12:07:01
#4楼
写着玩,学习通讯原理。

我在工厂遇到过一个情况。有两台距离较远的PLC。其中一台小型PLC,有剩余IO输入输出点,没有扩展能力,没有通讯接口。有一台大型PLC,接触摸屏,现在想要通过触摸屏对小型PLC的一些计数值进行显示,并对小型PLC的一些参数进行设置。
此时,可以采用这种方法,进行一些通讯,完成这个功能。当时,我还找了一块废旧电路板,从上面拆了俩光电隔离器和电阻,做了光电隔离。
[此贴子已经被作者于2017/1/7 14:23:04编辑过]
990
f314957590
文章数:21
年度积分:50
历史总积分:990
注册时间:2012/5/18
发站内信
西门子PLC体验(特)
发表于:2017/1/7 12:08:34
#5楼
回复 #3楼 cvlsam
主要是玩。
不过大部分的参数设置场景,都不需要很高的速度。实时性要求很高的场景,这个是不适合的。
19350
fsjnzhouyan
文章数:4910
年度积分:517
历史总积分:19350
注册时间:2008/7/22
发站内信
发表于:2017/1/7 12:31:45
#6楼
还真没有这样玩过有时间也玩玩。
摸着石头过河,走自己的路吧!
41090
tigermu 版主
文章数:15034
年度积分:605
历史总积分:41090
注册时间:2004/8/12
发站内信
2018论坛优秀版主
2018春节活动(二)
2017论坛优秀版主
2017国庆活动(一)
2016论坛优秀版主
2016国庆活动(一)
2015论坛优秀版主
西门子logo体验(三)
英威腾PLC体验(三)
2015春节活动
2014论坛优秀版主
2013论坛优秀版主
2012论坛优秀版主
2010年度论坛贡献奖
发表于:2017/1/7 12:39:56
#7楼
学习原理可以,实用的可能性小。i/o怎么也得选晶体管的,否则都得卡德坏。
清泉石上,明月松间。
14540
卢学斌
文章数:5277
年度积分:83
历史总积分:14540
注册时间:2009/12/3
发站内信
2018论坛分享达人
发表于:2017/1/7 12:40:11
#8楼
这个不错,值得学习。
20178
高雅的雅
文章数:15776
年度积分:-210
历史总积分:20178
注册时间:2015/5/12
发站内信
2018论坛解答高手
发表于:2017/1/7 12:42:45
#9楼
如果人家要将FX3SA-30MT的数据采集,而该PLC已经接了触摸屏,你说此时有价值吗
那一瞬间忽然不再想你,因为去一趟漠河,走了一趟西藏,逛了一趟天涯海角,泡了一会栖谷温泉,回来就是:一切随他去吧,该咋过咋过!!车祸不死感言

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2025 Gkong.com, All Rights Reserved

109.2007