可以*应对每个应用的SIMATIC控制器
我公司的SIMATIC系列控制器解决方案可以根据用户的需求提供*的可编程逻辑控制器。无论是控制任务,集成技术或数据存档-此报告小规模的自动化任务到非常复杂的系统解决方案 -安全模式或标准条件下的控制器 -SIMATIC控制器代表了贵公司未来安全的投资,并允许您以迅速,灵活,成本效益的方式应对新的挑战。
上海翰粤是西门子工控及自动化产品*分销商咨询!
:郑辕鸿(销售工程师)
:
(): 传真():
:zx2013888 :www.hanyue.cc
:
FM350-2高速计数模块的一个小故事
zui近在上遇到了一个关于FM350-2高速计数模块故障诊断的问题,有一定的代表性,这里和大家分享一下。
我们先来回顾一下这个问题及解决的过程。
客户:我的FM350-2(6ES7350-2AH01-0AE0)上电后SF灯亮,报错。
我:给FM350-2供电了吗?(模块不供电会报错)
客户:供电了。
我:怎么给模块分配的参数,有没有接编码器?
客户:什么都没改,采用默认设置,没有接设备。我以前这样用过好几次,没有碰到这种问题。
我:(在我的记忆里也是不应该报错,因为FM350-2有默认的参数,只要供上电后就可以工作,不会出错),监控一下FM350-2的诊断信息,报什么错误呢?
客户:非法的时间戳,模块没有分配参数……,详见图1,图2。
图1 FM350-2诊断诊断缓冲区信息
图2 FM350-2诊断中断信息
我:(没有印象)我先测试一下,稍后和您!找来FM350-2模块(6ES7350-2AH01-0AE0),进行硬件组态、编译、下载程序,然后运行CPU,FM350-2正常,试了几次都正常,不能复现出客户的故障。
怎么办呢,问问同事吧,都说没有碰到过类似的问题。
接着测试,模拟了可能会出现的错误,包括背板总线没有接好、前连接器没有插好、模块接线错误等,都没有出现同样的错误。还有其他原因吗?
对了,用ET200M站下面的FM350-2模块组态一下(实际应该在硬件目录中选择在SIMATIC 300站下面的FM350-2模块),编译下载、运行,FM350-2的SF灯亮了(激动中),赶紧监视一下错误信息吧(保佑),果然,同样的错误信息出现了(狂喜)。赶紧打给客户。
我:您在组态时,从哪里选择的FM350-2模块。
客户:就在SIMATIC 300站下面选择的啊
我:……? 如果模块位置选择错误时会出现这种问题,您再确认一下。
客户:确定没有出现这种问题。白激动了,不是这个原因,还有其它原因?
没办法,再和客户深入沟通一下吧!详细了解客户怎么做的。
客户说他连软件包都没装,直接将FM350-2组态到机架上。这提醒了我,我在组态FM350-2模块时,我每次都打开了FM350-2的参数分配窗口,如图3所示,并默认保存了参数。
图3FM350-2的参数分配窗口
好,按照客户的操作步骤,只将FM350-2组态到机架上,不打开参数分配窗口,直接下载的程序,运行CPU后,果然FM350-2的SF灯亮了。在线监控模块的诊断信息,上面的错误信息又出现了。
反复测试了几次都出现了相同的错误,即只要在组态时不打开FM350-2的参数分配窗口,只是将模块插入到机架上,进行直接的编译下载就会出现错误。接着我又测试了当FM350-2模块位置选择错误时的情况。测试结果是,当模块位置选择错误时,只要打开了FM350-2模块的参数分配窗口,进行了保存编译,就不会出现错误。前面出现错误是因为和客户犯了同样的错误。
原因找到了,告之用户要先将FM350-2软件包装上,并在组态FM350-2模块时,打开模块的参数份配窗口,进行参数保存。
客户按照我说的做后,问题解决。
简单来总结一下:问题的出现与我们平时的操作习惯有关。模块组态后我们自然应该给他分配参数,所以该做的工作还是都按部就班地做好,以避免不必要的麻烦。这里说起来轻松,但类似这样的问题排查起来会很费周折,还是在平时的工作中多注意一些吧。
如何利用OB1的临时变量读取CPU系统时钟
今天遇一用户,需要读出CPU315-2DP的系统时钟,与设定的时间作比较,然后出各班的报表数据。可用户就是不理解Date_And_Time的数据类型,在程序里怎么写,都是红色的,郁闷死了,客户自己说都弄一天了,说了很多和技术不相关的内容,用户zui后的要求就是一步一步教他怎么做。没办法,谁让咱们的数据类型如此“复杂”呢?
不过虽然读取和设置系统时钟很简单,总会有人问,如何用SFC0和SFC1来设置和读取时钟,今天就和大家说一说。 首先Date_And_Time是一复杂数据类型,包含8个字节,Byte0-Byte7对应年、月、日、时、分、秒、毫秒、星期,对应关系如下表所示:
Byte6和Byte7的高4位组合成毫秒,格式是BCD码,Byte6是高位,Byte7是低位 我们可以在DB块里定义time1和time2变量,数据类型是DATE_AND_TIME,如下图:
在符号表中定义DB1的符号名为system-time,如下图:
然后调用SFC0和SFC1就可以了,大家可以参考下面的程序(可以将程序拷贝到Step7中,然后可以转成梯形图程序),具体使用时间时可以直接寻址DB1.DBB0 – 年 ……DB1.DBB7(低4位) – 星期,DB1.DBB8 – 年 ……DB1.DBB15(低4位) – 星期。(这段程序和用户解释了很长时间,用户就是理解不了,难啊。。。)
OB1:"Main Program Sweep (Cycle)"
Network1:
A M 10.0
JNB _001
CALL SFC 0
PDT :="system-time".time1
RET_VAL:=MW100
_001: NOP 0
Network2:
CALL "READ_CLK"
RET_VAL:=MW102
CDT :="system-time".time2
NOP 0
因为客户用SFC1读取时钟不是很清楚,还有就是他对时间误差的要求到分就可以,所以*一种简单的方法,不知大家之前用过没有,就是使用OB1的临时变量OB1_DATE_TIME(在OB1的Interface – TEMP中可以找到),此变量也是DATE_AND_TIME的数据类型,对应的临时变量地址是LB12 – LB19,同样对应年 – 星期,符合上面表格中的结构,我们只需要使用Move指令就可以得到PLC的系统时间了。
例如我们可以将LD12 Move 到MD0、LD16 Move 到MD4中,然后在程序中寻址MB0 –MB7就可以了。您可以参考下面的程序(可以将程序拷贝到Step7中,然后可以转成梯形图程序)。需要注意,OB1临时变量读出的时间会受OB1扫描周期的影响,例如OB1扫描周期是15ms左右,那么从OB1中读出的时间精度应该就是15ms左右。
OB1:"Main Program Sweep (Cycle)"
Network1:
A( L
LD 12
T MD 0
SET
SAVE
CLR
A BR )
JNB _002 L
LD 16
T MD 4 _
002: NOP 0
如果需要设置系统时钟,还需要使用SFC0来实现。
客户使用此种方法很快就解决了问题,当然有简单的方式就是用简单的方式了。我也郁闷,难道真是Step7程序太复杂了,可能吧,哈哈,多学习就会越来越简单,而且会越来越灵活。用户朋友们,让咱们一起努力,让我们的技术越来越好,经验越来越丰富。
西门子代理商:/(郑辕鸿)