WinCC腳本對變量位讀寫
?
有時候在項目里面需要對一個變量的位進行操作,比如為了節(jié)省授權(quán),一個無符號32位的變量可以節(jié)省31個BOOL類型的變量,我項目做的比較少,其他時候應(yīng)該也有這樣的需求,這里分別就用C和VBS腳本對變量的每一位的操作介紹一下。
在VBS腳本腳本里面,“AND”即有邏輯與運算的功能,也有對變量進行按位與運算,“OR”即有邏輯或運算的功能,也能對變量進行按位或運算,字面意思就能分辨。在C腳本里面的是按位與運算“&”;按位或運算是“|”。
當(dāng)對一個變量的某一位操作的時候,需要注意不能影響其他位的狀態(tài),根據(jù)邏輯運算可以知道,和TRUE進行邏輯運算,結(jié)果是不變的,和False進行或運算,結(jié)果也是不會發(fā)生改變的,所以不管VBS還是C腳本,對位操作都是這個思路,想對一個變量的某一位置1的時候,就進行按位或運算,該位是1,其他位都是0,對變量的某一位置0的時候,進行按位與運算,該位是0,其他位是1,舉個例子,在VBS腳本里面對一個8位無符號的變量的第4位(0位開始),分別進行置1和置0的腳本如下:
'對第4位置1
Dim BIT
Set BIT = HMIRuntime.Tags("8BIT")
BIT.Write BIT.Read Or 16
'下面是對第4位置0
Dim BIT
Set BIT = HMIRuntime.Tags("8BIT")
BIT.Write BIT.Read And &HEF
C腳本里面對第7位置1和置0如下:
// 下面是對第7位置1,去除了WinCC里面的注釋
#define TAG "8BIT"
SetTagByte(TAG,(BYTE)(GetTagByte(TAG) | 0x80));
// 下面是對第7位置0
// WINCC:TAGNAME_SECTION_START
// syntax: #define TagNameInAction "DMTagName"
#define TAG "8BIT"
// next TagID : 1
// WINCC:TAGNAME_SECTION_END
// WINCC:PICNAME_SECTION_START
// syntax: #define PicNameInAction "PictureName"
// next PicID : 1
// WINCC:PICNAME_SECTION_END
SetTagByte(TAG,(BYTE)(GetTagByte(TAG) & 0x7F));
上面是對變量的寫操作,那還有對變量的讀操作,下面以WinCC8.0為例,我個人認(rèn)為常用的4中方法分別說明一下。
忘了哪個版本新增的動畫組態(tài)功能,有點類似博途組態(tài)動畫的操作,組態(tài)的大題過程看圖里面的箭頭

再就是WinCC所有版本里面都有的直接動態(tài)對話框組態(tài),看附圖

VBS腳本,這次以圖片的形式顯示吧

C腳本,也是用圖片顯示

如果只是一般的狀態(tài)顯示,推薦第一種或者第二種,除非腳本還有別的功能,要不然不推薦腳本,一個畫面里面腳本多了,會影響運行速度的。最后是動圖演示,呃,那個變量名寫錯了,本來是想用32位的,結(jié)果做畫面的時候32位實在太麻煩了,所以變量名就改成了8BIT:

PS:
做這種有技術(shù)性的內(nèi)容,還是比較麻煩的,需要做畫面,然后測試,測試沒問題了,再寫出來,最后做動圖了才發(fā)現(xiàn)變量名稱沒改,不想再弄了,就這樣吧
祝賀已超 1 萬工控人加入 PLC 工業(yè)自動化精 英群
祝賀已超 1 萬工控人加入 PLC 工業(yè)自動化精 英群