接口超时后程序还会继续执行嘛_答网友问:分析一段STL程序,并就如何读懂一段程序谈几点感想...
在文章《S7-300/400進(jìn)階筆記5.1:300系列PLC的裝載存儲(chǔ)器的類別及方法》一文后,有小伙伴在評(píng)論區(qū)提了個(gè)問題,駝子決定有必要寫一篇文章,和大家一起討論一下。也希望小伙伴們能向"@maintenance喬"學(xué)習(xí),有問題及時(shí)提出來,大家一起討論、一起進(jìn)步。
程序如下:
注意:原問題的紅框部分是:置位指令"S #OUT7"。由于只給了我部分程序,沒有復(fù)位"#OUT7"的指令,信號(hào)無法翻轉(zhuǎn),因此為了方便仿真測(cè)試和理解,這里將程序略作改動(dòng)。
一、相關(guān)參數(shù)說明
程序編寫在一個(gè)FC中,接口定義如下:
二、捋一捋主邏輯
其實(shí),本程序的難點(diǎn)如圖中的"紅框"所示。如果將其"注釋"掉(即在指令前面打"//",使該指令不執(zhí)行),則程序就編程簡(jiǎn)單的邏輯控制指令了,如下圖所示。
邏輯比較簡(jiǎn)單,不需要贅述了。重點(diǎn)分析一下注釋掉的判斷與跳轉(zhuǎn)指令。
三、判斷與跳轉(zhuǎn)指令
在解讀程序之前,先解釋幾個(gè)STL語句。
狀態(tài)字寄存器是一個(gè)16位的寄存器,用于存儲(chǔ)CPU執(zhí)行指令時(shí)的狀態(tài)。狀態(tài)字的某些位用于決定某些指令是否執(zhí)行和以什么方式執(zhí)行,執(zhí)行指令時(shí)可能改變狀態(tài)字中的某些位,用位邏輯指令和字邏輯指令可以訪問和檢測(cè)它們。
本程序主要用到了其中的兩位:溢出位OV和二進(jìn)制結(jié)果位BR。
(1)二進(jìn)制結(jié)果位BR
二進(jìn)制結(jié)果位BR用來表示操作結(jié)果是否正確。用戶編寫的FB、FC程序,最好對(duì)BR位進(jìn)行管理,功能塊正確執(zhí)行后,BR為1,否則為0。
(2)溢出位OV
如果算術(shù)運(yùn)算、浮點(diǎn)數(shù)比較指令執(zhí)行時(shí)出現(xiàn)錯(cuò)誤(例如溢出、非法操作和不規(guī)范的格式),溢出位被置1。如果后面的同類指令執(zhí)行結(jié)果正常,該為被清0。
本例程序中,用"OV"位來判斷整數(shù)運(yùn)算的運(yùn)算結(jié)果是否溢出。結(jié)合"SAVE"指令,在BR中保存正確的邏輯。
2、SAVE指令
SAVE指令用于將RLO存入BR中。
3、JNB指令
當(dāng)邏輯運(yùn)算結(jié)果為0時(shí),JNB就中斷線性程序掃描,并跳轉(zhuǎn)到指定的位置繼續(xù)執(zhí)行。同時(shí)將RLO位的內(nèi)容復(fù)制到BR位中。
對(duì)于該跳轉(zhuǎn)程序,當(dāng)"#temp13"為0時(shí),RLO=0,JNB指令生效,將程序跳轉(zhuǎn)到"M002"的位置,繼續(xù)執(zhí)行。同時(shí),將RLO的內(nèi)容復(fù)制到BR位中。從"M002"開始的指令,將BR的值讀出來,與后續(xù)邏輯進(jìn)行"與"運(yùn)算。
當(dāng)"#temp13"為1時(shí),JNB指令不滿足跳轉(zhuǎn)條件,程序從"L #IN3"處繼續(xù)執(zhí)行,執(zhí)行整數(shù)的加法運(yùn)算,即:
"#temp23"的值與"#IN2"做比較,也可作為"#OUT7"狀態(tài)的邏輯依據(jù)。
由于"@maintenance喬"同學(xué)只給了一段程序,沒有上下文做參考,因此,本段程序暫時(shí)不能完全解讀。但大概的邏輯是:
"#IN3"是某工藝參數(shù)的實(shí)際值,"#IN2"端是給定了其上限值,"#OUT7"用于控制某設(shè)備的啟停,當(dāng)實(shí)際值小于上限值時(shí),"#OUT7"才為1,相應(yīng)的設(shè)備方能啟動(dòng)。
四、寫在最后
由于程序不完整,最終也沒解讀出個(gè)所以然來。但駝子想通過本例表達(dá)的是:
遇到一段復(fù)雜的程序,要懂得合理的拆分它們,先從主體框架上弄懂程序想“干什么”,然后,再逐步分解每一個(gè)邏輯。精力允許的話,可以借助仿真手段,測(cè)試程序,驗(yàn)證自己的猜想。
總結(jié)
以上是生活随笔為你收集整理的接口超时后程序还会继续执行嘛_答网友问:分析一段STL程序,并就如何读懂一段程序谈几点感想...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql递归查询所有上下节点_【转】M
- 下一篇: 下qemu模拟arm9_QEMU搭建树莓