请教VFP串口发送数据问题

JK9481 2010-05-27 03:06:09
有一串字符 6000ff60 通过MSCOMM方式,发送不成功,请高手指点:

thisform.olecontrol1.settings='9600,n,8,1'
thisform.olecontrol1.portopen=.t.
Thisform.olecontrol1.Output=CREATEBINARY('6000ff60')
...全文
265 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
十豆三 2010-05-28
  • 打赏
  • 举报
回复
0h 表示二进制数据
0x 表示十六进制数据

你的 Olecontrl 控件,只接收二进制数据,如果不加 0h,他会自动转换成二进制数据,那样接收后还需要转换回来,所以加上 0h,控件认为是二进制数据,不用转换了,即达到了你的要求。
JK9481 2010-05-28
  • 打赏
  • 举报
回复
为什么前面要加 0H呀??
JK9481 2010-05-28
  • 打赏
  • 举报
回复
为什么关面要加 0H 呀 ??
JK9481 2010-05-28
  • 打赏
  • 举报
回复
谢谢,十豆三和都市夜猫,不加引号已经OK,电脑另一端也接收OK

现在想知道为什么6000FF60前面要加 0H,谢谢
十豆三 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jk9481 的回复:]
感谢十豆三的回复,再次请教:
我也可以这样发送:
A1='6000ff60'
Thisform.olecontrol1.Output=A1

未用CREATEBINARY( ) 函数转换,接收到的数据仍然是363030303066663630
我如果发送这串数据 363030303066663630 接收到的又是另一串数据了 3336333033303330363636363336……
[/Quote]
再不行,就把接收到的再转换回来吧。转换代码参考7楼
JK9481 2010-05-28
  • 打赏
  • 举报
回复
OK,不加引号也行
A1=0h6000ff60
Thisform.olecontrol1.Output=A1

但为什么前面要加,0H
十豆三 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jk9481 的回复:]
我是这样试的:

A1='0h6000ff60' &&加了一个引号
Thisform.olecontrol1.Output=A1

电脑另一端接收到的数据是: 6F68363030306666363
[/Quote]

不要加引号。你用的是VFP9.0吗?如果不是推荐用VFP9.0
JK9481 2010-05-28
  • 打赏
  • 举报
回复
我再用这种试试 A1 = chr(0x60)+chr(0)+chr(0xff)+chr(0x60)
JK9481 2010-05-28
  • 打赏
  • 举报
回复
我不加 引号过不了
JK9481 2010-05-28
  • 打赏
  • 举报
回复
我就是 VFP9
都市夜猫 2010-05-28
  • 打赏
  • 举报
回复
加引号意义就变了
vfp6 可能不支持 0h6000ff60 这种写法,需要 vfp9

vfp6 的话,这样试试:
A1 = chr(0x60)+chr(0)+chr(0xff)+chr(0x60)
JK9481 2010-05-28
  • 打赏
  • 举报
回复
我是这样试的:

A1='0h6000ff60' &&加了一个引号
Thisform.olecontrol1.Output=A1

电脑另一端接收到的数据是: 6F68363030306666363
JK9481 2010-05-28
  • 打赏
  • 举报
回复
好,马上试
都市夜猫 2010-05-28
  • 打赏
  • 举报
回复
试试:
A1=0h6000ff60
Thisform.olecontrol1.Output=A1
JK9481 2010-05-28
  • 打赏
  • 举报
回复
感谢十豆三的回复,再次请教:
我也可以这样发送:
A1='6000ff60'
Thisform.olecontrol1.Output=A1

未用CREATEBINARY( ) 函数转换,接收到的数据仍然是363030303066663630
我如果发送这串数据 363030303066663630 接收到的又是另一串数据了 3336333033303330363636363336333
十豆三 2010-05-28
  • 打赏
  • 举报
回复
如果要将接收到的数据还原

变量=Rtrim(Cast(0h3630303066663630 As Char(50)))



变量=Cast(0h3630303066663630 As Varchar(50))

十豆三 2010-05-28
  • 打赏
  • 举报
回复
Thisform.olecontrol1.Output=CREATEBINARY('6000ff60')

这是你的代码

这个函数 CREATEBINARY( ) 函数 的作用

将 Visual FoxPro 字符型数据转换为二进制字符型数据。您在向 ActiveX 控件或 OLE对象传递数据时需要使用二进制字符型数据。

也就是说是你转成 你的olecontrol1控件能够认识的二进制字符型数据,才发送成功的,因为你不转换,olecontrol1控制不识别,所以发送也就不成功。

你实际发的就是 363030303066663630,所以得到的肯定也是这个363030303066663630,一点没错。
JK9481 2010-05-28
  • 打赏
  • 举报
回复
哦,懂了,谢谢,非常感谢
JK9481 2010-05-27
  • 打赏
  • 举报
回复
也就是VFP是以那种格式发送的,为什么接收端接收过来是 显示的这种数据:363030303066663630
JK9481 2010-05-27
  • 打赏
  • 举报
回复
哦,谢谢十豆三
再次请教:
发送: 6000ff60
接收: 0h3630303066663630

想问一个问题: VFP是那种方式发送成 0h3630303066663630 这样的字符串的?

我现在就是发送 6000ff60 给一个控制端,控制端不认识这个?

加载更多回复(3)

2,748

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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