81:使用定時器加自復位做一個不斷重復的計時,調用其他功能或子程序時,為何看起來工作不規律?
請注意《S7-200西門子PLC 系統手冊》中,關于三種定時器刷新規律的描述。
按這種方法使用定時器時,定時器的置位、復位可能與程序掃描周期不配合,存在造成上述問題的機制。定時比較短的定時任務應使用“定時中斷”功能,這樣更為可靠。
82:編了一個利用定時器的程序,在編譯時已經通過,為何下載到CPU中時提示出錯?
這種情況往往是調用的定時器號與定時器類型不配合造成的。參見幫助的表格,如T7只能用作TONR,而不能用于TON或TOF。
83:定時中斷(SMB34/SMB35)最長定時為255ms,如何實現更長時間的定時?
可以采用T32/T96中斷,最長時間可到32.767s。在定時中斷服務程序中對進入中斷的次數進行計數,也能實現更長時間的中斷延時。
84:定時中斷個數不夠怎么辦?
每個定時中斷服務程序不一定只能處理一項定時任務,可以把幾個任務放在一個定時中斷服務程序中。
對于定時間隔不同的任務,可以計算出它們的定時長度的最大公約數,以此作為定時中斷的時間設置。在中斷服務程序內部對中斷事件進行計數,據此編程別處理不同的任務。
85:使用子程序時,為何動作只能執行一次,或者某些狀態不能結束?
如果發生動作不能重復執行,或者狀態不能結束(像鎖死了一樣),而這些功能都與子程序有關時,請檢查是否有條件調用子程序。調用子程序的條件在上述動作執行后,或者進入某個狀態后不再有效,無法再次“激活”,而脫離上述狀態或復位的指令正好在子程序內,必然造成上述的現象。
86:帶形式參數的子程序,定義為OUT類型的變量為何會在多次調用子程序時互相干擾?
那是因為定義為OUT類型的形式參數又在子程序內部參與了運算。凡是此類參數都應當定義為IN_OUT類型。
87:與中斷服務程序有關的計算任務,為何會偶爾得出不正確的結果?
出現這種現象的原因多是在主(子)程序和中斷程序之間傳遞數據的機制不當。
中斷程序可能在任何時刻執行,如果此時主程序(或子程序)正在對中斷程序使用的數據進行操作,其中間結果可能帶入中斷程序,造成計算結果的變化;同樣地,在中斷程序中產生數據也對主(子)程序中的計算有類似影響。
88:中斷服務程序看起來沒有執行?
可以在中斷程序中加一個測試程序段,如使用SM0.0(常為“1”)將一個輸出點置位(使用Set指令),觀察是否進入中斷服務程序。中斷程序不執行,多數原因是初始化(連接中斷事件和中斷程序)的問題,或者沒有“開中斷”。應該使用SM0.1(或沿觸發)執行一次初始化,然后開中斷。
89:TP170、TP170 micro與S7-200相連接如何做“時鐘同步”?
TP170默認的時鐘格式與S7-200
西門子PLC時鐘指令所讀取的時間日期格式有所區別,讀出的時鐘需要改變格式才能與TP170等做時鐘同步。在TP170的組態軟件ProTool的在線幫助中有相關的介紹。
90:高速計數器怎樣占用輸入點?
高速計數器根據被定義的工作模式,按需要占用CPU上的數字量輸入點。每一個計數器都按其工作模式占用固定的輸入點。在某個模式下沒有用到的輸入點,仍然可以用作普通輸入點;被計數器占用的輸入點(如外部復位),在用戶程序中仍然訪問到。
91: 為什么高速計數器不能正常工作?
在程序中要使用初次掃描存儲器位SM0.1來調用HDEF指令,而且只能調用一次。如果用SM0.0調用或者第二次執行HDEF指令會引起運行錯誤,而且不能改變第一次執行HDEF指令時對計數器的設定。
92: 對高速計數器如何尋址? 為什么從SMDx中讀不出當前的計數值?
可以直接用HC0;HC1;HC2;HC3;HC4;HC5對不同的高速計數器進行尋址讀取當前值,也可以在狀態表中輸入上述地址直接監視高速計數器的當前值。SMDx不存儲當前值。
高速計數器的計數值是一個32位的有符號整數。
93: 高速計數器如何復位到0?
選用帶外部復位模式的高速計數器,當外部復位輸入點信號有效時,高速計數器復位為0 也可使用內部程序復位,即將高速計數器設定為可更新初始值,并將初始值設為0,執行HSC指令后,高數計數器即復位為0
94: 高速計數器的值在復位后是復位到初始值還是“0”值?
外部復位會將當前值復位到0值而不是初始值;內部復位則將當前值復位到初始值。如果你設定了可更新初始值,但在中斷中未給初始值特殊寄存器賦新值,則在執行HSC 指令后,它將按初始化時設定的初始值賦值。
95: 為何給高速計數器賦初始值和預置值時后不起作用,或效果出乎意料?
高速計數器可以在初始化或者運行中更改設置,如初始值、預置值。其操作步驟應當是:
1)設置控制字節的更新選項。需要更新哪個設置數據,就把控制字節中相應的控制位置位(設置為“1”);不需要改變的設置,相應的控制位就不能設置
2)然后將所需 的值送入初始值和預置值控制寄存器
3)執行HSC指令
96: 使用PTO/PWM發生器的功能應使用什么類型的CPU?
應使用24VDC晶體管輸出的CPU,繼電器輸出的絕對不行。
97: PTO或PWM輸出的幅值是多少?
PTO或PWM輸出的幅值為24V(高電平有效,共負端連接),若想實現輸出其他電壓的幅值,需自己加轉換器來實現。
98: 在PTO脈沖串執行過程中,你能否通過PLS 指令改變其周期值?
不行,必須終止PTO 輸出后才能改變周期值。
99:如何強制停止PTO 或PWM輸出?
可以通過編程將控制字節中的使能位SM66.7或SM76.7清零,然后執行PLS指令,便可立即停止PTO或PWM輸出。
100: 為何輸出信號的指示燈已亮,卻沒有良好的電壓波形輸出,或者有時丟脈沖?
PTO或PWM輸出負載最小不能低于額定負載的10%;即在輸出為高電平的狀態下,負載電流不低于140mA。