記kepServer讀寫西門子PLC

Pater.Pan發表於2019-08-01

在程式開發過程中為了測試方法或者驗證某個屬性的值是否正確 經常通過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

 

 

可能寫的比較粗糙,望各位看官批評指正!

相關文章