***********串口通讯问题***************

知足常乐 2002-07-04 03:13:45
我在做串口通讯的一个小程序,用的是SPCOM控件。
发现一个小麻烦,随机生成的模拟数据当其中的某一位是字符“0”即ASCII值48时,在发送时用一个也是用SPCOM控件做的测试程序查看接收到的数据,发现此位丢失(但是在调试器中发现此位正确)。
问题的关键是:这种现象导致了接收程序只能接收数据而不能发送数据了。
不知道是不是SPCOM控件需要设置哪些属性?
请各位大哥指教,十分感谢!
...全文
49 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
wei_wang 2002-07-08
  • 打赏
  • 举报
回复
谁能将spcomm控件的属性详细解释一下,比如replacedchar就不知道是什么?
知足常乐 2002-07-08
  • 打赏
  • 举报
回复
果然是replacedchar属性的设置问题

搞定,谢谢!
Jerry529 2002-07-08
  • 打赏
  • 举报
回复
up
知足常乐 2002-07-08
  • 打赏
  • 举报
回复
TO : lsys()

果然与 replacedchar 属性设置有关,问题解决,谢谢!
知足常乐 2002-07-08
  • 打赏
  • 举报
回复
我试试
lsys 2002-07-08
  • 打赏
  • 举报
回复
设置 replacedchar=#0
victorchen_2000 2002-07-08
  • 打赏
  • 举报
回复
www.torry.net 上有N多的控件,还有原码可以参考,基本可以拿到任何版本的delphi/bcb 用,何必用什么 spcomm?
知足常乐 2002-07-05
  • 打赏
  • 举报
回复
Thank you !
freelybird 2002-07-05
  • 打赏
  • 举报
回复
I already sent email to you. check your in-box.
Borlandor 2002-07-05
  • 打赏
  • 举报
回复
不会出现这种情况的。
我以前用过这个组件,很好用到,有源码,不过我自己修改了一下。

如下试试:
var TempStr: String;
begin
TempStr := #$BB#$01#$30#$02#$11#$13#$CC;
if FComm.Handle <> 0 then
FComm.WriteCommData(PChar(TempStr),Length(TempStr));
end;
moodboy 2002-07-05
  • 打赏
  • 举报
回复
你不多留点信息,很难帮
知足常乐 2002-07-05
  • 打赏
  • 举报
回复
请各位继续关注!

问题还没有解决啊!
njbudong 2002-07-04
  • 打赏
  • 举报
回复
up
知足常乐 2002-07-04
  • 打赏
  • 举报
回复
我现在在自己的机器上做测试的,是把COM1和COM2对接来做测试的,误码应该很少,而且发生误码的话我都有协议检查和错误处理的。

v_lucky@163.com

谢谢
freelybird 2002-07-04
  • 打赏
  • 举报
回复
1 "比如,测试程序发数据:$BB,$01,$30,$02,$11,$13,$CC
其中$30即十进制48即ASCII字符“0”,我的程序在调试器中发现$30被接收到"

这说明你已经正确收到并读取数据. 我想是否由于你对接收后的数据处理不正确所导致 字符"0"丢失. 建议仔细查查.

2 电话线是一种不可靠的物理链路. 所有由此所导致的数据丢失或出错概率是比较大的. 因此你所定义的数据帧格式应该能够提供校验. 并且你的通信程序也应该提供重传续传功能.
至于字符"0"是否能导致调制解调器不正常. 建议用"超级终端"测试. 此外, 建议你的modem的速率配制低一些,如8000band.

3 留下你的mail, 我这有一串口封装类. 发给你参考一下.
moodboy 2002-07-04
  • 打赏
  • 举报
回复
你把发送和接收的代码贴上来看看
奇怪?!
moodboy 2002-07-04
  • 打赏
  • 举报
回复
我这里什么数据都能收、发啊,奇怪!?
知足常乐 2002-07-04
  • 打赏
  • 举报
回复
freelybird(阿愚) :
1、比如,测试程序发数据:$BB,$01,$30,$02,$11,$13,$CC
其中$30即十进制48即ASCII字符“0”,我的程序在调试器中发现$30被接收到
2、当你发了一串数据其中包括$30的话,导致测试程序只能接收数据而不能发送数据,除非你关闭串口从新打开。

继续研究中。。。

谢谢关注!
freelybird 2002-07-04
  • 打赏
  • 举报
回复
1 "但是在调试器中发现此位正确" 这句话啥意思?
2 "这种现象导致了接收程序只能接收数据而不能发送数据了"
你所指的现象是: 当发送串中含有"0"时,接收端则会丢弃该字符. 如"abc0dfa", 接方时为:"abcdfa". 你上面的话何意?
3 另外直接用"超级终端"测试如何?

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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