在调试功能上S7-300只能一个工程师在线,S7-400支持两个工程师同时在线,S7-1500的功能非常强大,可以Zui多五个工程师同时在线调试,如果我们保持惯性思维,按照S7-400的方式做,就会遇到意想不到的麻烦。
首先看一下S7-1500与S7-300/400的调试功能有什么样的区别呢?
第一:S7-300/400可以单独一个块下载,而S7-1500必须是一致性下载,就是所有的块都下载。
第二:上载功能,S7-1500可以上载一个块,但是只能上载块中的符号名称,而S7-300/400上载的是juedui地址。
基于这两点,S7-400的团队调试功能应该更方便,但是S7-1500也有自己的独特性,例如其他人修改了程序后,立刻会有状态通知,所有团队成员程序总是保持一致性。
其次分析一下使用S7-1500的团队调试功能可能会出现的问题,这也是上次与用户交流时发现了一个问题,很有普遍性。例如有两个工程师A和B同时调试一个S7-1500CPU,A在FC1中添加一个常开点变量M1.1符号名称缺省为TAG_1,然后下载到CPU中,那么B同时也在FC2中添加一个常开点变量M10.1,符号名称缺省也是TAG_1,这样问题来了,下载FC2时会提示进行程序同步,先上载,那么上载FC1中的变量只是TAG_1,而没有M1.1,到了B中,TAG_1对应的是M10.1,那么FC1中原来M1.1的变量就变成了M10.1。这样程序就混乱了。同样如果在B中没有符号名称TAG_1对应的变量,那么只能显示TAG_1,需要B手动添加。而且必须问A才能知道,非常不方便。那么可不可以上载符号名称呢,可以,但是必须整个站点上载,这样B修改的程序就被覆盖了,也不能这样做。所以团队调试时符号名称必须提前定义。
如果想像S7-400一样随时添加变量怎么办,使用DB块就可以了,因为DB块包含符号名称。其它的方法还没有想到,有建议可以一起分享
如果CPU中没有装载DB100,S7-1500CPU操作系统将调用编程错误OB121,并将编程错误诊断信息写入诊断缓冲区,这就是全局处理。
如果在程序块发生编程错误的语句后调用函数“GET_ERR_ID”或“GET_ERR”,则CPU不会再调用OB121(这种情况下即使CPU中没有OB121也不会停机),也不会将错误写入诊断缓冲区。用户可以在程序块的输出参数“ID”中获取错误信息,如图7-11所示。
图7-11 对于编程错误进行本地处理
查看“GET_ERR_ID”的在线帮助可知故障ID“16#253A”对应的错误信息为“全局数据块不存在”。使用本地处理程序错误的好处是能够快速定位用户程序中出现的编程错误。如果想要得到更详细的错误信息,比如出错程序块的类型、程序块编号等,可通过调用函数“GET_ERR”实现。
13)I/O访问错误组织块
如果在执行用户程序指令期间直接访问I/O数据出错,也可以进行全局处理或者本地处理。
全局处理:
所谓全局处理即调用I/O访问错误组织块(OB122)。
本地处理:
在用户程序块中调用指令“GET_ERROR”或者“GET_ERR_ID”进行处理。比如在程序中访问了并不存在的外设“IW100:P”,可以进行本地处理,如图7-12所示。
图7-12 对于I/O访问错误进行本地处理
查看“GET_ERR_ID”的在线帮助可知故障ID“16#2942”对应的错误信息是“读取错误:Input”。如果不作全局错误处理和本地错误处理的话,CPU会将故障信息写入到诊断缓冲区中。
14)启动组织块
操作系统从“停止”切换到“运行”模式时,将调用启动OB。如果有多个启动OB,则按照OB编号依次调用,从Zui小编号的OB开始执行,用户可以在启动OB中编写初始化程序。程序中也可以不创建任何启动OB。S7-1500CPU只支持暖启动。
15)MC伺服中断组织块和MC插补器中断组织块
在添加相关的“S7-1500运动控制”工艺对象之后,系统自动将OB91/OB92分配到MC伺服中断和MC插补器中断。