我们知道各家的PLC都能采集相应的系统时间,因此我们这期的擂台是,编写一个程序,用于采集系统时间,要求能在运行或仿真是显示出来,比如,用欧姆龙的PLC编写的,能在一定的数据区,如DM区,能在程序区宣示出来,比如D10000显示年,D10001显示月,D10002显示日,D10003显示时,D10004显示分,D10005显示秒等等(虽然在欧姆龙中有专门的A区指示时间,但是这里要求,时间用连续地址显示出来),又如西门子可以在MD100显示年,MD101显示月,MD102显示日,MD103显示时,MD104显示分,MD105显示秒;再如在罗克韦尔PLC中,B3:0显示年,B3:1显示月,B3:2显示日,B3:3显示时,B3:4显示分,B3:5显示秒;等等
PLC的类型任意选择,回答的最好最完全的,原创最多,阐述最详细,程序越准确者获一等奖!
工控PLC擂台每周一期,本期待93期结束一周后结贴。奖项设置:一等奖1名:50MP,二等奖5名:10MP,三等奖10名:50积分。
MP介绍:gongkongMP即工控币,是中国工控网的用户积分与回馈系统的一个网络虚拟计价单位,类似于大家熟悉的QB,1个MP=1元人民币。
MP有什么用?兑换服务:以1个MP=1元来置换中国工控网的相关服务。 兑换现金:非积分获得的MP可兑换等值现金(满100MP后、用户可通过用户管理后台申请兑换)。
我来个先:
台达PLC系统时间问题:
1. 不是所有系列均支持万年历,台达手册上将小型PLC分了三大类,一类是EH/SV系列,一类是SA/SX/SC系列,一类是ES/EX/SS系列,只有前两类PLC支持万年历,后一类不支持。
可以在WPLSoft 2.30编程环境下通过设置PLC机种,然后编写TRD读时钟指令看编译通过后能不能正常下载进PLC来验证该型号是否支持万年历。例如如下程序:
图1
编译后,下载,如果PLC机种不支持万年历,则会弹出如下提示:
图2
同时出现“ERROR”指示灯亮,PLC不能正常工作。
注:
1)这一点我觉得WPLSoft 2.30编程环境不够给力,所选机种既然不支持万年历,指令就不应该正常编辑或者编译时应该报错,不要等到下载后才给出错误。
2)貌似第二代SS2也支持万年历,但是由于这个系列PLC没有电池供电,PLC电源断开后万年历就会丢失,觉得没有多大意义,完全是鸡肋。
对于支持万年历的EH/SV系列,由于有电池供给,PLC即使断电,内部时钟也会正常更新。
2. 对于支持万年历的EH/SV系列,存储秒分时日月星期年的特殊寄存器如下:
图3
将图一程序下载进EH2,在连机的情况下设置PLC时钟。
编程软件中点击“设置”——“万年历设置”弹出如下对话框:
图4
点击“设置”后,PLC中的时间日期就会更新成为联机PC的时间日期,此后PLC就会自动不断更新万年历(除非断电后电池没电)。当然也可以点击“重置RTC”,结果是将PLC中的时间恢复到出厂默认值:2000/01/01上午12:00:00 星期六。
设置PLC时间后监控截图如下:
图5
可以看出PLC中的万年历完全开始自主执行起来了。
TRD D0指令执行结果是将PLC中储存的万年历数据传送到以D0开头的连续7个16位寄存器中,即:D0-D6中。
这样我们可以在程序中随时利用D0-D6中的实时时间与设定的时间作比较完成与时间有关的逻辑。
需要注意的是TRD指令读出来的万年历是按我们的习惯年-星期-月-日-时-分-秒顺序排序,对应存储在D0-D6,而内部特殊寄存器以上顺序对应的是D1319_D1313。
再看一个西门子200实现的系统时间例子:
同样必须所选的CPU支持系统时间。
这样在VW10120、VW10122、VW10124、VW10126、VW10128、VW10130、VW1013分别储存的是年月日时分秒星期。
S7-200PLC有系统时钟指令:READ_RTC 为读系统时钟指令,SET_RTC为写系统时间指令。其指令的EN 为使能输入端,执行命令。其T 端为时钟缓冲区的首地址,其后地址的T+1、T+2、…T+7连续的8个字节皆为系统时钟的缓冲区,如设T =VB10,则VB11、VB12……、VB17。皆为时钟缓冲区。其VB10为年的低二位数的存数区(其值=0~99),VB11为月的存数区(其值=1~12),VB12为日的存数区(其值=0~31),VB13为小时的存数区(其值=0~23),VB14为分的存数区(其值=0~59),VB15为秒的存数区(其值=0~59),VB16恒设=0,VB17为星期几的存数区(其值=1~7)。
日期与时间值按BCD格式表示,按16进制查看时钟缓冲区得到的正确数据。要写一个程序,用于采集系统时间,要求能在运行或仿真是显示出来,必须先对PLC的时钟缓冲区设置正确的日期与时间值,下载后再编写读取系统日期与时间值的程序,这样程序运行时才可确保读取值正确日期与时间值。
题目要求:读取的数据能在一定的数据区显示出来“……又如西门子可以在MD100显示年,MD101显示月,MD102显示日,MD103显示时,MD104显示分,MD105显示秒;再如在罗克韦尔PLC中,B3:0显示年,B3:1显示月,B3:2显示日,B3:3显示时,B3:4显示分,B3:5显示秒;等等”我是用状态表进行日期与时间的显示的(见四 中的状态表)
下面即为编写的程序:
一、主程序:
二、日期与时间设定子程序
三、读取日期与时间子程序
四、用状态表显示日期与时间值
程序说明:主程序用I0.1作为设定与读取日期、时间值的子程序的转换开关:当I0.1=1时(即将I0.1开关闭合),程序将执行SBR_0子程序:在网络2里先将日期与时间值置入对应字节里:VB10=16#13、VB11=16#03、VB12=16#28、VB13=16#23、VB14=16#10、VB15=16#0、VB16=16#0、VB17=16#04,看准钟表,当时间值等于设定值时,按一下I0.0按钮,PLC立即将设定值存入对应存数区,系统时钟将按新的设定值运行。
将I0.1开关断开(I0.1=0)程序将执行SBR_1子程序,即读取日期与时间:用秒脉冲SM0.5的前沿使READ_RTC指令使能,即每隔1秒读取一次日期与时间值,送入VB10~VB17里。再在状态表里填写VB10~VB17,格式为16进制,再按下状态标的监视图标,状态表中的当前值表格里将显示日期、时间的实时值(见四的状态表)
再有S7-200的M存储器容量小,没有MD100、MD101…地址,如想将日期、时间值在程序运行中显示,且显示区为双字存储器,可这样编程:下面仅编VB10与VB15二个字节数,先进行字节转换为字,再将BCD码转换为整数,整数再转换为双字整数就可以了。见下图:
上面程序即为SBR_1的运行程序,其VB10(年)转换后的存数区为VD100,其显示值为“13”,即表示2013年,而VB15(秒)转换后的存数区为VD104,其显示值为“36”,即表示此时刻为36秒。其它值(月、日、时……)都可按此编程处理,即可不用状态表,直接在程序中观察。到此结束,谢谢。
三菱FX系列PLC内部时钟寄存器如下:
D8019——星期*
D8018——年
D8017——月
D8016——日
D8015——时
D8014——分
D8013——秒
1、最近总是在论坛听坛友说怎么做催款程序(意思就是时间到了就定时停机,客户把钱给清了就恢复。。。大概就是这个意思!)
2、其实时钟锁。。。大概也是这个意思,时间到了程序自动天正运行@
3、下面就是我简单的用主控指令做的时钟锁。(通过比较指令=...当到达设定的年月日时分秒之后,把M1 置位。。。M1置位之后M1相应的常闭触点断开主控开关。。。在外部你还可以加一个按钮/或者是预留一个输入点可以把M1 复位。。。收完货款,你拿一根导线去把你之前预留输入点短接之后又正常运行了)
4、我之前在论坛发过一个帖子,用三菱FX系列PLC定时煮饭的。。。也是用内部时钟比较的这个原理!!!