記kepServer讀寫西門子PLC


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

 

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM