发布于 2013-08-23 17:39:36
10楼
记得楼主说过自己不是学计算机,而是学自动化出身,但我怎么看楼主的思路都是高级语言的思路。
先说说时间戳,楼主对时间戳的描述看的我云里雾里。
“所谓时间戳就是每隔一段时间就打一个戳的意思”,“就是用上升沿来触发获得”两句话怎么看都是矛盾的。
没有上升沿触发就不打的话,那怎么会每隔一段时间就打一个戳?
时间戳其实就一个时刻值,记录了事件发生的时刻。从这个意义上来说,OB1每次被调用时都会首先更新自己堆栈区中的时刻,这个时刻可就是OB1被调用这个事件的时间戳。
“而CPU的系统时间只能表示它当前工作时的流水时间,我们只能看到某一瞬间的时间,但那只代表CPU当前运行程序的某个时间段,并看不出来程序运行在什么地方了,用了多长时间,或者执行到哪里了的当前时间”
流水时间=一瞬间的时间=时间段<>当前时间?我都看糊涂了
CPU的系统时间不就是一个时钟吗?你什么时候用SFC1去读它,得到的不就是当前时间吗?
回过来说说楼主的需求吧,看主楼的描述,楼主就是要记录电机启动和停止的时刻。
我个人赞同n侠的办法,读OB1的时间就可以了,最大误差不过一个扫描周期。一般300/400的PLC一个周期最多就几十个毫秒,这个精度用在一般电机上已经很高了。
话说楼主电机启动停止信号怎么得到的?是操作还是反馈?如果是反馈等到接触器动作,辅助触点闭合,到PLC硬件接收(如果带滤波),最后程序读到信号变化,可能2-3个扫描周期都过去了。
P.S.
怎么判断电机状态变化,直接用信号变化来记时间不是也挺好的吗?
不过照楼主的思路也是可以实现,还是多试试,会成功的。