串口问题,记录类型如何在CPORT中按记录的大小发送,如何接收?(50分)

  • 主题发起人 主题发起人 seagod007
  • 开始时间 开始时间
S

seagod007

Unregistered / Unconfirmed
GUEST, unregistred user!
我最近接了个改造项目,串口编程中定义了如下数据结构:
TDateRec = packed record
StartCode: Smallint;
DateTypeCode: Smallint;
RecordLength: Smallint;
EquipmentCode: array [0..29] of char;
AimCode: array [0..9] of char;
SerialNumber:Longint;
DateType: Shortint;
Validity: Smallint;
Hour: Shortint;
Minute: Shortint;
Second: Shortint;
Millisecond: Smallint;
Longitude: Longint;
Latitude: Longint;
Azimuth: Smallint;
Course: Smallint;
Speed: Smallint;
Warp: Smallint;
X: Longint;
Y: Longint;
Z: Smallint;
EndCode: Smallint;
end;
这是个86字节的记录,在SPCOMM上已解决收发,但是SPCOMM的实时性太差,我需要0.1秒的采样率,它达不到。
现在我准备用CPORT试试,但是CPORT的发送只能是STRING类型,将上面的数据结构以STRING的方式发出,接收
时没法划分处理。
有没有办法将这个记录在CPORT中完整的以86字节发出,能的话,接收我就好处理了。如果不能,那么该
如何发送和接收。请大家帮帮忙。
 
是TCommPortDriver控件吗?
不是只能发string的啊?
function TCommPortDriver.SendData( DataPtr: pointer; DataSize: DWORD ): DWORD;
function TCommPortDriver.SendDataEx( DataPtr: pchar; DataSize, Timeout: DWORD ): DWORD;
function TCommPortDriver.SendByte( Value: byte ): boolean;
function TCommPortDriver.SendChar( Value: char ): boolean;
function TCommPortDriver.SendString( s: string ): boolean;
function TCommPortDriver.SendZString( s: pchar ): boolean;

有这么多发送方式的。
 
发送用:comport1.write(const buffer;count:integer)
接收用:
if count>=86 then
comport1.read(var buffer;count:integer)
 
其实我已经解决了,如楼上所说的,结帖吧。
 
后退
顶部