VB接收到PLC的十六进制码如何转为10进制码?-PLC技术网(www.plcjs.com)-可编程控制器技术门户


VB接收到PLC的十六进制码如何转为10进制码?

(点击题目可以在互联网中搜索该题目的相关内容)
日期:2006-5-15 23:38:36     来源:   作者: 点击:
点击【】,可以选择字体的大小,以便你阅读.

VB接收到PLC的十六进制码如何转为10进制码?
 
   大家好!本人最近使用VB6.0的MSCCOM控件与PLC通讯,PLC送过来的数据在PC端均显示为16进制数,如何把它转为十进制数呢?我前段时间也看过类似问题的贴子,现在我也遇到此问题,希望VB高手提供脚本程序?在此多谢大家了!急!!!

以下是对《VB接收到PLC的十六进制码如何转为10进制码?》的回复:  
匿名回复:
    设s是待转换的16进制/8进制数或字串:
  16进制HEX -> 10进制DEC:
  Val("&H" & s)
  8进制OCT -> 10进制DEC:
  Val("&O" & s)
匿名回复:
    那反过来,如果我想把十进制数转换为十六进制或八进制数呢?
  请问在VB中怎么做?有没有现成的函数?请教各位!
匿名回复:
    那反过来,如果我想把十进制数转换为十六进制或八进制数呢?
  请问在VB中怎么做?有没有现成的函数?请教各位!
匿名回复:
    Hex(s)和Oct(s)
匿名回复:
    知道了。
  谢谢你,关公!
匿名回复:
    非常感谢关公和hustsup两位先生的贴子,但我在按关公先生的方法试着搞时,又遇到问题,首先我在此交代一下,如我接收的字据是不确定的,我在脚本程序中把所有的数据(不管长度)经过转换均放在buf中,然后在TextBox控件中显示出来,显示脚本程序为:txtReceive.Text=buf,然后我可以把接收到的字数已按16进制显示出来了,如接收到的数为:C1,B0,B9,B9,B9,B8,8D;然后我按关公的提示在脚本程序中加了如下的脚本程序:
  txtVal=Val("&h"&buf);
  然后txtReceive.Text=buf改为
  txtReceive.Text=txtVal;(注此处由原来buf改为txtVal)
  然后其它不变.
  编译执行之后提示实时错误为:溢出,并指出错误在增加的句子处,即:txtVal=Val("&h"&buf)错误!
  请问关公你所教的方法是不是只是一个单独数据可转换,太多了则会溢出,应当怎么增加脚本程序呢?
  希望能得到关公大哥的指点,在此多谢了!
  
匿名回复:
    用Val()函数变换一个大于Long型的16进制数时会产生溢出。
  如:Val("&H" & "C1B0B9B9B9B88D") 时产生溢出;
  但如:Val("&H" & "C1,B0,B9,B9,B9,B8,8D") 时,由于逗点的分隔,它在遇到第一个非16进制字符时就结束,其结果只是第一个数得到变换,因此它不会溢出。
  以上方法都不能把各个数据分离出来,正确的方法是用对应类型和下标量的数组,多次变换对应装入。
  或仍用一个字符串变量逐个进行:数制变换->加分隔符->串接.
  
匿名回复:
    还请注意:FX-PLC总是返回以字节为单位的16进制字串,用它表示位元件时不会有问题,但如果它表示的是字元件的值,是成对出现且低字节在前,高字节在后的。如返回"C1B0"是D0的值的话,应理解为:D0 = B0C1h = 45249。
  同理如“12345678”是某个双字元件的值时,则应理解为:78563412h。
匿名回复:
    非常感谢关大哥的贴子,我一早就上来看你的贴子,无奈小女子才疏学浅,对VB不是很熟,所以按你的方法东撞西撞还是不得要领.对了,原来我这程序是用来跟PLC通讯的,但现在是跟一个仪表通讯,所以读出来的数是长短不一的,这样好不好,我把接收的全部程序放在贴子里,烦关大哥帮忙一下如何,如修改好之后可发邮件到:LLL_Lenny@163.com给我,接收的程序如下:
  Private Sub Comm1_OnComm()
  Select Case Comm1.CommEvent
  Case comEvCD
  Case comEvCTS
  Case comEvDSR
  Case comEvRing
  Case comEvReceive
  Dim i%, Buf$
  Buf = ""
  InByte = Comm1.Input
  For i = LBound(InByte) To UBound(InByte)
  Buf = Buf + Hex(InByte(i)) + Chr(13) & Chr(10)
  Next i
  txtReceive.Text = Buf
  Case comEvSend
  End Select
  End Sub
  我是利用了MSCOMM控件的OnComm事件之CommEvent属性来触发接收,其中InByte在前面有局部声明:Dim InByte() As Byte
  请关大哥帮忙修改如何?小女子在此多谢了.
匿名回复:

本新闻共3页,当前在第11 2  3  

上一篇: S7-200_与S7300的以太网通讯设置
下一: 基于EPP-CAN接口卡的蓄电池组智能化成检测系统