300分急求串口通信问题。我已发过一贴,问题没有解决,还有10天期限,帮个忙吧!

moyo 2006-03-31 10:34:30
开发环境:WIN2000+PB6.5+MSCOMM32.OCX

我把com口的2、3脚短接。从而自己发,自己收。

我碰到的问题是下面的代码在PB6.5开发环境中通过,编译后无法运行(在本机上):
窗体OPEN事件:
ole_1.object.commport="1"
ole_1.object.settings="9600,n,8,1"
ole_1.object.InputMode =1//以二进制方式检取回数据
ole_1.object.DTRenable=true //DTR 有效
ole_1.object.RTSenable=true //RTS 有效
if ole_1.object.portopen=false then
ole_1.object.portopen=true
end if

命令按钮CLICK事件:
blob b_rd
ole_1.object.output=blob(char(193))+blob(char(193))//send 0xC1 0xC1
sleep(20)
b_rd=ole_1.object.input
sle_1.text=string(asc(char(blobmid(b_rd,len(b_rd)))))

上面是测试程序的全部代码。后来我把PBL文件拷贝到一安装WINXP(PB6.5)的笔记本上,发现居然连在PB6.5开发环境下也无法运行。错误和在WIN2000下编译后运行的错误一样(Error:Non-array expected in ANY varibale)。后来我把XP下面的代码改成如下,开发环境下可以运行,但是编译后一样不行:
any tmp
ole_1.object.output=blob(char(193))+blob(char(193))//send 0xC1 0xC1
sleep(20)
tmp=ole_1.object.input
sle_1.text=string(asc(char(blobmid(blob(b_rd),len(blob(b_rd))))))

我实在是不知道该如何办了,我也搜索了坛子上的帖子。
我的项目是对maxim的ibutton(ds1991)读写数据。
...全文
329 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lbkbox 2006-04-12
  • 打赏
  • 举报
回复
我告诉你串口接收数还是一位一位接收好,这样并不慢,这样而且很好控制,我做串收发数据很多,可从来没有出再过问题。
casalina 2006-04-12
  • 打赏
  • 举报
回复
pb9+winxp+mscomm

blob b_rd
b_rd=ole_1.object.input
不论是开发环境还是编译后都没发现问题啊
moyo 2006-04-12
  • 打赏
  • 举报
回复
用string一样存在问题。
难道真的只有一个个读串口数据?这样太慢了。而且会对整个通信过程造成麻烦。譬如本来下位机可以把数据一次性上传,由于上位机不能一次性接收,那只有改变通信过程:下位机间隔一段时间上传一个数据。
当然我已经在上面回帖中解释过:只有当数据中包含0x00,才会需要这样,如果你能确保没有包含0x00,则可以接收。
xyqiqi 2006-04-11
  • 打赏
  • 举报
回复
就用string类型,不要用什么bolb
wscft 2006-04-10
  • 打赏
  • 举报
回复
楼主发给我的消息刚看到, 我那次的那个也没有做好, 很郁闷,
就着样痛失了一个兼职的项目!
lovefootball 2006-04-10
  • 打赏
  • 举报
回复
o
moyo 2006-04-10
  • 打赏
  • 举报
回复
什么API?
详细一点。谢谢!
一手软一手硬 2006-04-05
  • 打赏
  • 举报
回复
用API
lzuyh 2006-04-05
  • 打赏
  • 举报
回复
up
netspies 2006-04-03
  • 打赏
  • 举报
回复
我帮你顶
moyo 2006-04-03
  • 打赏
  • 举报
回复
谢谢楼上各位大哥。经过两天两夜的努力,这个问题有了一点眉目,下面我的代码日记:
2006-04-42
ibutton读写界面出现的问题是:
无法直接使用下面的代码:
blob b_rd
b_rd=ole_1.object.input//此代码在win2000 pb6.5的开发环境中能运行(笔记本 winXP下无法运行),可是一旦编译后都无法运行。

必须使用下面这样的代码才能从串口获取数据

blob{200} b_rd
blobedit(b_rd,1,ole_1.object.input)

但是上面的代码还是存在一个问题:
当收到的数据中含0x00后,此数据后面的所有数据也变成了0x00。因此我只能发一个,收一个。这样一来操作时间大大加长。有待优化。

我现在的理解是一旦input buffer中存在0x00后,由于0x00是null,因此后面的全强制置为0x00(null)。
当然如果我设置下面的代码可以丢弃0x00,这样就可以正常接收到后面的数据:
ole_1.object.nulldiscard=true
但是我想一般应用情况下,不允许丢弃0x00的(最起码我现在的项目绝对不允许)。

所以,现在我的问题是如何直接从串口读取一串二进制数据(该串数据中包含0x00)?

不过我感到奇怪的是,为什么你们没有碰到这个问题呢?
hygougou 2006-04-03
  • 打赏
  • 举报
回复
pb虽不支持char(0)和h00

但blob是支持的

如果是这样的话,大概只有一位一位取了
fouryears 2006-04-02
  • 打赏
  • 举报
回复
串口应先打开
TianChong 2006-04-02
  • 打赏
  • 举报
回复
你这个问题还是第一次见,没有处理过,给你以下三个建议试试:
1、在98下开发试试,或者再换一台电脑。只装PB6.5不要再装其它版本,否则可能版本间有不相容的地方.
2、你原来2000的PB环境里可以运行,说明你的代码没有问题,因为正常运行,编译后无法运行是编译过程中有些文件调用与IDE调试环境里不一样,考虑一下再将PB6.5升级到PB7看看,不要升得太高,否则很容易升级失败,并且要注意保存一份复本(备份),以防不测.切记.
3.你分别生成机器码和PBD码看看,也许有一种可运行也未必可知,一般来说编译成DLL就容易出问题,这主要还是PB编译环境出的问题,建议完成卸载所有PB版本,必要是重装系统,再重新安装单个版本的PB,我想问题一定可以解决的,问题应该不在你的代码上.

还要注意,如果你接上硬件测试的,还要保证你的硬件没有问题.
moyo 2006-03-31
  • 打赏
  • 举报
回复
另一个贴子:http://community.csdn.net/Expert/topic/4653/4653573.xml?temp=.5052606
分不够,我可以再加。谢谢了!

681

社区成员

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

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