西门子stl语言指令_STEP7项目的JL跳转指令你会用吗?
引言:
昨天測(cè)試一個(gè)PDF文檔中的STL程序,照著錄入后,竟然在程序保存的時(shí)候就出錯(cuò)了,不能保存!研究了一下發(fā)現(xiàn)是JL指令的使用造成的,所以今天寫篇文章來(lái)聊一下,STEP7項(xiàng)目STL編程中的JL 跳轉(zhuǎn)指令。
正文:
在STEP7軟件STL語(yǔ)言編程中,跳轉(zhuǎn)指令是屬于邏輯控制指令的,除了LOOP循環(huán)指令外,其他的邏輯控制指令都是跳轉(zhuǎn)指令。跳轉(zhuǎn)指令基本可以分為4類,而這個(gè)JL指令是比較特殊的一個(gè),所以今天來(lái)講一下。
先來(lái)看一下JL指令引起的錯(cuò)誤吧:
FC1中因?yàn)镴L指令保存時(shí)候提示有錯(cuò)誤
首先說(shuō)一句,這個(gè)程序是不嚴(yán)謹(jǐn)?shù)?#xff0c;這里只用來(lái)說(shuō)明報(bào)錯(cuò)問題,大家不要糾結(jié)!圖中有JC指令和JL指令,為何我說(shuō)不能保存的錯(cuò)誤是JL指令造成的呢?
先來(lái)說(shuō)一下這個(gè)JC指令,這個(gè)指令是根據(jù)上一條指令產(chǎn)生的邏輯運(yùn)算結(jié)果(RLO)來(lái)判斷是否跳轉(zhuǎn)的,整數(shù)比較指令(>=I)條件成立的時(shí)候就會(huì)使?fàn)顟B(tài)字的RLO=1進(jìn)而去激活JC跳轉(zhuǎn)指令。
再來(lái)說(shuō)一下JL指令,JL指令就是跳轉(zhuǎn)到標(biāo)號(hào)指令,但是JC指令也是跳轉(zhuǎn)到標(biāo)號(hào)指令(循環(huán)跳轉(zhuǎn)指令的標(biāo)號(hào)標(biāo)簽大家可以視為是一樣的,其實(shí)我個(gè)人更習(xí)慣叫標(biāo)簽,但是今天這個(gè)編程手冊(cè)上寫的標(biāo)號(hào))。
那么JC和JL有何不同呢?最大的不同就是JL跳轉(zhuǎn)指令其實(shí)是有一個(gè)跳轉(zhuǎn)列表的,或者說(shuō)叫跳轉(zhuǎn)目標(biāo)列表!這個(gè)目標(biāo)列表最大允許包含256個(gè)條目,意思是可以跳轉(zhuǎn)到0-255個(gè)標(biāo)號(hào)(標(biāo)簽)處。
之前圖片上的錯(cuò)誤是“跳轉(zhuǎn)分配器:可能丟失的跳轉(zhuǎn)目標(biāo)之前存在非法語(yǔ)句。”我在STEP7的幫助文件中搜索“跳轉(zhuǎn)分配器”沒有搜索到結(jié)果,但是我在一些相關(guān)的資料上介紹JL指令的時(shí)候也有提到“跳轉(zhuǎn)分配器”這個(gè)詞,而且我把JL指令比如修改成JU無(wú)條件跳轉(zhuǎn)指令就沒有再報(bào)錯(cuò)了,我就不上傳圖片了。--基于這2點(diǎn),我才說(shuō)程序不能保存是因?yàn)镴L指令造成的,我后續(xù)的說(shuō)明中大家會(huì)了解,這里確實(shí)是JL指令用法錯(cuò)誤!大家可以把這個(gè)當(dāng)作一個(gè)經(jīng)驗(yàn),以后如果遇到同樣的“跳轉(zhuǎn)分配器”錯(cuò)誤造成程序不能保存,應(yīng)該首先去查看一下JL指令是不是不該用,或者說(shuō)用錯(cuò)了。
錯(cuò)誤的原因分析完了,還是來(lái)看一下這個(gè)JL指令的用法:
JL指令的應(yīng)用舉例1
這是我在OB1中寫的一段程序,上部分程序最終是為了控制MB0的,下部分就是JL跳轉(zhuǎn)指令和JU配合使用時(shí)候,相當(dāng)于JU指令處產(chǎn)生了一個(gè)清單,MB0的值控制訪問這個(gè)清單中的哪個(gè)項(xiàng)目。
下邊來(lái)看一下該程序的運(yùn)行監(jiān)控圖:
JL指令的應(yīng)用舉例1的監(jiān)控圖1
這個(gè)圖片中可以看出MW20=111時(shí),MB0=0,程序跳轉(zhuǎn)到boy0處,把20傳遞給了MD4。其他的數(shù)值也都好理解,我就不再?gòu)?fù)述了,來(lái)說(shuō)一下MW20=0的時(shí)候,也就是程序剛剛下載到CPU中后,為何MB0=3 ? 原因是MW20=0的時(shí)候,程序上半部分沒有一處跳轉(zhuǎn)都順序執(zhí)行下來(lái),最后是把3裝入了MB0中,故MB0=3就使得JU程序跳轉(zhuǎn)到boy3處,MD4=50。
JL指令的應(yīng)用舉例1的監(jiān)控圖2
這個(gè)圖片MW20=333和444繼而跳轉(zhuǎn)到對(duì)應(yīng)的標(biāo)號(hào)處。程序看明白后,就再來(lái)強(qiáng)調(diào)一些知識(shí)點(diǎn),幫助文件強(qiáng)調(diào)“跳轉(zhuǎn)目標(biāo)指令列表必須包含JU指令”,這里再次強(qiáng)調(diào)了列表,所以JL指令可以換一種說(shuō)法,就是JL指令是跳轉(zhuǎn)到與之配合的JU指令列表的一種跳轉(zhuǎn)指令,應(yīng)該說(shuō)這樣描述才更完整!
同時(shí)可以看出JL指令是不受任何狀態(tài)字或者位的控制的。JL跳轉(zhuǎn)指令和LOOP指令一樣,都只能在一個(gè)塊里邊跳轉(zhuǎn),且跳轉(zhuǎn)的標(biāo)號(hào)(標(biāo)簽)比如boy3,西門子規(guī)定只能是4個(gè)字符,且首字符必須是字母,還區(qū)分大小寫!--這是一些常規(guī)的要求。
用法和一些規(guī)定說(shuō)完后,為了加深大家的印象,再來(lái)看一個(gè)程序:
JL指令的應(yīng)用舉例2
這個(gè)程序是我把之前程序的上半部分刪除,MB0也不用了,直接用L 2把2裝入了ACCU1中,可以看到MD4=40, 就表示程序執(zhí)行了boy2這個(gè)標(biāo)簽行的程序。我用斷點(diǎn)調(diào)試的方法,監(jiān)測(cè)程序也是直接從L 2這行跳轉(zhuǎn)到JU boy2這行程序的。所以說(shuō),MB0也不是必須,但是如果沒有MB0,那么此時(shí)ACCU1-L中的值,就是將要跳轉(zhuǎn)到的清單的條目號(hào)。不過,為了調(diào)試時(shí)候更直觀,這里還是建議使用一個(gè)變量來(lái)存儲(chǔ)ACCU1-L中的值。
至此,程序不能保存報(bào)錯(cuò)的原因解釋了,JL配合JU使用的方法和一些規(guī)定也解釋了,相信本文能讓大家對(duì)JL指令有一些更深入的認(rèn)識(shí),能夠幫到小伙伴們是我的榮幸,感謝閱讀!
如果覺得本文對(duì)您有用,請(qǐng)關(guān)注+收藏。如果有問題,請(qǐng)關(guān)注+留言,我會(huì)第一時(shí)間回復(fù),謝謝!
總結(jié)
以上是生活随笔為你收集整理的西门子stl语言指令_STEP7项目的JL跳转指令你会用吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 请求的站点不可用或找不到_公厕再不是“找
- 下一篇: 如何设置jinternalframe无边