操作定時(shí)器,包括使能位、直接賦定時(shí)值、r指令復(fù)位等,指令執(zhí)行后立即生效,不是等到系統(tǒng)刷新時(shí)。
這和系統(tǒng)對(duì)定時(shí)器的刷新機(jī)制不沖突,也不矛盾的。
讀定時(shí)狀態(tài)位、當(dāng)時(shí)定時(shí)值,讀到的就是最新鮮的值,包括由操作定時(shí)器指令立即產(chǎn)生的結(jié)果。但讀指令本身不會(huì)改變定時(shí)器的狀態(tài)。
前幾天看到一個(gè)提問(wèn)是這樣的
問(wèn)為什么c0不計(jì)數(shù)?而把網(wǎng)絡(luò)1和網(wǎng)絡(luò)2交換就可以了?
這個(gè)問(wèn)題對(duì)于新手來(lái)說(shuō)是一個(gè)很容易犯的錯(cuò)誤,我自己也犯過(guò)同樣的錯(cuò)誤。那是因?yàn)槭謨?cè)中有段話把我誤導(dǎo)了,也是自己對(duì)它理解不夠。
就是這個(gè)程序,我的想法是i0.0是按鈕,按下q0.0接通,在按下q0.0斷開,可實(shí)際q0.0根本不會(huì)接通。
那么問(wèn)題來(lái)了,手冊(cè)中這樣說(shuō)的
我的程序應(yīng)該i0.0上升沿時(shí)q0.0置位,但要等到掃描完時(shí)才會(huì)輸出q0.0,那么網(wǎng)絡(luò)2的i0.0上升沿后面q0.0就應(yīng)該為off,那么就不會(huì)復(fù)位,下次按下i0.0時(shí)q0.0復(fù)位。應(yīng)該沒問(wèn)題啊。
而第一個(gè)程序是這樣的,說(shuō)明書上說(shuō)
10ms定時(shí)器在掃描開始時(shí)刷新,那么當(dāng)t98 on的那一個(gè)掃描周期計(jì)數(shù)器就應(yīng)該計(jì)數(shù)啊。難道說(shuō)明書有問(wèn)題?
后來(lái)自己仔細(xì)研究才明白,cpu執(zhí)行程序時(shí)用的是過(guò)程映像寄存器中的值,q0.0那個(gè)程序就好理解了,置位q0.0后,寄存器中q0.0已經(jīng)on了,掃描網(wǎng)絡(luò)2的時(shí)候讀取寄存器中q0.0 ——>on,所以i0.0上升沿——>on,q0.0——>0n,所以q0.0被復(fù)位,q0.0輸出off。
那定時(shí)器這個(gè)呢?我在想cpu讀取的應(yīng)該也是寄存器中的值而不是定時(shí)器的實(shí)際地址,所以
實(shí)際就是掃描開始
讀取t98實(shí)際地址傳送給t98寄存器——>t98寄存器on
網(wǎng)絡(luò)1 掃描到t98時(shí)——>t98寄存器off
網(wǎng)絡(luò)2 t98寄存器off,
所以網(wǎng)絡(luò)2的t98永遠(yuǎn)接不通。
這只是我的個(gè)人理解,實(shí)際是不是這樣運(yùn)算的也沒找到資料,想到了電腦cpu的緩存,是不是plc的過(guò)程映像寄存器是一個(gè)道理。
經(jīng)過(guò)我的消化,是這樣理解的:
1、與定時(shí)器有關(guān)的指令,可以分兩類,一類是使用定時(shí)數(shù)據(jù)的,另一類是操作定時(shí)器的。就象一個(gè)鬧鐘,讀時(shí)間就是使用鬧鐘,撥弄鬧鐘就是操作。
2、使用定時(shí)器,也就是讀定時(shí)器狀態(tài)或定時(shí)器當(dāng)前的時(shí)間值,對(duì)定時(shí)器是沒有影響的,而操作定時(shí)器,則會(huì)影響定時(shí)器的狀態(tài)及當(dāng)前值,而且是若有影響,立即生效。所以t38,定時(shí)到時(shí),又被立即復(fù)位了,t38=1的狀態(tài)到不了下面的網(wǎng)絡(luò)。