delphi 串口通信

来源:百度知道 编辑:UC知道 时间:2024/06/01 03:15:36
新手一个,看到delphi 串口 网上的程序,照着写了。然后 再外加了个虚拟串口软件仿真, write能写到串口工具中, 从串口工具里发的却收不着,也就是说 receive没能作用啊……为什么啊?
请懂得指教一下……谢谢!
receive 的程序:

procedure Tform1.Comm1ReceiveData(Sender: TObject; Buffer:
Pointer;BufferLength: Word);
var
i:integer;
begin
move(buffer^,rbuf,bufferlength);
viewstring:='';
for i:=1 to bufferlength do
viewstring:=viewstring+inttohex(rbuf[i],2)+'';
memo1.Text:=viewstring;
end;
用的是SOCOMM控件,属性没什么要设置的了吧,因为它能发了……rbuf定义的是 rbuf:array[1..60]of byte;

串口通信具体还要结合设备是否自带dll动态库的问题,某些设备内部代读取是加密的,需要通过设备厂商提供的dll动态库里提供的函数进行读取,这里只能说一下串口的操作步骤,主要还是三步:
一,是初始化端口
注:设备提供的动态库一版都带有自己的初始化函数,delphi中对于端口初始化代码如下,
var
FileHand:integer;
port:string;//端口号,可以用字符赋值,例如直接赋值:'com1',如果定义为整型则对应1
begin
FileHand:=FileOpen(port,fmOpenWrite or fmShareDenyNone);
FileClose(FileHand);
if FileHand<=0 then
begin
showmessage('设备尚未就绪,请您检查设备是否连接或者电源是否打开!');
exit;
end;
AssignFile(PosPrintFile,Trim(port));
ReWrite(PosPrintFile);
end;
二,是对端口操作,具体设备得根据其动态库提供的函数来操作;
三,关闭端口;

用什么串口控件?
可能控件的什么设置没设好?
Rbuf是数组?
中断到move(buffer^,rbuf,bufferlength);
看一下bufferlength长度是不是有??

建议使用ApdCommPort组件,Delphi下功能最强大、最稳定的通讯组件,现在已经开源了。

你发送的时候应该是用com1发送的,接收时用com2接收 绝对没问题。

SOCOMM组建的OnReceieveData赋值没有?