技术论坛

 回复:关于时钟存储器的应用程序

返回主题列表
作者 主题
0917
游侠

经验值:516
发帖数:86
精华帖:0
楼主    2015-01-15 18:54:22
主题:关于时钟存储器的应用程序
最近在看一个项目的程序,发现一个关于时钟存储器的程序不太明了。时钟存储器设定为MB28,
L MB 28
L MB 29
INVI
AW
T MB 27
L MB 28
T MB 29
问题是其他程序用到了M27.5,我想问一下M27.5到底是怎么回事,使得程序按秒加减计数
当然我对这段程序也不是太明白。希望各位大侠能帮忙看看,谢谢1
学习快乐 快乐学习
n次看你的背影
奇侠

经验值:7975
发帖数:2321
精华帖:73
1楼    2015-01-15 23:24:15
精华帖  主题:回复:关于时钟存储器的应用程序
楼主:看了你的代码,代码执行的过程我描述一下,你有时间可以测试、验证一下。

L MB 28 //装载时钟存储器本周期8个位当前的状态到ACCU1
L MB 29 //装载时钟存储器上周期8个位的状态到ACCU1,MB28的内容装载到ACCU2
INVI //时钟存储器上周期8个位的状态(ACCU1的内容)取反
AW //当前时钟存储器8个位的状态(ACCU2)&上周期时钟存储器8个位(ACCU1)取反的状态,
//&的结果存储在ACCU1内
T MB 27 //将ACCU1的内容存储到MB27(只存储了低8位)
L MB 28 //装载时钟存储器本周期8个位当前的状态
T MB 29 //将本周期时钟存储器8个位当前的状态存储到MB29

此段代码主要表达的意思就是:当时钟存储器8个位,任何一个位状态由0变化到1,8个位的上升沿将对应地存储到MB27,M27.5就是1Hz时钟脉冲的上升沿。此段代码简短朴素,效率却非常之高。

题外话:此段代码稍加修改,可以同时判断16个位的上升沿,如果做成一个FC,用起来还是很方便的。
佛对我说:“你的痛苦来自于你的欲望,没有欲望也就没有痛苦!”
老学童
奇侠

经验值:8233
发帖数:767
精华帖:32
8楼    2015-01-20 18:13:12
精华帖  主题:回复:关于时钟存储器的应用程序
这位坛友,你写的程序是得不到上升沿或下降沿信号的,MB28是(8位)信号源,MB29是(8位)中间变量,MB27是(8位)上升沿信号,
即MB29用于保存信号源(MB28)前一个周期的状态,因此,你写的程序脱离了上升沿或下降沿的原理,无法得到上升沿或下降沿信号。
将楼主的程序分解,例如: M28.0, 按西门子标准指令为:
上升沿
A M 28.0 //源信号
FP M 29.0 //中间变量
= M 27.0 //源信号的上升沿
下降沿
A M 28.0 //源信号
FN M 29.0 //中间变量
= M 27.0 //源信号的下降沿

如果不用西门子的标准指令,也可以得到上升沿和下降沿 信号:
上升沿
A M 28.0 //源信号
AN M 29.0 //中间变量
= M 27.0 //源信号的上升沿

A M 28.0 //源信号
= M 29.0 //中间变量(保存前一周期源信号)

下降沿
AN M 28.0 //源信号
A M 29.0 //中间变量
= M 27.0 //源信号的下降沿

A M 28.0 //源信号
= M 29.0 //中间变量(保存前一周期源信号)
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。