关于MSCOMM控件往串口写数据?

wjg023 2003-08-24 11:39:37
各位老大:

我手里有一个MODEM,可以通过串口获取二进制数据,这一部分功能我已经实现;


但是我看MODEM说明书必须以十六制输入/输出,我想通过Mscomm.output往串口处写东西,

当Mscomm.output="一段字符串" 时,没有错误提示,但是缓冲区字节长度为0,

当Mscomm.output=254 时,提示说属性错误,好象不行,MSCOMM.output不接收,



MSDN 中这样描述:

Output 属性可以传输文本数据或二进制数据。用 Output 属性传输文本数据,必须定义一个包含一个字符串的 Variant。发送二进制数据,必须传递一个包含字节数组的 Variant 到 Output 属性。



于是我这样,

dim a as variant
dim bb(20) as byte

bb(1)=253
a(0)=bb(1)
msComm.output=a

本想可以成功,,,,.... 但还是以失败告终,和mscomm.output=253是一样的错误提示,没有办法了,只来MSDN找老大帮帮忙了..........

谢谢,百分相送.. .. .. ...
...全文
38 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjg023 2003-09-02
  • 打赏
  • 举报
回复
不好意思,试过以后马上结贴.......
carfield2003 2003-08-29
  • 打赏
  • 举报
回复
感兴趣
wjg023 2003-08-28
  • 打赏
  • 举报
回复
这么多人支持,真是高兴,,... 老兄说要结贴,同意,马上

to : of123
把汉字用两个Byte表示,.. .. 能不能具体一点... 我是用二进制接收的,

比如:汉字"一",我接收到的数据(用十六进制)为: 4E 00但是怎么把它分到两个Byte中呢?

比如:我定义了一个字节数组:

dim bytAA() as byte
redime bytAA(1) as byte
我应该怎样把4E 00分到数组当中呢,


小弟学浅,请指教,... ...

马上结贴,并且还另加新贴,以分相送
lovecm 2003-08-28
  • 打赏
  • 举报
回复
写串口调试吗,到龚建伟技术主页看一下吧,里面有一个串口调试成品的开发经验,对你应该有帮助,http://www.gjwtech.com/vcandc/scommassistantcode02.htm

不过VC++的,当然写的很详细,容易看懂,

不用多谢,来50分就行了... ..
Gelim 2003-08-28
  • 打赏
  • 举报
回复
假设你收到了这样的数据: 77 6A 67 30 32 33 28 B8 D5 D7 D3 29

并保存在a()中,然后b=strconv(a,unicode)

你可以自己去看看b是什么

of123 2003-08-28
  • 打赏
  • 举报
回复
发送方:
bytAA(0) = &H4E
bytAA(1) = &H0
具体实现:
strAA = Hex(strHanzi)
bytAA(0) = Val("&H" & left(strAA,2))
bytAA(1) = Val("&H" & Right(strAA,2))

接收方:
strBB = Chr(byt(0)*256 + byt(1))
wjg023 2003-08-28
  • 打赏
  • 举报
回复
兄弟们,支持一下,马上结贴... ... ...
of123 2003-08-27
  • 打赏
  • 举报
回复
不要使用Long,将汉字用两个Byte表示。以2进制方式接收后,复原成汉字。
Gelim 2003-08-27
  • 打赏
  • 举报
回复
wjg023(刚子) ,你应该揭贴了!

不管什么unicode,还是什么BIG5,GB2312等都可以的了!

dim a() as Byte
a = StrConv("你要发送的汉子!", vbFromUnicode)
With MSComm1
.CommPort = 1 '使用串口1
.Settings = "9600,N,8,1" '设置串口属性
.PortOpen = True '打开串口1
.RThreshold = 1 '串口1接收到一个字节就产生oncomm事件
.InputMode = comInputModeBinary '串口1输入为二进制模式
.InputLen = 0 '清除串口1输入缓存内容
.Output = a '发送数据
Do Until .OutBufferCount = 0
Loop '等待数据发送完毕!
End With
ftp0697 2003-08-27
  • 打赏
  • 举报
回复
你的设备支不支持中文呀!支持的话说明书上会有发送方式的!
强烈要求及时揭贴!
wjg023 2003-08-27
  • 打赏
  • 举报
回复
怎么没有人帮忙顶一下呢????????????????????????????????

救救俺...........................
wjg023 2003-08-27
  • 打赏
  • 举报
回复
谢谢这位大哥,问题今天已经解决了,但是我又出现了一个新的问题:

因为我涉及到了往端口写中文的情况,中文是Unicode的编码,如果把他们变成二进制的话已经大于Byte的范围,

这样的话,就出现了新的问题,

我考虑到把数组存成Long的形式,但是不行,mscomm.output不接收这个类型.... ...

请大家帮忙解决一下,... ... ...

Gelim 2003-08-24
  • 打赏
  • 举报
回复
首先,由于你需要和modem通讯,所以免不了需要传输一些控制字符,所以你应该选择发送二进制数据!如果你需要mscomm控件发送字节数据,就必须对mscomm进行设置。以下是一个串口测试部分,你看看可不可以,你最好能保证你的硬件OK!

dim a() as Byte
redim a(2) as Byte
a(0)=&h00: a(1)=&h01: a(2)=&h02
With MSComm1
.CommPort = 1 '使用串口1
.Settings = "9600,N,8,1" '设置串口属性
.PortOpen = True '打开串口1
.RThreshold = 1 '串口1接收到一个字节就产生oncomm事件
.InputMode = comInputModeBinary '串口1输入为二进制模式
.InputLen = 0 '清除串口1输入缓存内容
.Output = a '发送数据
Do Until .OutBufferCount = 0
Loop '等待数据发送完毕!
End With

planetike 2003-08-24
  • 打赏
  • 举报
回复
支持一下吧.
wjg023 2003-08-24
  • 打赏
  • 举报
回复
怎么没有一个人回复??????

老大,我今天加班在搞这些东东,可怜一下吧.... ... 指点一下..

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧