SPCOMM控件能否用com4,com5端口? ( 积分: 100 )

  • 主题发起人 主题发起人 黑夜沉淀
  • 开始时间 开始时间

黑夜沉淀

Unregistered / Unconfirmed
GUEST, unregistred user!
1)spcomm控件究竟是否有bug?怎么我打不开com4和com5端口。我想实现usb转串口的功能,需要用到com4,com5端口。
2)打开端口出错处理该怎么写?
麻烦大家帮忙,最近为这个spcomm的都郁闷惨了,拜托了。
 
1)spcomm控件究竟是否有bug?怎么我打不开com4和com5端口。我想实现usb转串口的功能,需要用到com4,com5端口。
2)打开端口出错处理该怎么写?
麻烦大家帮忙,最近为这个spcomm的都郁闷惨了,拜托了。
 
可以呀.我的SPCOMM可以打开COM5,我就是用USBTO232的.
 
用API函数吧
 
我用SPCOMM可以从COM1开到COM255
SPCOMM以前有一个BUG是在WIN2000下开不了COM10以上的端口,和你的情况还是不太一样
再换一种USB转串口的线试试吧,也许是驱动的问题
 
spcomm打开 4, 5 端口是没问题的 可以肯定

找找其他原因吧
最好是找错误帖出来 大家研究
 
前几天查了一些说,spcomm打不开com2以上的端口,是因为源代码有bug,你们能不能传一份你们的源代码给我,谢谢了!
错误就是出在comm1.StartComm语句上,错误类型是‘Error opening serial port’。
 
我用的是xp的系统,驱动是在网上下的,好像是2000的版本,还比较旧了的。如果你们有驱动的话可否也传一份给我。Email:dnvxov@163.com谢谢
 
我发了一份我现在用的SPComm给你 是传说中的3.0
.pas文件中标为 3.0
readme.txt还是2.5的

不过这些都无谓 至今我用的很好 还没发现有什么问题 你可以试一下

另外 cnpack 中有spcomm的汉化版 而且加入了设置对话框 如果有兴趣你也可以试试
不过在cnpack中不叫spcomm了 改成什么名 我记不清了
 
另外 你应该确认一下 你开发用机上的USB版本是多少的 是否已经与usdto232的要求一致
 
Reesinx,麻烦你看一下信箱,给你发了Email了。谢谢。
 
应该是USB->232的转换器不好的,
有很多设备,用计算机直接的232可以通讯,但是用转换就不可以
 
SPCOMM可以从COM1开到COM255
但要补充说明:大于10的端口:应该是
//./COM10的格式
 
不知道在用comm3,comm4端口的时候,你们有没有出现这样的问题——没有打开串口的时候,对方发送数据过来,然后在打开串口,竟然会讲刚刚接收的到的数据显示出来。按我的理解是没有打开串口,怎么能接收到数据呢?请问的理解是不是错了?
 
转帖,希望有用

SPCOMM RS-232多线程控件例子:现时DELPHI上有很多串行口控件,SPCOMM控件有Data Bits、Parity、 Stop Bits 等配置,支持 Read/Write 时序控制 (Timing control)、 ReadIntervalTimeout、 WriteIntervalTimout 等 ,支持 DTR/DSR, RTS/CTS 硬件流程控置及 Xon/Xoff 软件流程控置,是目前比较完善的控件。 以下是一个用RS-232进行数据接收、显示的例子。必须将RS232的通信参数设置好才能正确接收数据。(Data Bits,Parity,Stop Bits,COM口参数)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, SPComm;
type
TForm1 = class(TForm)
Comm1: TComm;
Memo1: TMemo;
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
s: string;
begin
SetLength(S, BufferLength); //接收RS232的数据并显示Memo1上。
Move(Buffer^, PChar(S)^, BufferLength);
Memo1.Lines.Add(S);
Memo1.Invalidate;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Comm1.startcomm;//创建窗体时,将comm1控件打开。
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;//关闭窗体时,将comm1控件关闭。
end;
end.
 
不过spcomm有几个bug,不知你改了吗?
如有些usb模拟的串口,spcomm不支持。
//下面是改後的代码
procedure TComm.StartComm;
var
hNewCommFile: THandle;
begin
// Are we already doing comm?
if (hCommFile <> 0) then
raise ECommsError.Create('This serial port already opened');

hNewCommFile :=
CreateFile(PChar('//./' + FCommName),/////这里
 
无泪,谢谢你,那个bug已经改了,你给的那段代码解决不了上面的问题,不过还是很谢谢你,^_^
 
不知道在用comm3,comm4端口的时候,你们有没有出现这样的问题——没有打开串口的时候,对方发送数据过来,然后再打开串口,竟然会将刚刚对方发送的数据显示出来。测试了一下,关闭串口的时候,是没有执行Comm1ReceiveData,但是紧接着打开串口,对方没有发送数据,竟然执行了Comm1ReceiveData。把对方在关闭串口时发的数据显示出来了。这究竟是什么回事?有没有人帮帮我,就只有这个问题在折磨我了,呜呜呜。
 
这个可能是USB转换线有缓存吧
试试一打开串口就清一下接收区行不行
 
spcomm控件要怎么清除接收区?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
977
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部