2016-06-10 983 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")