陳惠鑫
級(jí)別: 工控俠客
|
主程序是io,在主程序里賦值 $i[10]=ffh $i[11]=ffh $i[12]=ffh $i[13]=ffh 把所有的IO都點(diǎn)亮,然后 $i[3]=01 IOprint::main() waittime 0.1 $i[3]=00 IOprint::main() waittime 0.1 賦值01代表0位打開,賦值00代表0位關(guān)閉,同理10,11代表1位打開跟關(guān)閉,以此類推,延時(shí)0.1是因?yàn)椴谎訒r(shí)程序1秒不到就走完了,通訊處理不過來。 IOprint::main()是子程序調(diào)用,調(diào)用子程序中main程序邏輯 IOprint:首先判斷是哪一個(gè)號(hào)段的io觸發(fā)了,Y0-7,Y10-17,Y20-27,Y30-37,以此進(jìn)入相應(yīng)函數(shù) Y: if($i[3]==$i[4]) goto Y90 endif if($i[3]>=0&&$i[3]<=80) goto Y0 endif if($i[3]>=100&&$i[3]<=180) goto Y10 endif if($i[3]>=200&&$i[3]<=280) goto Y20 endif if($i[3]>=300&&$i[3]<=380) goto Y30 endif goto Y 進(jìn)入之后理解相關(guān)的程序步為什么這樣做。這是這個(gè)程序的核心,與邏輯、或邏輯的理解。 Y0: if($i[3]==01) $i[10]=$i[10]|01b //print $i[10] endif if($i[3]==100) $i[11]=$i[11]&11111110b //print $i[11] endif Y10: if($i[3]==101) $i[11]=$i[11]|01b //print $i[11] endif if($i[3]==200) $I[12]=$I[12]&11111110b //print $i[12] endif 上面先是使用了$i[3]作為位置判斷進(jìn)行調(diào)整,然后根據(jù)判斷賦值給$i[10],$i[11],$i[12],$i[13]作為Y0-Y37的輸出記錄,之所以分開是因?yàn)檫@樣做后面的io觸發(fā)不受前面的影響,而且數(shù)據(jù)的發(fā)送是FF最大,因此只能使用多個(gè)連續(xù)的寄存器替代。 PLC處理程序比較簡(jiǎn)單,這里就不描述了。。 接線就是把Y37接到X0去觸發(fā)下一次的循環(huán)。 [ 此帖被陳惠鑫在2021-08-21 12:24重新編輯 ] |
---|---|
|
陳惠鑫
級(jí)別: 工控俠客
|
視頻壓縮后比較模糊 |
---|---|
|