S
shameboy
Unregistered / Unconfirmed
GUEST, unregistred user!
我用spcomm写了一个串口通讯系统.
当我设置ReadInterval=1时.在我的机子运行得很顺畅.但在别人的机子上却收不到任何数据.
当我设置ReadInterval=50,在我的机子运行有点问题(在调试模式下提示内存报错),不过还是能接收数据.运行久一点就会这样.而在别人机子上也是如此.
当我设置ReadInterval=100,在我机子上运行.马上提示内存报错.在别人机子上运行也是不行,一样报错.
可是也有别的系统,一样设置100却在我或别人的机子上运行得很好.为什么.我把代码贴出来.高手们请指教一下.
我发数据是这样:发C000000000000000,下位机则发连续10个类似"50123456789EF123"这样的数据包给我.我等到判断10个收完.才继续发C000000000000000.
这是我的接收数据过程=======================================================
procedure TServer_Form.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
rcv_s: string;
i: integer;
rbuf: array[0..7] of byte;
r_ms: p_ms_command;
begin
iBegin :=GetTickCount;
rcv_s := '';
fillchar(rbuf, 8, 0);
move(buffer^, rbuf, bufferlength);
if BufferLength <> 8 then
begin
Comm1.StopComm;
sleep(100);
Comm1.StartComm; //再次重发数据.
if not canwriteData then
SendMessage(Server_Form.Handle,WM_MYRESENDORWRITEDATAMS, 1,0);
end
else
begin
for i := 0 to 7 do
rcv_s := rcv_s + inttohex(rbuf, 2);
if ErrorRectData(rcv_s) then{手动,定时}
begin
if (not CanWriteData) then
SendMessage(Server_Form.Handle,WM_MYRESENDORWRITEDATAMS, 1,0);
end
else
begin
new(r_ms);
r_ms^.p1 := rcv_s;
if canwritedata then//读状态时
r_ms^.p2 :=1;
SendMessage(Server_Form.Handle, WM_MYCHECKRECEIVEDATAMS, Integer(r_ms), 0);
end;
end;
end;
当我设置ReadInterval=1时.在我的机子运行得很顺畅.但在别人的机子上却收不到任何数据.
当我设置ReadInterval=50,在我的机子运行有点问题(在调试模式下提示内存报错),不过还是能接收数据.运行久一点就会这样.而在别人机子上也是如此.
当我设置ReadInterval=100,在我机子上运行.马上提示内存报错.在别人机子上运行也是不行,一样报错.
可是也有别的系统,一样设置100却在我或别人的机子上运行得很好.为什么.我把代码贴出来.高手们请指教一下.
我发数据是这样:发C000000000000000,下位机则发连续10个类似"50123456789EF123"这样的数据包给我.我等到判断10个收完.才继续发C000000000000000.
这是我的接收数据过程=======================================================
procedure TServer_Form.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
rcv_s: string;
i: integer;
rbuf: array[0..7] of byte;
r_ms: p_ms_command;
begin
iBegin :=GetTickCount;
rcv_s := '';
fillchar(rbuf, 8, 0);
move(buffer^, rbuf, bufferlength);
if BufferLength <> 8 then
begin
Comm1.StopComm;
sleep(100);
Comm1.StartComm; //再次重发数据.
if not canwriteData then
SendMessage(Server_Form.Handle,WM_MYRESENDORWRITEDATAMS, 1,0);
end
else
begin
for i := 0 to 7 do
rcv_s := rcv_s + inttohex(rbuf, 2);
if ErrorRectData(rcv_s) then{手动,定时}
begin
if (not CanWriteData) then
SendMessage(Server_Form.Handle,WM_MYRESENDORWRITEDATAMS, 1,0);
end
else
begin
new(r_ms);
r_ms^.p1 := rcv_s;
if canwritedata then//读状态时
r_ms^.p2 :=1;
SendMessage(Server_Form.Handle, WM_MYCHECKRECEIVEDATAMS, Integer(r_ms), 0);
end;
end;
end;