推荐丨进行逻辑控制顺序控制的编程方法
不管什么品牌的PLC,使用下面的方式来进行逻辑控制顺序控制,都是非常好的一种编程方法。既方便监控又可以随意跳转到哪一步。请改变一下我们的编程思维好么?我看那些人的所谓步进指令,还有大量的置位复位指令,非常不好阅读,也不好检查和更改。下面贴出利用三菱软件的编程图,其它品牌都一样可以采用(西门子更是如此)。
其实这就是ST编程里的ST语言的CASE语句的梯形图转换。
所以很多人说什么ST语言只适用于计算,不适用于逻辑控制什么的,我就呵呵了。ST语言也一样适用于逻辑控制,只是看各位编程人员擅长于使用哪种编程语言了。下面再贴出上述编程方式的ST语言下的控制:
下面是监视的过程:
这和梯形图下的顺序控制方式是一样的。这种控制方式比那些所谓的置位复位要方便很多。建议从日系编程学习入门的朋友转变一下思维,摒弃那种编程方式!
莫头脑 said:
我看那些人的所谓步进指令,还有大量的置位复位指令,非常不好阅读也不好检查和更改 那他们的程序是否正常运行……
965528555 said:
正常运行是一回事,是否更具有阅读性或者说,是否愿意接受更好的表达方式那是另一回事。
1530694073 said:
我表示欧美系都是不步进顺序逻辑,可读性很强
cvlsam said:
真正的日系编程思维是这样的,当然译码编码指令其他PLC厂牌中也有。
D500就是显示运行到哪一步,M寄存器还可以在人机界面上做个跑马灯演示。
Good Luck~
gk_0 said:
我觉得置位复位挺好用的呀,也很直观呢。楼主例子中大量使用比较、运算指令,如果几千步以上,那么扫描时间是否会比位指令长很多呢?
965528555 said:
这里首先我们明白一个问题,即不管你的程序是多少步,PLC的扫描永远是从程序的首端扫描到END,这个过程是一样的。而PLC在扫描某一行时,通过你所说的比较运算指令即可判断该行是否成立从而是否继续扫描该行后面,反而可以节省时间,即该条件不满足就可以跳到下一个。而置位复位则不一样了,每行都得扫描完才能下一个。其实是更节省PLC的扫描时间,比如CASE语句,第一行就会判断Step等于几,然后就直接跳到等于几的那行去扫描了。假如是一万步十万步,这中间就节省了非常多的扫描时间,但是置位复位就没这优势了。必须逐行扫描以免错过任何一个。
bnnyygy said:
一直都是这样写顺序控制的。欧姆龙ST语音写的,E文不好,变量都是中文。
965528555 said:
非常好,也感谢分享。但是建议最好是使用CASE语句来写你这个程序部分,而不是大量的IF语句。
273708367 said:
感觉越复杂可读性越差,扫描周期也越长,每个人习惯不同改变也不是一朝一夕了。
chi1225 said:
每一步前面都要搞一个比较指令,感觉不好看,指令占的空间又大,发现还是用DECO(解码指令)比较好。。
965528555 said:
那是因为三菱的软件一显示注释就显得大,而且一个比较指令占用的空间长,将近三四列,西门子根本不存在这个问题,人家的一个比较指令就占用一列。
MIC小赖 said:
这个模式从06年的台湾东捷的机台上就已经看到了,目前我们这动作部分管控基本都是这样写的。
965528555 said:
有一种论调很不好,即“我们都习惯那么久了,改变不是容易的事,要么就是你说的也不好用,虽然我没用过但肯定不好用”。这样想法不太好,之前我也是从日系入门学习的。后来我一学习西门子的时候我也是内心抵制它,一点也不好学,思想转不过弯来,不好用。后来我想我还是去熟悉它我才好判断它到底是不是好用,如果我熟悉它了它确实不好用我就舍弃它,用我认为好用的。 结果经过我的比较,发现西门子的PLC确实好用,那么我就接受它。 就文中所说的编程方法来说,我之前也是采用什么置位复位的方式,后来我看到国外的人是这样写,包括西门子博途软件的官方库写法,我觉得我可以先接受它然后运用一下,来写个实例,看是不是更方便,如果是,我接受,如果不是,我就舍弃。有一次有朋友说西门子的触摸屏或WINCC的画面编辑用面板技术在某些场合非常方便。于是我就去了解它,当我学习并用面板技术做了一个HMI面面(比如现场十套控制几乎相同的过程画面),我觉得确实不错,那么我就去接受它。所以如果在工作中有一种别人推荐你而你没有使用过的方式方法,请不要先拒绝,拿你那些老习惯来安慰自己来躲避。应该先尝试一下,然后对比一下,也许你会有所收获呢?或者说你可以试完了再骂人家这SB,不行啊,还是没我之前的习惯用法好。
yinguiyao said:
有步进指令的用步进指令,没有的就用你这个方法,如西门子200 200smart就没有步进指令。用步进指令好处是不用考虑时序的问题,同一时间段只有指定步被扫描,而你这个方法要注意同一扫描周期相邻两步不被同时执行,例如在每步都加时间延时或者其它的办法。我发过一个贴子,参考:
http://bbs.gkong.com/archive.aspx?id=463847
cvlsam said:
200中有步进指令,只是中文翻译成顺序继电器指令了。
同一个扫描周期相邻两步并不会同时执行,因为PLC扫描机制决定了顺序执行。
西门子中的Graph并不是步进指令,而是顺序功能,也就是其他厂牌中的SFC,之所以使用Graph,是因为在西门子的PCS7系统中,还存在SFC编程方式,为了区别,就如同西门子的ST语言翻译成SCL,因为和其语句表STL容易冲突。Good Luck~
zhujilucj said:
我大部分用的还是置位复位指令,有少数几个程序也在用这种方法。这个方法特别适合跳跃分支多的程序。
来源/中华工控网工控论坛
威纶通触摸屏宏指令,统合应用,与PLC自由通讯
想学习威纶宏指令的朋友,
可以关注前面的其他小节。
我们知道市面上硬件有非常多,
威纶不可能支持所有硬件的通讯,
所以它提供了宏指令让我们自己来实现。
学会宏可以极大的提升我们的触摸屏编程能力。
这小节我们以一个通讯实例结束威纶宏编程教程。
任何两个硬件通讯前,无线的还是有线的,都必须建立连接。
一般触摸屏通过以太网网络或串口通讯与其他硬件相连。
这里我们以威纶触摸屏TK6071IP和台湾永宏可编程控制器FBs系列为例,
讲解如何通过自由通讯协议,
通过编写宏指令,让两个硬件实现通讯。
其实威纶是支持永宏PLC的,我们这里假设它不支持,
看下威纶触摸屏是如何与自己不支持的硬件通讯上的。
这个过程一般分为三步。
1.准备数据线。
某宝一般有定制版的,可以在上面买,
也可以查阅硬件手册,自己制作数据线。
如我们查阅的触摸屏与PLC的硬件手册,
得到通讯端口针的定义如下:
很明显,
PLC通讯端口九针侧,
3为接收数据RxD,
2为发送数据TxS,
5为公共接地GND。
触摸屏通讯端口侧,
6为发送数据TxD,
9为接收数据RxD,
5为公共接地GND。
所以针脚3连6, 2连9,5连5,
就能做成一根屏与PLC的通讯数据线。
2.熟悉硬件的通讯协议。
熟悉或不熟悉的硬件,
在使用时我们都会习惯性的准备对应的手册,
比如接线时,我们会参考硬件的用户手册。
编程时,我们会下载编程手册。
这里我们要实现串口通讯,
所以我们也会准备硬件的通讯手册。
这里我们准备了PLC的通讯手册,
里面介绍有通讯协议相关知识。
翻阅手册,我们知道了PLC每个通讯帧的格式,
如下图。
帧头帧尾固定为0X02,0X03;PLC站号,
命令码占一个字节,分高低两部分。
校验码也占一个字节,分高低两部分,
为前面数据相加之和。
翻阅通讯手册,我们还知道了命令码的具体支持哪些,
如下图,截取了永宏PLC支持的部分命令码,
我们这里会选择使用两命令码作演示。
41,控制PLC的启停,
46,读取PLC连续多个寄存器资料。
1)控制PLC的启停(指令41 )
翻阅通讯手册,我们也能找到每个指令的解释与实例。
如下两图,为命令码41的格式与实例,
控制码为0表示停止PLC,为1表示启动PLC。
根据这些信息,我们就可以编写出控制PLC启停的帧,
以及PLC回应的帧我们也能提取出信息,具体代码在下面。
PLC回应的帧我们这里不核对校验码,
简单通过判断错误码来判断PLC是否成功执行指令。
错误码为0表示PLC执行成功。
如下图指令格式中,错误码在第5个字节。
我们就可以写出控制PLC启动与停止指令。
char c[9]
c[0] = 0x02
c[1] = '0' //0x30
c[2] = '1' //0x31
c[3] = '4' //0x34
c[4] = '1' //0x31
//0x30 为停止PLC指令,
//0X31为启动PLC指令.
c[5] = ‘0’
//c[6],c[7]为和校验码,
//即前面数据相加c[6]为高字节,
//c[7]为低字节。
c[6]
c[7]
c[8] = 0x03//帧尾
2)读取PLC连续多个寄存器资料(指令46 )
翻阅通讯手册,我们也能找到指令46的解释与实,
如下两图。
读取的寄存器个数在第一个字节指定,
读取的起始寄存器地址紧跟其后,
传统6个字节表示单字寄存器,
传递7个字节表示双字寄存器,
PLC支持的寄存器手册上也有介绍,
在后边有截图。
PLC回应帧格式里,
我们也能看出错误码在第5个字节,其后紧跟数据。
下面是PLC所支持的寄存器列表,
我们要演示的是读取WX0000一个字的内容。
也就是读取X0.0到x0.15的状态。
我们就可以写出读取PLC的WX0000的指令
char cFrame[255]
cFrame[0] = 0x02//帧头
cFrame[1] = 0x30//plc 站号
cFrame[2] = 0x31
cFrame[3] = 0x34//连续寄存器读取指令
cFrame[4] = 0x36
cFrame[5] = 0x30//读取1个寄存器
cFrame[6] = 0x31
cFrame[7] = 0x57//寄存器起始码 WX0000
cFrame[8] = 0x58
cFrame[9] = 0x30
cFrame[10] = 0x30
cFrame[11] = 0x30
cFrame[12] = 0x30
cFrame[13]//校验码
cFrame[14]
cFrame[15] =0x03//帧尾
3.编写代码与调试。
通过通讯手册获取协议信息,
就可以通过协议的约定来编写宏代码。
宏代码的编写是对我们前面小节介绍全部宏指令的一个综合应用。
我们可以多练习再借助宏输入窗口,熟悉使用威纶宏指令。
课前,我已在硬件上调试通过了下面的代码,可以参阅练习。
相关问答
基恩士的plc怎么样,跟三菱比起来难学吗?
基恩士的plc曾经接触过编程比较简单编程的程序也很小貌似国产台湾的这些plc的编程软件基本上都很小三菱西门子松下的plc的软件都是比较大的但是基恩士的plc的...
丰纬plc怎么样?
丰纬PLC是很不错的产品,它的配制可小,可大。经济实用。丰纬PLC应该是台湾罗升公司的产品。其编程,组态同欧姆龙公司,松下公司的产品相近。在一些中小型的控制...
faket是什么牌子的plc?
台湾永宏台湾永宏创立之时,是PLC几乎全被先进工业国家品牌所垄断的时代。当时,公司便许下宏愿,立志要为中国人创造一个自有PLC品牌,并在世界舞台争得一席之...
怎么把编好的PLC程序输入到PLC里面?
你说的把PLC程序输入到PLC设备里边的过程其实叫程序的下载,目前主要是2种下载方式,一通过串口线下载,二是通过网线下载。通过网线下载的方式,我在一些其他的...
关于海正PLC的冗余问题-盖德问答-化工人互助问答社区
硬件冗余能否无扰切换,看控制器卡件是否进行数据同步采集,两个控制器是否进行数据同步交换。台湾永宏的plc一般都是比较小型的用起来还凑合,不知道...
小型plc一般可以扩展的最大点数是?
1.小型PLC可以扩展的最大点数是有限的。2.这是因为小型PLC的硬件资源有限,无法支持无限制的扩展。同时,扩展点数也会受到PLC本身的性能和使用环境的限制。3...
学习西门子的PLC编程,需要哪方面的理论知识?
你好,很荣幸能回答你的问题,希望我的回答对你有帮助。你遇到的问题我在学习PLC过程中也遇到过。这应该是大家的必经之路吧。学习任何一个品牌PLC都需要一定的...
连LS品牌PLC的D寄存器为什么是双字DW?
这里的DW并不是DoubleWord,他只是单纯的一个寄存器符号,呵呵。日韩的和台湾的程序中寄存器符号是不区分单字和双子的,是用指令来区分的。西门子是用W和D来...
lx系列plc是哪个公司的产品?
LX系列PLC是由台湾的研華科技(Advantech)公司生产的产品。研华科技成立于1983年,是一家全球领先的工业自动化和物联网解决方案提供商,其产品涵盖了工业计算...
plc程式注解怎么转换成简体?
两个方法:1.将系统语言由中文(PRC)切换至中文(台湾),确定后电脑重启。在控制台里面找到“区域语言选项”,里面的“高级”,下拉选单找到“台湾”即可,...两...