设为首页收藏本站积分获取及使用技巧附件上传须知[求助-西门子PLC300/400]在S7-300中制作上电记时的程序

追梦工控论坛|工控论坛-专业的Intouch论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

总共8197条微博

动态微博

查看: 2646|回复: 2

[求助-西门子PLC300/400]在S7-300中制作上电记时的程序

[复制链接]

升级  32.5%

该用户从未签到

发表于 2013-12-21 12:21:33 | 显示全部楼层 |阅读模式

上传分享工控资料得追梦点,下载积分获取办法点击进入 ☆追梦点充值入口
发帖回帖赚金币兑换下载积分。上传附件须知点击进入

×

马上注册,结交更多工控达人,分享经验,让你轻松玩转追梦工控论坛。

已有帐号?  点击登录   或者        

支付宝扫一扫领红包
各位大家好,我有一个项目客户想在程序中增加记时功能,不知该怎么做,请大家指教。</p>
        问题补充:
再问下,那里可以下载到相关的资料和参考程序?谢谢!
让我们联手拒绝网络伸手党,下载积分获取办法&附件上传须知 ☆追梦点充值入口





+1
2648°C
2
  • terkcov
  • gMTrLjUr
过: 他们

升级  35%

该用户从未签到

发表于 2013-12-21 12:59:38 | 显示全部楼层
上电计时的话不需要太精确,一般记到分钟就可以了。有两种办法:
1、CPU上电后,用SFC1读取系统时间,然后与上电时间做比较,定时将时间差值存入相应数据块。该数据块数值在上位机做显示就行了。
2、CPU上电后,用CPU时钟脉冲做计数累加,按照时间规则进位,将累加数值存入相应数据块。该数据块数值在上位机做显示就行了。
                                                                                                                                                                                                                                                              
                                                        

升级  33.5%

该用户从未签到

发表于 2013-12-21 13:53:52 | 显示全部楼层
ob35等循环中断(周期100ms)中用计数,
A I0.0//设备上电
jcn m1
l 0.1//每一个扫描周期0.1s
l runtime//计时,单位s
+r
t runtime
m1:nop 0
                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                            1 调用SFC1读取系统时间功能块   然后在上电时 将当前日期存储到DB地址中,然后将该DB地址中的时间跟实时的时间比较  就可以得出运行时间,  你可以查一下SFC1的用法
2 还有一种常规用法就是  通过OB30—OB35循环中断块来进行计时  或则对一个地址 累加
                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                            1、首先在CPU选项里面设置好“时钟存储器”,比如自己取为0,那么M0.5就是按照1秒的周期进行0-1的变化---这时候的M0.5类似于200PLC里面的SM0.5。
2、建立好时钟周期后,在启动程序运行的程序里面加入“ADD”加指令进行累加就是了。当累加结果>=60的时候,将其赋值为0,同时再另外加到分钟变量就得到分钟的计时了。
                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                            累计运行时间,对于设备保养及维修有一定的参考作用,可以使用以下方法做,各有优缺点供参考。
1用二个S_ODT时间继电器,做一个标准时间脉冲,用多个带断电保持S_CU加计数器的BCD码输出字,作为对,秒,分,小时,累计多少小时计数,累计时间可以做可以根据需要做很大,注意计数器BCD码计的数不不超过999,所以需要使用多个计数器,计时精度可以做的很高。
2使用硬件组态内,在CPU属性内时钟储存器,使用选择的脉冲变量作为标准时间脉冲,其他和1使用相同。
3使用系统功能块SFC2,SFC3,SFC4做,其中SFC 2 &quot;SET_RTM&quot;设置运行时间定时器,SFC 3 &quot;CTRL_RTM&quot;启动和停止运行时间定时器,使用SFC 4 &quot;READ_RTM&quot;读取运行时间 定时器,计时最大为32767小时,即使用比较指令如果计时时间超过32767时,自动将&quot;SET_RTM&quot;设置运行时间定时器时间内赋为0.当然也可以使用手动按钮将&quot;SET_RTM&quot;设置运行时间定时器时间赋为0。SFC 3 &quot;CTRL_RTM&quot;启动和停止运行时间定时器需要在相应管脚赋一个启动停止计时器bool变量,和一个字节变量来作为计时器编号。使用系统功能块做累计时间简单,不占用系统内计数器和计时器资源,在FB块内做,使用局域变量,可多次调用很方便,但计数时间精度为小时,且计数最大值为32767小时。
                                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                            1、在OB100中把当前DATA AND TIME提出来放到一个DB1前8个字节中,用SFC1.
2、把这个DATA_AND_TIME类型的数据每个BYTE提出来由BCD格式转为整型数放在DB2中。
3、把当前的时间用SFC1在OB1中调用读出来放在DB1第9个字节后的8个字节中。
4、把当前时间从DB1 DATA_AND_TIME类型的数据和刚才一样每个BYTE提出来由BCD格式转为整型放在DB2第8个字节后。
5、用比较指令将当前时间与上电时间的每个对应字节做比较然后放在DB3中,然后将DB3中的每个字节转为DATA_AND_TIME格式整型到BCD然后在HMI中就可以读这个运行时间。
以上是一个笨的办法给你提供个思路,下面说一个比较简单的办法。
1、你调用FC1 AD_DT_TM标准块这个块就是一个累计时间的块,用这个块可以减少转换的麻烦。
2、你在OB100中给DB1.TIME1赋值为0,可以建个临时DATA_AND_TIME变量直接赋值给DB1.TIME1,FC1的INPUT T针脚填DB1.TIME1 然后在FC1的D针脚写T#1S。
3、然后在硬件组态中定义一个时钟存储器将这个存储器的第3位比如M0.3放到FC1的前面常开触点中,这样基本实现方式就知道了,就是在M0.3每一次脉冲加1S,然后FC1返回值RET_VAL放到一个DB1.TIME1中这样DB1.TIME1就实现了时间累加功能。
注:DB1.TIME1是一个DATA_AND_TIME数据类型。
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

请珍惜自己的ID,严禁发布垃圾水贴,诸如adsf......顶......纯表情......多次重复回帖刷积分......轻则删帖警告,重则封禁!★请分享资料、经验或者赞助论坛,贡献一份力量★

关闭

最新活动上一条 /1 下一条

小黑屋|手机版|追梦工控论坛|工控论坛-专业的Intouch论坛 ( 皖ICP备10012005号 )|网站地图

GMT+8, 2025-5-5 00:04 , Processed in 0.107159 second(s), 20 queries , Gzip On, APCu On.

Powered by Dreamyiyi

© 2009-2025 工控论坛

快速回复 返回顶部 返回列表