前言:
学习一种编程语言不是一件简单的事情,不可能一朝一夕就能完成,在初学阶段难免会犯一些错误,作为编程人员一定要清楚程序的来龙去脉,否则程序在执行过程中就可能与编程人员的初衷大相径庭,在本文中不对STEP7软件及编程语言做详细的讲解,只是列举一些在STEP7编程过程中常见的错误,希望通过本文能让你在学习编程过程中尽量减少在编程方面的错误。
STEP7编程中常见的错误举例:
1. 简单错误:简单举几个例子,非常常见,但却容易被忽视。
1.1 地址超范围:
![24e314126f10bb265162cdc3e812f7d8.png](https://i-blog.csdnimg.cn/blog_migrate/874c18468656dcb52a43d27dd38e46dc.jpeg)
上面这两条语句很简单,语法没有任何错误,可以下载到400CPU中,但是如果你将下载到315-2DP中,将无法完成,因为CPU315-2DP不支持M3000.0这么大的地址空间。
1.2 对指令不熟悉
![de774396c348ed6d983a9d254851b43e.png](https://i-blog.csdnimg.cn/blog_migrate/8ab569fce838904be9cc46a4915a4682.jpeg)
同样以上三条语句也没有语法错误,本意是当M0.0由0变为1的上升沿时,Q0.1导通一次,但由于FP指令是用了与A指令相同的地址,所以Q0.1的状态是不会有任何变化的。
1.3 地址重叠
![985926edd50f7a69fe07838b7c1c8415.png](https://i-blog.csdnimg.cn/blog_migrate/7419aac52b2b7efc91cf612e6def5092.jpeg)
同样语法没有错误,但由于MW10包含了M11.0,这里就要考虑对M11.0的写操作与MW10的写操作是否存在逻辑冲突的问题了。
2. 循环程序错误
在我们编程中,循环程序的使用是非常常见的,下面的例子初衷是实现一个500此循环操作,但由于没有考虑下列几个因数,使程序不能正确执行。
![bb08896f78767bddb7c82c3b2d75f9b2.png](https://i-blog.csdnimg.cn/blog_migrate/94bd2fc2203ba66dad4adec489b75668.jpeg)
因素1:循环程序初始化
程序中没有MW0的初始化语句,一旦循环程序被多次调用将发生错误,所以,应在LOOP标号前增加以下语句:
![242564fd799fa15f542a29c6e829077b.png](https://i-blog.csdnimg.cn/blog_migrate/fb10083bb19bf1e76caa9e8f80e20527.jpeg)
转换成STL后程序为:
![252627acd04807b424e4bd739801bb0f.png](https://i-blog.csdnimg.cn/blog_migrate/5f61869c7bcc8bb7a2910d9c0dbf1f12.jpeg)
因数2:要考虑循环程序执行时间
在网络3中添加用户程序后,是不是所有的工作就完成了呢?这里还要考虑CPU的扫描执行周期问题,假设网络3添加一个子程序,这些程序执行需要的时间为A,用户其他程序执行需要时间为B,那么A*500+B的时间总和要小于下图中的扫描执行周期时间,否则就可能引起由于程序扫描时间超出了CPU的监控时间而导致CPU停机,用户应在硬件组态中的程序扫描监控时间改大于此时间的数值。
![bb76f23a8cddb2cb11e70ea510bf229e.png](https://i-blog.csdnimg.cn/blog_migrate/3565da1db7a87679b80655da2be82795.jpeg)
因数3:循环程序累加控制:
上例中之所以用STL显示,目的在于提示另一个在编写程序中经常出现的错误,在编程中有人会使用MB0代替上例中的MW0,或者用INC指令,由于这两种用法都是字节操作,如果使用MB0,由于MB0最大为255,永远不会大于500,程序将出现死循环的情况,所以这里要强调的就是数据类型匹配的问题。
电气相关知识和经验是用来分享,希望本文能对你有帮助。与人玫瑰,手留余香。
欢迎大家关注,点赞,评论及转发。