在程式開發過程中為了測試方法或者驗證某個屬性的值是否正確 經常通過Kepserver 的 OPC Quick Client來手動置點或者讀取點位
例如
這裡顯示的值都是經過轉化後得到的十進位制值,那我們如果要針對該word中的某bit 該如何讀取,?
首先理解一下最基本的概念
位:bit 最小的儲存單位,bool量, 非0則1,表達兩個狀態
位元組:byte 8位組成一個位元組 1byte=8bit
字:word 相鄰兩個位元組組成一個字 即16位 1word=2byte=16bit
雙字:double word ,兩個字組成一個雙字 即32位
注意:西門子的字是雙數開頭,不能是單數,所以在kepServer編寫tag時需要注意
例如:
西門子表達比較特殊,就是低位元組高位。高位元組低位
我們要想給置點或者讀點,我們首先要理解西門子PLC的低位高位元組是什麼意思,這裡我藉助百度知道的答案
這個圖其實已經很明白了,我們藉助下圖來簡單說明一下
這是DB83這個資料塊中的一個字的資料 一共16位 這個字的地址就是DB83.DBW10
我們在Kepserver中的tag中是這樣寫的,也就是
對比上面的高位元組低位示意圖我們把DB83.DBW10這個字展開
DBW10
dbx10.7 dbx10.6 dbx10.5 dbx10.4 dbx10.3 dbx10.2 dbx10.1 dbx10.0 | dbx11.7 dbx11.6 dbx11.5 dbx11.4 dbx11.3 dbx11.2 dbx11.1 dbx11.0
這樣的話假設DBW10的值為0,我們如果想要將dbx10.4置為1
需要給dbw10賦值 0001 0000 0000 0000
在KepServer中賦值需要將對應二進位制轉化為10進位制 在賦值
藉助計算器 我們需要將4096賦值給DBW10
開啟OPC Quick Client ,給對應tag寫值
這樣就給dbx10.4置為1了
這樣就滿足我們如何在某一個"字"中的某一"位"置點;
在某一字中讀取某一位的值,反過來就可以,
例如 我們讀取到該字的值為34257
我們想要知道dbx10.2的值是0還是1 ?
我們先把十進位制34257轉化為二進位制
1000 0101 1101 0001
對比上面DBW10展開的示意圖,dbx10.2的值為1
可能寫的比較粗糙,望各位看官批評指正!