1

我花了几天的时间与PLC进行通信,现在我想调用read方法,奇怪的是,我得到了一个不连贯的值。

我想得到 DWord DB172.DW1 的值,第一个值代表一个数量,第二个是 0 或 1,我的语法是这样的:

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

我得到显示的消息:

12 系统.UInt16

在 DB172.DBW2 上,我得到了这个:

3073 系统.UInt16

我究竟做错了什么?谢谢

4

2 回答 2

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)

并检查数组中的值

于 2016-06-11T18:03:03.113 回答
0

非常感谢吉姆的回复,实际上,它比我想象的要复杂一些。实际上,要读取双字编号x,第一个值是通过查询DB172.DBW(2x)得到的,第二个值是通过查询DB172.DBW(2x+1)得到的所以例如读取双字编号10, 2个值是这样获得的:

Dim Value1 as byte = MyPLC.read(DB172.DBDW20")
Dim Value2 as byte = MyPLC.read(DB172.DBDW21")
于 2016-06-13T09:39:21.933 回答