技术论坛

 • 产品分类
 • 咱工程师的故事
 • 培训与认证答疑专区
 • 服务合作伙伴专区

 S7-200SMART高速计数器中断子程序实现定长切割

返回主题列表
作者 主题
weirilin
游士

经验值:169
发帖数:7
精华帖:0
楼主    2024-01-22 10:30:26
主题:S7-200SMART高速计数器中断子程序实现定长切割
芳季工程师提供了有效建议,用当前值减去过去值,是我没想到的算法方式,赞!
基于设备时连续运行的工况,这个算法可预见到的问题会是,当高速计数器的当前值寄存器SMD38/HC0寄存器溢出后,数据失效,依旧需要高速计数器当前值清零,HC0控制字SMB37的定义如下:
SM37.0 HSC0 复位的有效电平控制:FALSE:高电平激活时复位,TRUE:低电平激活时复位
SM37.1 保留
SM37.2 HSC0 正交计数器的计数速率选择:FALSE:4x 计数速率;TRUE:1x计数速率
SM37.3 HSC0 方向控制位:TRUE:加计数
SM37.4 HSC0 更新方向:TRUE:更新方向
SM37.5 HSC0 更新预设值:TRUE:将新预设值写入 HSC0 预设值
SM37.6 HSC0 更新当前值:TRUE:将新当前值写入 HSC0 当前值
SM37.7 HSC0 使能位:TRUE:启用

唯一可以看到的关联的是,SM37.6置1,更新当前值写入HSC0,怎么实现更新为0呢?
芳季
至圣

经验值:68971
发帖数:15089
精华帖:101
1楼    2024-01-22 13:28:19
精华帖  主题:回复:S7-200SMART高速计数器中断子程序实现定长切割

以下你再赞我一次吧。

当高计(其实不只是高计,任何32位值都是)计数到达很大值,几乎过零的时候。再加一点点值就变正个位数了。这个情景就好像水表,到了99999再加2就变000001了。

此时你依旧用当前值减过去值。例如:1-99999。人计算,计算机计算,当然等于-99998。但是plc的减法指令计算1-99999(请把这个99999值看作是32位二进制中的很大值。)

(因为很大值书写和记忆比较困难,最大值:4294967295。所以我想用99999类比为最大值。方便说明。)

此时1-99999=2

说明99999加1等于00000。00000加1等于1。所以1-99999是等于2的。

所以,当前值-过去值,永远等于增量。反向旋转的话增量永远是负值,说明这是反转。

我只是把一些经验介绍给大家而已。

再说,你说那个当前值,只是编程者准备写入到高速计数器当中的当前值。这是一个期望值,不是高计正在计算的当前值。这个值要通过执行hsc指令才会实实在在地反映到高计的当前值。懂意思不?

HC0;这个地址才是高计的实时当前值。

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