2016-06-10 975 views
1

我花了幾天的時間與PLC通信,現在我想調用read方法,奇怪的是,我得到了一個不連貫的值。使用S7.Net庫讀取數據錯誤結果

我想獲得該DWORD DB172.DW1值,所述第一值表示的量,第二個是0或1,我的語法是這樣的:

Dim result as Object = MyPLC.read(「DB172.DBW1″) 
MsgBox(result.ToString & 」 」 & result.GetType.ToString) 

我獲得作爲顯示的消息:

12 System.UInt16形式

在DB172.DBW2,我得到這一個:

3073 System.UInt16形式

我在做什麼錯?謝謝

+0

MyPLC方法有什麼用途? – DrDonut

+0

我的不好,我沒有複製我的代碼,我實際上正在調用讀取方法 – romulus001

+0

在這種情況下,它看起來像你的值是12和3073,變量類型是UInt16,這是有道理的,因爲在西門子PLC中,意味着2個字節。那麼,吉姆說什麼...... – DrDonut

回答

0

它看起來像MyPLC返回System.UInt16,這是兩個字節。十六進制值12是C,3073是C01。看起來MyPLC(「DB172.DBW1″)只是將高位字節返回到System.UInt16值,MyPLC(「DB172.DBW2″)返回兩個值。你可以試試:

Dim u1 As System.UInt16 = MyPLC("DB172.DBW1") 
Dim b1() As Byte = BitConverter.GetBytes(u1) 


Dim u2 As System.UInt16 = MyPLC("DB172.DBW2") 
Dim b2() As Byte = BitConverter.GetBytes(u2) 

和檢驗值在陣列

0

非常感謝吉姆您的回覆,實際上,這是一個稍微複雜一些比我想象的。 實際上,要讀取DWord號x,第一個值是通過查詢DB172.DBW(2x)獲得的,第二個值是通過查詢DB172.DBW(2x + 1) 獲得的。因此,例如,要讀取DWord號10,這兩個值是這樣獲得的:

Dim Value1 as byte = MyPLC.read(DB172.DBDW20") 
Dim Value2 as byte = MyPLC.read(DB172.DBDW21")