社区
VFP
帖子详情
请教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')
...全文
315
23
打赏
收藏
请教VFP串口发送数据问题
有一串字符 6000ff60 通过MSCOMM方式,发送不成功,请高手指点: thisform.olecontrol1.settings='9600,n,8,1' thisform.olecontrol1.portopen=.t. Thisform.olecontrol1.Output=CREATEBINARY('6000ff60')
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
VFP
2,749
社区成员
29,142
社区内容
发帖
与我相关
我的任务
VFP
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
复制链接
扫一扫
分享
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章