SPCOMM的一个奇怪发送问题

yuechuan 2005-09-07 09:07:12
有一帧数据是这样的(2,3,0,0D,0,1,16,FA)
我是这样写的
setlength(temp,8);
temp[0]:=2;
temp[1]:=3;
temp[2]:=0;
temp[3]:=13;
temp[4]:=0;
temp[5]:=1;
temp[6]:=21;
temp[7]:=250;

comm1.WriteCommData(Pchar(temp),8);

可是我用SPCOMM却怎么都发不出去,后来无意中发现,如果只发7位,甚至发9位却可以发出,唯独当最后一位为一个比较大的数字的时候却发不出去,请教这是怎么回事

后来我试了试,最后一位如果不是250,而是25之类的小数字,倒是可以发出去,现在彻底迷惘了。。。

有哪位碰到过这类问题,帮我解决一下
...全文
166 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xixuemao 2005-09-07
  • 打赏
  • 举报
回复
我还是觉得也许是你的属性设置有问题。

校验位无,字节长度_8,停止位_1
yuechuan 2005-09-07
  • 打赏
  • 举报
回复
刚刚又试了试,如果用静态数组的话,还是发不出去,而且假如用静态数组,数组大小为[0..7],那么只要函数调用的时候参数大于8,也是发不出去的


大家这里手头谁也有SPCOMM啊,帮我验证一下,真要怀疑是不是组件本身有BUG了。。
何鲁青 2005-09-07
  • 打赏
  • 举报
回复
回复人: xixuemao(俺可是㊣②㈧经儿滴人) ( ) 信誉:100 2005-09-07 11:37:00 得分: 0


是不是你的ByteSize属性设置为7了?


///////这样的话,即使<127也没有办法发送出去第8位的吧!!!
确实挺奇怪的一个问题,我一开始倒是怀疑动态数组的问题,本来想建议你用一个很大长度的静态数组来试一下的,后来想想,应该也没有什么关系.
关注一下!!!
yuechuan 2005-09-07
  • 打赏
  • 举报
回复
我设置的是_8,默认值
abc3000 2005-09-07
  • 打赏
  • 举报
回复
ByteSize属性
xixuemao 2005-09-07
  • 打赏
  • 举报
回复
是不是你的ByteSize属性设置为7了?
yuechuan 2005-09-07
  • 打赏
  • 举报
回复
var temp :array of byte;

刚刚又试了试,只要里面的数字大于127(7F)就不行。。搞不懂。。
qi7 2005-09-07
  • 打赏
  • 举报
回复
temp是什么类型的?
yuechuan 2005-09-07
  • 打赏
  • 举报
回复
居然是用的串口监测软件有BUG!!晕啊。。浪费大家时间了。。
yuechuan 2005-09-07
  • 打赏
  • 举报
回复
发过来了
xixuemao 2005-09-07
  • 打赏
  • 举报
回复
晕了,你把测试demo发我邮箱里吧。

xykong@mail.bbell.com
xixuemao 2005-09-07
  • 打赏
  • 举报
回复
这个是我测试的那个
object Comm1: TComm
CommName = 'COM2'
BaudRate = 9600
ParityCheck = False
Outx_CtsFlow = False
Outx_DsrFlow = False
DtrControl = DtrEnable
DsrSensitivity = False
TxContinueOnXoff = True
Outx_XonXoffFlow = True
Inx_XonXoffFlow = True
ReplaceWhenParityError = False
IgnoreNullChar = False
RtsControl = RtsEnable
XonLimit = 500
XoffLimit = 500
ByteSize = _5
Parity = None
StopBits = _1
XonChar = #17
XoffChar = #19
ReplacedChar = #0
ReadIntervalTimeout = 100
ReadTotalTimeoutMultiplier = 0
ReadTotalTimeoutConstant = 0
WriteTotalTimeoutMultiplier = 0
WriteTotalTimeoutConstant = 0
OnReceiveData = Comm1ReceiveData
Left = 256
Top = 64
end

你完全可以把spcom控件删了,再重新放一个,用他的默认属性就可以
yuechuan 2005-09-07
  • 打赏
  • 举报
回复
object Comm1: TComm
CommName = 'COM1'
BaudRate = 9600
ParityCheck = False
Outx_CtsFlow = False
Outx_DsrFlow = False
DtrControl = DtrEnable
DsrSensitivity = False
TxContinueOnXoff = False
Outx_XonXoffFlow = False
Inx_XonXoffFlow = False
ReplaceWhenParityError = False
IgnoreNullChar = False
RtsControl = RtsEnable
XonLimit = 500
XoffLimit = 500
ByteSize = _8
Parity = None
StopBits = _1
XonChar = #17
XoffChar = #19
ReplacedChar = #0
ReadIntervalTimeout = 100
ReadTotalTimeoutMultiplier = 0
ReadTotalTimeoutConstant = 0
WriteTotalTimeoutMultiplier = 0
WriteTotalTimeoutConstant = 0
Left = 96
Top = 24


这是从DFM中抄出来的
xixuemao 2005-09-07
  • 打赏
  • 举报
回复
我刚才简单测试了一下,没有这种问题,我觉得要不你把你的代码帖上来看看。

靠,帖代码上来就是非法言论,都什么啊?CSDN到底有什么限制啊。

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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