我用WINCC读电参数测量仪送来的参数(串口),如何以十六进制显示?如何对各种参数分离,如何提取电压,电流,功率等?电参数测量仪的串行数据格式为:每个参数由5个字节组成,前4个字节表示尾数,后一个字节表示介码,数据格式采用科学记忆法:小数点在第一个BCD码之后.例:1.2345678×10的4次方,其浮点数为12345678.44 接受字节次序为:78,56,34,12,44哪位大虾子能给点指教啊;越详细越好!跪求!
提问者:小仙女
疑问1:1.2345678×10的4次方怎么会等于12345678.44呢?
疑问2:是否为小数点位置固定,共传送5个字节,假设依次为&H78、&H56、&H34、&H12、&H44,最后根据这5个字节转换为12345678.44?
对了,似乎WinCC不支持二进制接收(InputMode=1),也就是说不能使用BYTE数组来读取接收内容,但这在VB中是完全支持的,不知道你试的结果如何??
dim ABuffer()
ReDim ABuffer(MSComm1.InBufferCount)
ABuffer = MSComm1.Input '到这报错,提示类型不匹配
因此你首先要解决的就是这个问题,一是改用VB与仪表通讯,再通过OLE向WinCC传递数值。二是使用字符方式接收,通过VDS.DLL组件(下载地址:http://support.microsoft.com/kb/250344/en-us)转换。
补充:找答案的互动性不强,你这个问题放到论坛里边讨论比较好一些,不过那里的老大肯定会建议你用VB或做成控件再进行调用,^_^
Sub OnComm(Byval Item)
'On Error Resume Next
HMIRuntime.Trace "OnComm...." & CStr(Now())& vbCrLf
If item.CommEvent=2 Then
Dim intInputLen
intInputLen = item.InBufferCount
If intInputLen<1 Then Exit Sub
Dim ADS
Set ADS = CreateObject("ADs.ArrayConvert")
Dim CharV,OctV,HexV
CharV=Item.Input
HMIRuntime.Trace "CharV is :" & CStr(CharV) & vbCrLf
OctV=ads.CvStr2vOctetStr(CharV)
HMIRuntime.Trace "OctV is :" & CStr(OctV) & vbCrLf
HexV=ads.CvOctetStr2vHexStr(OctV)
HMIRuntime.Trace "HexV is :" & CStr(HexV) & vbCrLf '#这是转换为16进制的字符串,应该与你发送的内容是一致的。
End If
End Sub
比如你发送的5个字节内容为78 56 34 12 44,则HexV为7856341244,最后根据这个字符串转换为12345678.44。顺便帮你再写一个,不过需要你自己去完善:
If Len(HexV)=10 Then
Dim str(4),strFloat
str(0)=Mid(HexV,7,2)
str(1)=Mid(HexV,5,2)
str(2)=Mid(HexV,3,2)
str(3)=Mid(HexV,1,2)
str(4)=Mid(HexV,9,2)
strFloat=str(0)&str(1)&str(2)&str(3)&"."&str(4)
HMIRuntime.Trace "strFloat is :" & CStr(strFloat) & vbCrLf
Dim vFloat
vFloat=CDbl(strFloat)
HMIRuntime.Trace "vFloat is :" & CStr(vFloat) & vbCrLf
End If
-------------------------
将RThreshold设为5试试。