签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
前几天看到一个提问是这样的
问为什么C0不计数?而把网络1和网络2交换就可以了?
这个问题对于新手来说是一个很容易犯的错误,我自己也犯过同样的错误。那是因为手册中有段话把我误导了,也是自己对它理解不够。
就是这个程序,我的想法是I0.0是按钮,按下Q0.0接通,在按下Q0.0断开,可实际Q0.0根本不会接通。
那么问题来了,手册中这样说的
我的程序应该I0.0上升沿时Q0.0置位,但要等到扫描完时才会输出Q0.0,那么网络2的I0.0上升沿后面Q0.0就应该为OFF,那么就不会复位,下次按下I0.0时Q0.0复位。应该没问题啊。
而第一个程序是这样的,说明书上说
10ms定时器在扫描开始时刷新,那么当T98 ON的那一个扫描周期计数器就应该计数啊。难道说明书有问题?
后来自己仔细研究才明白,CPU执行程序时用的是过程映像寄存器中的值,Q0.0那个程序就好理解了,置位Q0.0后,寄存器中Q0.0已经ON了,扫描网络2的时候读取寄存器中Q0.0 ——>ON,所以I0.0上升沿——>ON,Q0.0——>0N,所以Q0.0被复位,Q0.0输出OFF。
那定时器这个呢?我在想cpu读取的应该也是寄存器中的值而不是定时器的实际地址,所以
实际就是扫描开始读取T98实际地址传送给T98寄存器——>T98寄存器ON网络1 扫描到T98时——>T98寄存器off网络2 T98寄存器OFF,所以网络2的T98永远接不通。
这只是我的个人理解,实际是不是这样运算的也没找到资料,想到了电脑CPU的缓存,是不是PLC的过程映像寄存器是一个道理。
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1328936&b_id=3&s_id=0&num=27
书上是说的没错。
经过我的消化,是这样理解的:
1、与定时器有关的指令,可以分两类,一类是使用定时数据的,另一类是操作定时器的。就象一个闹钟,读时间就是使用闹钟,拨弄闹钟就是操作。
2、使用定时器,也就是读定时器状态或定时器当前的时间值,对定时器是没有影响的,而操作定时器,则会影响定时器的状态及当前值,而且是若有影响,立即生效。所以楼主的T38,定时到时,又被立即复位了,T38=1的状态到不了下面的网络。
这是一个很微妙的东西,我们也不知道它的内部是怎么样的运算方式。
有一点我们的认识是相同的,“而操作定时器,则会影响定时器的状态及当前值”但你说的T98定时到时,又被立即复位了,这个我不能理解。
因为这和扫描也有关系,如果扫描开始时,T98=0,扫描到程序触点T97时T98计时到时,那么网络2的T98是=0还是=1?(虽然这个可能性很小),因为这时操作了定时器,那么就该=1吗?
这一点也是我没想通的,而且T98定时到时下一个扫描周期刷新状态,那扫描开始是T98=1,那T97复位,T98应该也复位,但说明书上说的是“定时器位和当前值在每个程序扫描周期的开始刷新”,那么这个定时器位怎么理解?如果是T98状态,那它应该还没刷新,应该就是T98=1因为扫描开始的时候是1,,但实际是0。也许是我转牛角尖了,但我确实没理解。
你的截图已经很明确告诉大家,各种计时器是如何刷新的。
这不是什么牛角尖,而是想尽一切可能的可能性,防止一切的意外运行。如果你的程序真有那么一下子有意外运行,而你又觉得这个可能性很少而不管,那么程序总会运行到这种状态的,这时所谓的死机出现了。
一切按照说明做。手册说什么时候刷新就什么时候刷新。假如你察觉了不plc不按照这么做,你自己必须使用程序手段,实验出来他是怎么执行的。
你上述的计时器问题,当程序扫描到计时器的时候前面的逻辑由1变0了,如果按照说明,他的计时器位不会更新,那么,你做一个程序试验他到底会0还是1。然后以后使用就用一种完全可以绕过这种灰**节的编程手法去做这个任务。
ok?
然而,手册是有提供对应的编程手法给你的。
老实说,我也没有琢磨过10毫秒计时器的这个刷新问题。我比较偏向相信手册,即使遇到上述情景,按照手册去做总是觉得很意外,总之就是,没明白的时候绕开他就是了。
操作定时器,包括使能位、直接赋定时值、R指令复位等,指令执行后立即生效,不是等到系统刷新时。
这和系统对定时器的刷新机制不冲突,也不矛盾的。
读定时状态位、当时定时值,读到的就是最新鲜的值,包括由操作定时器指令立即产生的结果。但读指令本身不会改变定时器的状态。
扫描是按行进行,这一行的结果只影响下一行,这一行的结果只受上一行或者上面最近出现过这个点的值影响。刚学PLC是看哈工大老师讲的,主要是梯形图,好像是这么讲的这么理解的。
这一行的结果,影响后面执行的所有行,也影响以后执行的所有周期。
这一行所受的,是历史上所有所的有关的行的执行结果。
影响范围怎么会只限上、下一行呢?
这一行的结果会影响后面所以程序,无双线圈的情况下。
这一行的指令条件会受这一行之前所有的有关结果的影响,包括上一周期这一行之后的计算结果。
没有你说的只影响下一行,和最近出现这个点的影响。
http://www.ad.siemens.com.cn/service/answer/solution.aspx?Q_ID=146856&cid=1029
楼主看看这个,一行程序两个M0.4
我也迷糊了,不懂了
仿真了一下,网络3的,T97换成t98的时候确实不计数,理论上不是应该接通一个扫描周期吗?
感觉每个指令弄清楚都不那么容易
这个问题总会有人经过,找找我的旧帖子,可能会帮到一点
引用详细内容:
你说的这个双线圈问题,就是受最后一个状态的影响。
理解你的意思了,你前面(哈工大那个)说的最近,我觉得应该说最后一个状态准确点。
M0.2接通
M0.4不接通就是这个道理
Q有点特别,内部的Q点和外部线路上的Q点,由于刷新机制的关系,在时间上会不同步,“双线圈”一说还有点市场。
现在M点,也来谈“双线圈”,应该是把书给读死了。
这里面用Q点和M结果是一样的,
而双线圈的定义没去仔细研究过。只是在网上找的是这样定义的:在用户程序中,同一个编程元件的线圈使用了两次或多次,称为双线圈输出。
M点不是编程元件?
PLC里的“线圈”,是从传统继电器上引过来的概念。PLC最初的目的,就是要代替继电器的功能。
这个“线圈”有没有标准定义,我也不清楚(我估计不会有,PLC只是仿真继电器,线圈是形象的叫法)。
在这里,你把Q、M点当作线圈,就按此定义:把PLC内的位变量当作线圈。
可是你想想,位变量是字节的一部分,8个线圈组成一个字节,同一个程序中若位变量不能输出两次,那包含它的字节怎么办?也不能输出(就是写啦)两次?有了这个框框,你还怎么写程序?
PLC不是继电器,可以仿继电器功能,但大部分的程序不是在仿继电器。就算是仿继电器这一部分功能,也可以突破传统继电器的概念。所以我说,“双线圈”是死读书。
你也说了线圈只是一个形象的叫法,有什么关系呢?我也没说不能输出两次,我后面那2个程序不就是输出的2次吗?对于线圈,西门子200的手册是这样解释的:
线圈
输出
输出指令(=)将新值写入输出点的过程映像寄存器。当输出指
令执行时,S7--200将输出过程映像寄存器中的位接通或者断
开。在LAD和FBD中,指定点的值等于功率流。在STL中,栈
顶的值复制到指定位。
对于线圈,双线圈大家都知道是怎么回事,就是理解和表达不一样而已,不想打了。。。。
想起了,是日系的PLC说线圈。如果斑竹用过的话,可以看看说明书,out指令是怎么说的
我开了一个双线圈的新贴,请您捧场!
我认为是定时器刷新方式不同造成的。在S7-200中1ms 定时器、10ms定时器、100ms 定时器刷新方式是不一样的。楼主换成100ms 定时器试试看看呢。在使用STEP7软件仿真我认为不妥,因为S7-300定时器刷新方式和S7-200定时器刷新方式不一样。
我觉得这里的10ms定时器用300的S5TIME来模拟不严谨,因为300的S5TIME的刷新机制和200的1ms的刷新机制是一样的。
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录