三菱ST語言教學(xué)(2)——數(shù)組的使用
三菱工控人微信群+VX:15961872327
三菱工控人微信群+VX:15961872327
上一篇文章介紹了ST基本指令的用法,和聲明基本數(shù)據(jù)類型的標(biāo)簽,但標(biāo)簽除了可以聲明單個(gè)的基本數(shù)據(jù),還可以聲明多個(gè)數(shù)據(jù)構(gòu)成的數(shù)組(array),也可以聲明結(jié)構(gòu)體(struct)和功能塊(function block)。本文介紹數(shù)組的使用方法。
數(shù)組的建立
什么是數(shù)組呢?就我個(gè)人理解,數(shù)組就是一組相同類型的數(shù)據(jù)構(gòu)成的列表,它可以是一組開關(guān)量,可以是數(shù)字量,也可以是結(jié)構(gòu)體,在標(biāo)準(zhǔn)的ST語言中也可以是一組功能塊(三菱不支持)。
下面聲明一個(gè)包含100個(gè)位(bit)變量的數(shù)組:

聲明數(shù)組變量
點(diǎn)擊確定后數(shù)據(jù)類型顯示“bit(0..99)”??梢钥吹?,與基本數(shù)據(jù)相比,建立數(shù)組只不過是在選擇數(shù)據(jù)類型時(shí)勾選數(shù)組對(duì)話框,并添加數(shù)量就可以了,確定后標(biāo)簽BitList代表的就是容量為100的位數(shù)組。
數(shù)組的賦值
那數(shù)組如何使用呢?先舉個(gè)簡單的例子:

圖中顯示的是對(duì)數(shù)組前10個(gè)變量直接進(jìn)行賦值,可以看到想要操作數(shù)組中的某一個(gè)變量,只要在標(biāo)簽BitList后面加上[x]就可以了,需要注意無論判斷還是賦值,x的值一定要在數(shù)組的范圍內(nèi),否則會(huì)引起PLC報(bào)錯(cuò)。
常用方法
數(shù)組強(qiáng)大的地方在于,方括號(hào)內(nèi)除了直接寫數(shù)值,還可以使用整形的數(shù)字變量,這個(gè)特性配合case或者for指令,只要幾行代碼就可以實(shí)現(xiàn)多個(gè)變量同時(shí)操作。例如:建立一個(gè)容量為1000的字(word)數(shù)組,第一個(gè)元素為0,后面每一個(gè)元素都比前一個(gè)大3:

多變量按規(guī)則賦值
這段程序看起來很少,但是弄清楚工作的原理還是要稍微費(fèi)點(diǎn)時(shí)間的,數(shù)字量ii由1數(shù)到999共999次(省略by就默認(rèn)增量為1)。
當(dāng)ii=1時(shí),執(zhí)行一次WordList[1]:=WordList[0]+3,WordList[0]并沒有進(jìn)行操作默認(rèn)值為0,WordList[1]=0+3=3;
當(dāng)ii=2時(shí),執(zhí)行一次WordList[2]:=WordList[1]+3,WordList[2]=3+3=6;
。。。
。。。
當(dāng)ii=999時(shí),執(zhí)行一次WordList[999]:=WordList[998]+3,WordList[999]=2994+3=2997;
仿真執(zhí)行一次,監(jiān)看數(shù)組WordList,驗(yàn)證是否這個(gè)操作是否被正確的執(zhí)行:

仿真運(yùn)行+監(jiān)看變量
可以看到,結(jié)果跟前面分析的一直,僅用3行程序完成了1000個(gè)變量賦值的任務(wù)目標(biāo)。
拓展
數(shù)組除了賦值還可以進(jìn)行搜索判斷,我們可以在上面的基礎(chǔ)上加大一下難度:分析上面的數(shù)組,將值是5的倍數(shù)的數(shù)組號(hào)依次存入新數(shù)組NumbList,由NumbList[1]開始存,并將數(shù)量存入NumbList[0]。

結(jié)果如圖,共有200個(gè),分別是0,5,10,15...。
在原來的for循環(huán)后面增加了新的for循環(huán),由0至999遍歷上面生成的整個(gè)WordList數(shù)組,使數(shù)組中的每一個(gè)元素與5做除余(MOD為除余指令,前面的變量除以后面的變量取余數(shù)),將余數(shù)放入一個(gè)臨時(shí)變量里面,然后判斷這個(gè)這個(gè)余數(shù)是否為0,為0則值是5的倍數(shù),在1000次循環(huán)中,每次遇到余數(shù)為0時(shí),NumbList[0]的值自身加1,并將它作為數(shù)組NumbList的組號(hào)記錄當(dāng)前判斷WordList的組號(hào)。兩個(gè)循環(huán)的外面增加了執(zhí)行條件,目的是讓循環(huán)只執(zhí)行一個(gè)周期,保證NumbList[0]的值是正確的。