发现一个小麻烦,随机生成的模拟数据当其中的某一位是字符“0”即ASCII值48时,在发送时用一个也是用SPCOM控件做的测试程序查看接收到的数据,发现此位丢失(但是在调试器中发现此位正确)。
问题的关键是:这种现象导致了接收程序只能接收数据而不能发送数据了。
不知道是不是SPCOM控件需要设置哪些属性?
请各位大哥指教,十分感谢!
19 个解决方案
#1
1 "但是在调试器中发现此位正确" 这句话啥意思?
2 "这种现象导致了接收程序只能接收数据而不能发送数据了"
你所指的现象是: 当发送串中含有"0"时,接收端则会丢弃该字符. 如"abc0dfa", 接方时为:"abcdfa". 你上面的话何意?
3 另外直接用"超级终端"测试如何?
2 "这种现象导致了接收程序只能接收数据而不能发送数据了"
你所指的现象是: 当发送串中含有"0"时,接收端则会丢弃该字符. 如"abc0dfa", 接方时为:"abcdfa". 你上面的话何意?
3 另外直接用"超级终端"测试如何?
#2
freelybird(阿愚) :
1、比如,测试程序发数据:$BB,$01,$30,$02,$11,$13,$CC
其中$30即十进制48即ASCII字符“0”,我的程序在调试器中发现$30被接收到
2、当你发了一串数据其中包括$30的话,导致测试程序只能接收数据而不能发送数据,除非你关闭串口从新打开。
继续研究中。。。
谢谢关注!
1、比如,测试程序发数据:$BB,$01,$30,$02,$11,$13,$CC
其中$30即十进制48即ASCII字符“0”,我的程序在调试器中发现$30被接收到
2、当你发了一串数据其中包括$30的话,导致测试程序只能接收数据而不能发送数据,除非你关闭串口从新打开。
继续研究中。。。
谢谢关注!
#3
我这里什么数据都能收、发啊,奇怪!?
#4
你把发送和接收的代码贴上来看看
奇怪?!
奇怪?!
#5
1 "比如,测试程序发数据:$BB,$01,$30,$02,$11,$13,$CC
其中$30即十进制48即ASCII字符“0”,我的程序在调试器中发现$30被接收到"
这说明你已经正确收到并读取数据. 我想是否由于你对接收后的数据处理不正确所导致 字符"0"丢失. 建议仔细查查.
2 电话线是一种不可靠的物理链路. 所有由此所导致的数据丢失或出错概率是比较大的. 因此你所定义的数据帧格式应该能够提供校验. 并且你的通信程序也应该提供重传续传功能.
至于字符"0"是否能导致调制解调器不正常. 建议用"超级终端"测试. 此外, 建议你的modem的速率配制低一些,如8000band.
3 留下你的mail, 我这有一串口封装类. 发给你参考一下.
其中$30即十进制48即ASCII字符“0”,我的程序在调试器中发现$30被接收到"
这说明你已经正确收到并读取数据. 我想是否由于你对接收后的数据处理不正确所导致 字符"0"丢失. 建议仔细查查.
2 电话线是一种不可靠的物理链路. 所有由此所导致的数据丢失或出错概率是比较大的. 因此你所定义的数据帧格式应该能够提供校验. 并且你的通信程序也应该提供重传续传功能.
至于字符"0"是否能导致调制解调器不正常. 建议用"超级终端"测试. 此外, 建议你的modem的速率配制低一些,如8000band.
3 留下你的mail, 我这有一串口封装类. 发给你参考一下.
#6
我现在在自己的机器上做测试的,是把COM1和COM2对接来做测试的,误码应该很少,而且发生误码的话我都有协议检查和错误处理的。
v_lucky@163.com
谢谢
v_lucky@163.com
谢谢
#7
up
#8
I already sent email to you. check your in-box.
#9
Thank you !
#10
请各位继续关注!
问题还没有解决啊!
问题还没有解决啊!
#11
你不多留点信息,很难帮
#12
不会出现这种情况的。
我以前用过这个组件,很好用到,有源码,不过我自己修改了一下。
如下试试:
var TempStr: String;
begin
TempStr := #$BB#$01#$30#$02#$11#$13#$CC;
if FComm.Handle <> 0 then
FComm.WriteCommData(PChar(TempStr),Length(TempStr));
end;
我以前用过这个组件,很好用到,有源码,不过我自己修改了一下。
如下试试:
var TempStr: String;
begin
TempStr := #$BB#$01#$30#$02#$11#$13#$CC;
if FComm.Handle <> 0 then
FComm.WriteCommData(PChar(TempStr),Length(TempStr));
end;
#13
www.torry.net 上有N多的控件,还有原码可以参考,基本可以拿到任何版本的delphi/bcb 用,何必用什么 spcomm?
#14
设置 replacedchar=#0
#15
我试试
#16
TO : lsys()
果然与 replacedchar 属性设置有关,问题解决,谢谢!
果然与 replacedchar 属性设置有关,问题解决,谢谢!
#17
up
#18
果然是replacedchar属性的设置问题
搞定,谢谢!
搞定,谢谢!
#19
谁能将spcomm控件的属性详细解释一下,比如replacedchar就不知道是什么?
#20
#1
1 "但是在调试器中发现此位正确" 这句话啥意思?
2 "这种现象导致了接收程序只能接收数据而不能发送数据了"
你所指的现象是: 当发送串中含有"0"时,接收端则会丢弃该字符. 如"abc0dfa", 接方时为:"abcdfa". 你上面的话何意?
3 另外直接用"超级终端"测试如何?
2 "这种现象导致了接收程序只能接收数据而不能发送数据了"
你所指的现象是: 当发送串中含有"0"时,接收端则会丢弃该字符. 如"abc0dfa", 接方时为:"abcdfa". 你上面的话何意?
3 另外直接用"超级终端"测试如何?
#2
freelybird(阿愚) :
1、比如,测试程序发数据:$BB,$01,$30,$02,$11,$13,$CC
其中$30即十进制48即ASCII字符“0”,我的程序在调试器中发现$30被接收到
2、当你发了一串数据其中包括$30的话,导致测试程序只能接收数据而不能发送数据,除非你关闭串口从新打开。
继续研究中。。。
谢谢关注!
1、比如,测试程序发数据:$BB,$01,$30,$02,$11,$13,$CC
其中$30即十进制48即ASCII字符“0”,我的程序在调试器中发现$30被接收到
2、当你发了一串数据其中包括$30的话,导致测试程序只能接收数据而不能发送数据,除非你关闭串口从新打开。
继续研究中。。。
谢谢关注!
#3
我这里什么数据都能收、发啊,奇怪!?
#4
你把发送和接收的代码贴上来看看
奇怪?!
奇怪?!
#5
1 "比如,测试程序发数据:$BB,$01,$30,$02,$11,$13,$CC
其中$30即十进制48即ASCII字符“0”,我的程序在调试器中发现$30被接收到"
这说明你已经正确收到并读取数据. 我想是否由于你对接收后的数据处理不正确所导致 字符"0"丢失. 建议仔细查查.
2 电话线是一种不可靠的物理链路. 所有由此所导致的数据丢失或出错概率是比较大的. 因此你所定义的数据帧格式应该能够提供校验. 并且你的通信程序也应该提供重传续传功能.
至于字符"0"是否能导致调制解调器不正常. 建议用"超级终端"测试. 此外, 建议你的modem的速率配制低一些,如8000band.
3 留下你的mail, 我这有一串口封装类. 发给你参考一下.
其中$30即十进制48即ASCII字符“0”,我的程序在调试器中发现$30被接收到"
这说明你已经正确收到并读取数据. 我想是否由于你对接收后的数据处理不正确所导致 字符"0"丢失. 建议仔细查查.
2 电话线是一种不可靠的物理链路. 所有由此所导致的数据丢失或出错概率是比较大的. 因此你所定义的数据帧格式应该能够提供校验. 并且你的通信程序也应该提供重传续传功能.
至于字符"0"是否能导致调制解调器不正常. 建议用"超级终端"测试. 此外, 建议你的modem的速率配制低一些,如8000band.
3 留下你的mail, 我这有一串口封装类. 发给你参考一下.
#6
我现在在自己的机器上做测试的,是把COM1和COM2对接来做测试的,误码应该很少,而且发生误码的话我都有协议检查和错误处理的。
v_lucky@163.com
谢谢
v_lucky@163.com
谢谢
#7
up
#8
I already sent email to you. check your in-box.
#9
Thank you !
#10
请各位继续关注!
问题还没有解决啊!
问题还没有解决啊!
#11
你不多留点信息,很难帮
#12
不会出现这种情况的。
我以前用过这个组件,很好用到,有源码,不过我自己修改了一下。
如下试试:
var TempStr: String;
begin
TempStr := #$BB#$01#$30#$02#$11#$13#$CC;
if FComm.Handle <> 0 then
FComm.WriteCommData(PChar(TempStr),Length(TempStr));
end;
我以前用过这个组件,很好用到,有源码,不过我自己修改了一下。
如下试试:
var TempStr: String;
begin
TempStr := #$BB#$01#$30#$02#$11#$13#$CC;
if FComm.Handle <> 0 then
FComm.WriteCommData(PChar(TempStr),Length(TempStr));
end;
#13
www.torry.net 上有N多的控件,还有原码可以参考,基本可以拿到任何版本的delphi/bcb 用,何必用什么 spcomm?
#14
设置 replacedchar=#0
#15
我试试
#16
TO : lsys()
果然与 replacedchar 属性设置有关,问题解决,谢谢!
果然与 replacedchar 属性设置有关,问题解决,谢谢!
#17
up
#18
果然是replacedchar属性的设置问题
搞定,谢谢!
搞定,谢谢!
#19
谁能将spcomm控件的属性详细解释一下,比如replacedchar就不知道是什么?