为啥这些串口通信的控件,动态创建时都有这么多的问题?老是发不出去,,,:( 问题解决后可以给300分,来者有分。 (100分)

  • 主题发起人 主题发起人 darnis
  • 开始时间 开始时间
D

darnis

Unregistered / Unconfirmed
GUEST, unregistred user!
SPCOMM, CPORT,MSCOMM ,这些我都试过了,拖上窗口时,发送接收数据都没有问题,
但是所有的在动态创建创建时,数据发送或者接收老是不正常,,请问究竟怎么回事啊?
有没有办法可以改进一下控件??
我不知道怎么下手啊,,所以想请大虾们帮帮可怜的小弟我吧,,

一定要动态创建的,因为我要把代码封装到DLL里面,给别人一下接口的。。。
 
我再踢一下,,,
今天 看来是没有人回应了,,等明天了,,我也要走了。。。
明天再说。。。
 
spcomm我试过动态创建,发送数据没有问题呀
不知道你的又没什么特殊的要求?
 
没有特殊的要求,
是要跟下位机进行通讯,,
如果我直接拖一个SPCOMM到窗口上的话,,
所有通讯都正常,,但是如果是动态创建的话,,
总是不能正常通讯。。。
 
我做工控几年了,spcom,mscom都用过,而且,都是动态创建的,使用中都没问题,所以,你应该考虑是那里代码的问题!!!
理论上,如果你在:直接拖一个SPCOMM到窗口上的话,,所有通讯都正常,
那么,动态创建就应该正常,如果有问题,通常是的创建的代码问题!
 
那我把创建的代码贴出来,,:
FSender 定义成 Private,,

FSender := TComPort.Create(nil);
FSender.OnRxChar := DoRxChar;
FSender.BaudRate := br9600;
FSender.Parity.Bits := prNone;
FSender.DataBits := dbEight;
FSender.StopBits := sbOneStopBit;

FSender.Port := 'COM1';
try
FSender.Open;
except
try
FSender.Port := 'COM2';
FSender.Open;
except
raise ECommError.Create('通讯口 COM1 和 COM2 均被占用');
end;
end;
另外需要声明的是,如果把COM1和COM2直接连起来,在同一机上调试的时候是正常的,
问题是接下位机后,就不正常,如果我是拖到窗口建立的方式,是可以正常通讯的,
但是用这个代码创建的通讯就是不正常。
 
发送数据我用的是 WriteStr。
FSender.WriteStr(AData);
AData里面是控制代码。
 
另外一点,,不小弟我刚刚开始做工控方面的,
这个算是第一个了,
请有经验的大哥哥、大姐姐们帮帮忙了。。:OO
 
你在下位机那检测到的数据是什么?有没有问题?
 
这个问题是有点奇怪,,
有些时候是通讯正常的,但是有些时候又收不到,
下位机,不是我们做的,测试什么的都不方便,,
只知道,下位机用的单片机是三菱的。
昨天我再试的时候,又成了,有时能正常通讯,有时又不能。。。
接触不良的因素可以排除在外,。。。
真搞不懂。。:OOOO

现在在两边协调做。。
 
这个问题我好象遇到过,不过是我个人疏忽造成的,原因很简单,
下位机不是你们作的,问题就出在这里。
因为你在同一台电脑中测试没有任何问题,我动态生成时也没啥问题。
下位机比如说在不停的发送 AA BB CC DD 四个字节,当上位机接收时
可能是受到的第一个字节为四个字节中的任何一个,这样给你的程序判断造成
一定难度。你应该在考虑一下把收到的数据进行处理。保证从命令头开始。
听我的没错,不要在在SPCOMM上找问题
 
谢谢常常哈。。
现在问题基本上是解决了,
我把数据直接 write 出去,就是通不了,,
后来把数据改成一个字节一个字节地发,延时 1ms,
成了,,现在可以通讯了,,看来是下位机处理上有些问题,主要是下位机的板了,
有一个又是直接就可以通,,现在他新版的,老是发不通,,折腾了我好多天,,
总算是问题解决了,,
谢谢各位哈,,常常说的话,动听些,,多给你一些分哈。。!
 
多人接受答案了。
 
后退
顶部