故事作者:空果仁

最近创作

看看TA的故事

一定使用自己熟悉的指令

已锁定

空果仁

官方工程师 西门子1847工业学习平台

  • 帖子

    200
  • 精华

    47
  • 被关注

    354

论坛等级:侠圣

注册时间:2011-07-11

普通 普通 如何晋级?

一定使用自己熟悉的指令

2431

9

2011-11-09 09:45:04

                前一阵帮老用户看一段程序,程序大概的意思是通过PROFIBUS-DP读出驱动PEK的参数,大家都知道读写PEW参数的通信区只有四个字输入和四个字输出,发一帧读写请求报文,得到参数值或是否该参数写成功信息,由于读写多个参数,所以需要做轮询程序,即发一帧请求,如果应答,使用指针指向下一个请求发送区,并将接收的数据存储于DB中,直到下一个请求数据区为零,再次重新轮询,这样周而复始的读写参数。程序使用STL指针编写,测试时有问题,又不想看不易看懂的指针程序,犹豫半天自己重新编吧,按照格式一点点编写,一些无关紧要的程序复制过来,完成后下载并监控,又有问题了,发现接收的数据区有冲突了,第一帧接收的数据跑到第二帧去了,肯定异步通信判断有问题,麻烦了,不能使用断点,这样的问题解决起来通常办法是自己想,想了一天,没有想出出错的地方,又画一下流程图,好像也没有错误,只好将程序放到OB35中,5秒钟循环,慢慢看,突然发现有一段复制的程序有问题,参考下图(复制粘贴下面链接查看):http://www.ad.siemens.com.cn/club/bbs/upload/634564282234171250.jpg
                程序是这样的,如果发送的请求数据(读写的参数号)MW2与接收的响应数据(相同的参数号是否返回)MW4相同,异或结果为0,M1.1为1,触发指针指向下一帧报文,如果不一样M1.1为0,开始认为条件还缺少,再加上MW12(请求的数组号)与MW14(返回的数组号)比较,通常都读写数组的第一个参数,监控的时候发现MW2与MW4相同的时候,M1.1为1,有时不相同的时候也为1,这样数据区就乱了,难道是异步通信问题?后来改为熟悉的比较指令:
    A(        
            L          MW          2
            L          MW          4
            ==I      
            )          
            A(        
            L          MW        12
            L          MW        14
            ==I      
            )          
            =          M            1.1

下装后程序没有问题了。后来发现了前面的指令问题所在,真是复制一条语句耽误太多的时间,以后还是使用自己熟悉的语句编程。不知大家有没有看出?
一定使用自己熟悉的指令 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

崔工谈博途与PLC

共有101条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。