与串口通讯有关 ( 积分: 50 )

  • 主题发起人 主题发起人 zhangqingyun200
  • 开始时间 开始时间
Z

zhangqingyun200

Unregistered / Unconfirmed
GUEST, unregistred user!
通讯协议
通讯设置:波特率1200-9600,8个数据位,1个停止位,无奇偶校验位.
1. 仪表发送给车道计算机的数据:
◆空闲码:F0H AXH EOH (每间隔5秒发一次)
X=轮轴仪故障,光幕故障,0称台故障(四位二进制数)
◆车开首次上称台:F0H BBH E0H(发一次)
用于计算机抓拍车牌号
◆实时数据:开始标志+序号+车道号+超载标志+车型+实际载重总重量+实际超限率+车速+总轴距+轴数1+轴型1+轴重1+…+轴数N+轴型N+轴重N+校验和+结束标志
◆恢复数据: 开始标志+序号+车道号+超载标志+车型+实际载重总重量+实际超限率+车速+总轴距+轴数+轴型1+轴重1+轴型N+轴重 N+金额+年+月+日+时+分+秒+校验和 +结束标志
2.车道计算机发送给仪表的数据
◆正确回送:当接收正确后,计算机给仪表回送F0H,仪表接收到F0H后,表示本次数据发送成功,视通讯正常
◆错误回送:当接收错误时,计算机给仪表回送F1H,仪表重新发送该数据,连续发送3次都不能收到正确回送码视通讯中断,显示’error’.
3.称重仪数据保存与恢复
◆保存数据:当通讯中断时,仪表保存最后8辆车的数据.
◆恢复数据:当通讯正常时,若有保存车辆数据,在没有实时车辆数据发送时,应将该保存数据发送给车道计算机.
其中:
◇ 开始标志:实时数据(F0H);恢复数据(E0H)
◇ 序号:车辆通过的顺序号.1字节(2位BCD)从1-99循环使用.
◇ 车道号:1字节(2位BCD)车道号1,2,3,4….
◇ 超载标志:1字节(2位BCD)1-超重,0-不超重
◇ 车型: 1字节(2位BCD)车型20 21 22 23…90 10 11 12 13
◇ 实际超载率(N%);
2字节(4位BCD)
◇ 车速:2字节 (4位BCD)车速KM/H(整数位)
◇ 总轴距:3字节(6位BCD)MM
◇ 轴数: 1字节(2位BCD)
◇ 轴型: 1字节(2位BCD)
◇ 轴重: 3字节(6位BCD)KG
◇ 金额:2字节(4位BCD)
◇ 时间:年、月、日、时、分、秒各为1字节(2位BCD)
◇ 结束标志:E0H
校验和:从开始标志到轴重N所有字节的累计和, 1字节(2位BCD)溢出部分舍弃.(二进制和最后一字节,转BCD码最后两位)


轴数为2接收到数据:F0 11 01 01 02 40 33 02 04 01 06 00 08 58 01 02 01 20 22 01 02 20 11 01 96 E0

F0 11 01 01 02 40 33 02 04 01 06 00 08 58 01 02 01 20 22 01
(1) (2) (3)(4) (5) (6) (7) (8) (9) (10) (11) (12)

02 20 11 01 96 E0
(13) (14) (15) (16)
总重23340
1轴12220
2轴11120
实时数据:开始标志(1)
序号(2)
车道号(3)
超载标志(4)
车型(5)
总重(6)
超载率(7)
车速(8)
总轴距(9)
轴数2(10)
轴型1(11)
轴重1(12)
轴型2(13)
轴重2(14)
校验和(15)
结束标志(16)

用SPCOMM只处理如何取数据将实际的总重,轴数,轴1重,轴2重实际数据取出来写入数据库中
 
啥意思哦!只通讯吗
 
不知道楼主想问什么
 
你把收到的数据按照协议取出来,然后转换成十进制就可以了,至于串口通讯的部分你当然要会的,否则,先去研究串口通讯的问题,其实这个协议不复杂的
 
spcomm不稳写,还是用VB的稳定些~
 
晕, 将收到的数据照协议自己解析呀
难道你认为 spcomm有这个能力给你解析出 总重,轴数?
 
怎么取数据呀,用什么函数呀,能说的具体吗
 
maze78你好
你能帮帮我吗?有报酬呀
 
在线等待..............
快救救我呀
 
按照协议一个字节一个字节处理就行了。把需要的数据存入数据库,很简单的
 
SPCOMM的属性、方法和事件

1.属性

●CommName:表示 COM1、 COM2等串口的名字;

●BaudRate:根据实际需要设定的波特率,在串口打开后也可更改此值,实际波特率随之更改;

●ParityCheck:表示是否需要奇偶校验;

●ByteSize:根据实际情况设定的字节长度;

●Parity:奇偶校验位;

●StopBits:停止位;

●SendDataEmpty:这是一个布尔型属性,为 true时表示发送缓存为空,或者发送队列里没有信息;为 false时表示发送缓存不为空,或者发送队列里有信息。

2.方法

●Startcomm方法用于打开串口,当打开失败时通常会报错。错误主要有 7种:⑴串口已经打开;⑵打开串口错误;⑶文件句柄不是通信句柄;⑷不能够安装通信缓存;⑸不能产生事件;⑹不能产生读进程;⑺不能产生写进程;

●StopComm方法用于关闭串口,没有返回值;

●WriteCommData(pDataToWrite: PChar;dwSizeofDataToWrite:Word )方法是个带有布尔型返回值的函数,用于将一个字符串发送到写进程,发送成功返回 true,发送失败返回 false。执行此函数将立即得到返回值,发送操作随后执行。该函数有两个参数,其中 pDataToWrite是要发送的字符串, dwSizeofDataToWrite是发送字符串的长度。

3.事件

●OnReceiveData :procedure (Sender: TObject;Buffer: Pointer;BufferLength: Word) of object

当有数据输入缓存时将触发该事件,在这里可以对从串口收到的数据进行处理。 Buffer中是收到的数据, BufferLength是收到的数据长度。

●OnReceiveError : procedure(Sender: TObject;
EventMask : DWORD)

当接收数据出现错误时将触发该事件。

SPCOMM的使用

下面是一个利用 SPCOMM控件的串口通信的例子。

以实现 PC机与单片机 8051之间的通信为例,首先要调通它们之间的握手信号。假定它们之间的通信协议是: PC到 8051一帧数据 6个字节, 8051到 PC一帧数据也为 6个字节。当 PC发出( F0,01,FF,FF,01,F0)后 8051能收到一帧( F0,01,FF,FF,01,F0),表示数据通信握手成功,两者之间就可以按照协议相互传输数据。

创建一个新的工程 COMM.DPR,把窗体的 NAME属性定为 FCOMM,把窗体的标题定义为测试通信,按照图 2添加控件 (图 2中黑色矩形围住的控件即为 COMM1)。



图 2

1.设定 COMM1属性:

●波特率: 4800;

●奇偶校验位:无;

●字节长度: 8;

●停止位: 1;

●串口: COM1。

Memo1中将显示发送和接收的数据。将新的窗体存储为 Comm.pas。

2.编写源代码

//变量说明

var

fcomm: TFCOMM;


viewstring:string;


i:integer;


rbuf,sbuf:array[16] of byte;


//打开串口

procedure TFCOMM.FormShow(Sender: TObject);


begin


comm1.StartComm;


end;



//关闭串口

procedure TFCOMM.FormClose(Sender: TObject;
var Action: TCloseAction);


begin


comm1.StopComm;


end;



//自定义发送数据过程

procedure senddata;


var

i:integer;


commflg:boolean;


begin


viewstring:=‘’ ;


commflg:=true;


for i:=1 to 6do


begin


if not fcomm.comm1.writecommdata(@sbuf,1) then


begin


commflg:=false;


break;


end;



//发送时字节间的延时

sleep(2);


viewstring:=viewstring+ inttohex(sbuf,2)+‘’ ;
end;



viewstring:=‘发送’+ viewstring;


fcomm.memo1.lines.add(viewstring);


fcomm.memo1.lines.add(‘’ );


if not commflg then
messagedlg(‘发送失败 !’ ,mterror,[mbyes],0);


end;



//发送按钮的点击事件

procedure TFCOMM.Btn_sendClick(Sender: TObject);


begin


sbuf[1]:=byte($ f0);
//帧头

sbuf[2]:=byte($ 01);
//命令号

sbuf[3]:=byte($ ff);


sbuf[4]:=byte($ ff);


sbuf[5]:=byte($ 01);


sbuf[6]:=byte($ f0);
//帧尾

senddata;//调用发送函数

end;



//接收过程

procedure TFCOMM.Comm1ReceiveData(Sender: TObject;
Buffer: Pointer;BufferLength: Word);


var

i:integer;


begin


viewstring:=‘’ ;


move(buffer^,pchar(@rbuf^),bufferlength);


for i:=1 to bufferlengthdo


viewstring:=viewstring+ inttohex(rbuf,2)+‘’ ;


viewstring:=‘接收’+ viewstring;


memo1.lines.add(viewstring);


memo1.lines.add(‘’ );


end;



如果 memo1上显示发送 F0 01 FF FF 01 F0和接收到 F0 01 FF FF 01 F0,这表示串口已正确地发送出数据并正确地接收到数据,则串口通信成功。
先学习一下吧!
 
//接收数据
procedure TFrm_main.Comm1ReceiveData(Sender: TObject;
Buffer: Pointer;
BufferLength: Word);
var
i:integer;
sStr,sStr1,xh,cdh,czbz,cx,zz,czl,cs,zzj,zs,zx1,zz1,zx2,zz2,zx3,zz3,zx4,zz4,zx5,zz5,zx6,zz6,zx7,zz7,zx8,zz8:string;
ixh:integer;
icdh:integer;
iczbz:integer;
icx:integer;
izz:integer;
iczl:integer;
ics:integer;
izzj:integer;
izs:integer;
izx1:integer;
izz1:integer;
izx2:integer;
izz2:integer;
izx3:integer;
izz3:integer;
izx4:integer;
izz4:integer;
izx5:integer;
izz5:integer;
izx6:integer;
izz6:integer;
izx7:integer;
izz7:integer;
izx8:integer;
izz8:integer;
pStr:PChar;
rbuf:array[1..100] of byte;
begin

sStr:='';
sStr1:='';
sleep(100);
{ pStr:=buffer;
sStr:=string(pStr);
move(buffer^,pchar(@pStr[1])^,bufferlength);}
// SetLength(Str,BufferLength);
/////////动态叔祖
pStr:=buffer;
sStr:=string(pStr);
//sStr:=HexStrToStr((pStr));
move(buffer^,pchar(@pStr[1])^,bufferlength);
SetLength(sStr,BufferLength);
/////////动态叔祖
for i:=1 to bufferlengthdo
begin

if chr(rbuf)='E0' then

SendHex('F0H');
////////给仪表反馈F0表示正确接收
sStr:=sStr+chr(rbuf);
/////////////////取原始数据
end;

sStr:=sStr;
// memo2.lines.add(sStr);
//////////////原始数据
zz:=copy(sStr,15,2)+copy(sStr,13,2)+copy(sStr,11,2) ;
//////总重
izz:=strtoint(zz);
edit6.Text:=inttostr(izz);
czbz:=copy(sStr,7,2) ;
///////截取超载标志 (违规)
iczbz:=strtoint(czbz);
//edit16.Text:=inttostr(iczbz);
{cx:=copy(sStr,9,2) ;
///////截取车型
icx:=strtoint(cx);
edit17.Text:=inttostr(icx);
}
czl:=copy(sStr,19,2)+copy(sStr,17,2) ;
//////// 需要计算超载率
iczl:=strtoint(czl);
// edit19.Text:=inttostr(iczl);
cs:=copy(sStr,23,2)+copy(sStr,21,2) ;
//////// 车速
ics:=strtoint(cs);
edit8.Text:=inttostr(ics);
// edit20.Text:=copy(sStr,29,2)+copy(sStr,27,2)+copy(sStr,25,2) ;
zs:=copy(sStr,31,2) ;
//////// 轴数
edit1.Text:= copy(sStr,31,2) ;
//////// 轴数
// izs:=strtoint(zs);
//edit1.Text:=inttostr(izs);
// if edit1.Text='2' then

{if izs=2 then

begin

zx1:=copy(sStr,33,2) ;
/////轴型1
izx1:=strtoint(zx1);
edit21.Text:=inttostr(izx1);
zz1:=copy(sStr,40,2)+copy(sStr,37,2)+copy(sStr,35,2) ;
/////轴重1
izz1:=strtoint(zz1);
edit12.Text:=inttostr(izz1);
zx2:=copy(sStr,41,2) ;
/////轴型2
izx2:=strtoint(zx2);
edit22.Text:=inttostr(izx2);
zz2:=copy(sStr,47,2)+copy(sStr,45,2)+copy(sStr,43,2) ;
/////轴重2
izz2:=strtoint(zz2);
edit13.Text:=inttostr(izz2);
end;

if izs=3 then
/////轴数3
begin

zx1:=copy(sStr,33,2);
/////轴型1
izx1:=strtoint(zx1);
edit21.Text:=inttostr(izx1);
zz1:=copy(sStr,40,2)+copy(sStr,37,2)+copy(sStr,35,2) ;
/////轴重1
izz1:=strtoint(zz1);
edit12.Text:=inttostr(izz1);
zx2:=copy(sStr,41,2) ;
/////轴型2
izx2:=strtoint(zx2);
edit22.Text:=inttostr(izx2);
zz2:=copy(sStr,47,2)+copy(sStr,45,2)+copy(sStr,43,2) ;
/////轴重2
izz2:=strtoint(zz2);
edit13.Text:=inttostr(izz2);
zx3:=copy(sStr,49,2);
/////轴型3
izx3:=strtoint(zx3);
edit22.Text:=inttostr(izx3);
zz3:=copy(sStr,55,2)+copy(sStr,53,2)+copy(sStr,51,2) ;
/////轴重3
izz3:=strtoint(zz3);
edit13.Text:=inttostr(izz3);
end ;
if izs=4 then
//////轴数4
begin

zx1:=copy(sStr,33,2);
/////轴型1
izx1:=strtoint(zx1);
edit21.Text:=inttostr(izx1);
zz1:=copy(sStr,40,2)+copy(sStr,37,2)+copy(sStr,35,2) ;
/////轴重1
izz1:=strtoint(zz1);
edit12.Text:=inttostr(izz1);
zx2:=copy(sStr,41,2) ;
/////轴型2
izx2:=strtoint(zx2);
edit22.Text:=inttostr(izx2);
zz2:=copy(sStr,47,2)+copy(sStr,45,2)+copy(sStr,43,2) ;
/////轴重2
izz2:=strtoint(zz2);
edit13.Text:=inttostr(izz2);
zx3:=copy(sStr,49,2) ;/////轴型3
izx3:=strtoint(zx3);
edit27.Text:=inttostr(izx3);
zz3:=copy(sStr,55,2)+copy(sStr,53,2)+copy(sStr,51,2) ;
/////轴重3
izz3:=strtoint(zz3);
edit28.Text:=inttostr(izz3);
zx4:=copy(sStr,57,2) ;/////轴型4
izx4:=strtoint(zx4);
edit23.Text:=inttostr(izx4);
zz4:=copy(sStr,63,2)+copy(sStr,61,2)+copy(sStr,59,2) ;
/////轴重4
izz4:=strtoint(zz4);
edit24.Text:=inttostr(izz4);
end;

if izs=5 then
/////轴数5///////
begin

zx1:=copy(sStr,33,2);
/////轴型1
izx1:=strtoint(zx1);
edit21.Text:=inttostr(izx1);
zz1:=copy(sStr,40,2)+copy(sStr,37,2)+copy(sStr,35,2) ;
/////轴重1
izz1:=strtoint(zz1);
edit12.Text:=inttostr(izz1);
zx2:=copy(sStr,41,2) ;
/////轴型2
izx2:=strtoint(zx2);
edit22.Text:=inttostr(izx2);
zz2:=copy(sStr,47,2)+copy(sStr,45,2)+copy(sStr,43,2) ;
/////轴重2
izz2:=strtoint(zz2);
edit13.Text:=inttostr(izz2);
zx3:=copy(sStr,49,2) ;/////轴型3
izx3:=strtoint(zx3);
edit27.Text:=inttostr(izx3);
zz3:=copy(sStr,55,2)+copy(sStr,53,2)+copy(sStr,51,2) ;
/////轴重3
izz3:=strtoint(zz3);
edit28.Text:=inttostr(izz3);
zx4:=copy(sStr,57,2) ;/////轴型4
izx4:=strtoint(zx4);
edit23.Text:=inttostr(izx4);
zz4:=copy(sStr,63,2)+copy(sStr,61,2)+copy(sStr,59,2) ;
/////轴重4
izz4:=strtoint(zz4);
edit24.Text:=inttostr(izz4);
zx5:=copy(sStr,65,2) ;/////轴型5
izx5:=strtoint(zx5);
edit25.Text:=inttostr(izx5);
zz5:=copy(sStr,71,2)+copy(sStr,69,2)+copy(sStr,67,2) ;
/////轴重5
izz5:=strtoint(zz5);
edit26.Text:=inttostr(izz5);
end;

if izs=6 then
////轴重6
begin

zx1:=copy(sStr,33,2);
/////轴型1
izx1:=strtoint(zx1);
edit21.Text:=inttostr(izx1);
zz1:=copy(sStr,40,2)+copy(sStr,37,2)+copy(sStr,35,2) ;
/////轴重1
izz1:=strtoint(zz1);
edit12.Text:=inttostr(izz1);
zx2:=copy(sStr,41,2) ;
/////轴型2
izx2:=strtoint(zx2);
edit22.Text:=inttostr(izx2);
zz2:=copy(sStr,47,2)+copy(sStr,45,2)+copy(sStr,43,2) ;
/////轴重2
izz2:=strtoint(zz2);
edit13.Text:=inttostr(izz2);
zx3:=copy(sStr,49,2) ;/////轴型3
izx3:=strtoint(zx3);
edit27.Text:=inttostr(izx3);
zz3:=copy(sStr,55,2)+copy(sStr,53,2)+copy(sStr,51,2) ;
/////轴重3
izz3:=strtoint(zz3);
edit28.Text:=inttostr(izz3);
zx4:=copy(sStr,57,2) ;/////轴型4
izx4:=strtoint(zx4);
edit23.Text:=inttostr(izx4);
zz4:=copy(sStr,63,2)+copy(sStr,61,2)+copy(sStr,59,2) ;
/////轴重4
izz4:=strtoint(zz4);
edit24.Text:=inttostr(izz4);
zx5:=copy(sStr,65,2) ;/////轴型5
izx5:=strtoint(zx5);
edit25.Text:=inttostr(izx5);
zz5:=copy(sStr,71,2)+copy(sStr,69,2)+copy(sStr,67,2) ;
/////轴重5
izz5:=strtoint(zz5);
edit26.Text:=inttostr(izz5);
zx6:=copy(sStr,73,2) ;/////轴型6
izx6:=strtoint(zx6);
edit5.Text:=inttostr(izx6);
zz6:=copy(sStr,79,2)+copy(sStr,77,2)+copy(sStr,75,2) ;
/////轴重6
izz6:=strtoint(zz6);
edit10.Text:=inttostr(izz6);
end;

if izs=7 then
////轴重7
begin

zx1:=copy(sStr,33,2);
/////轴型1
izx1:=strtoint(zx1);
edit21.Text:=inttostr(izx1);
zz1:=copy(sStr,40,2)+copy(sStr,37,2)+copy(sStr,35,2) ;
/////轴重1
izz1:=strtoint(zz1);
edit12.Text:=inttostr(izz1);
zx2:=copy(sStr,41,2) ;
/////轴型2
izx2:=strtoint(zx2);
edit22.Text:=inttostr(izx2);
zz2:=copy(sStr,47,2)+copy(sStr,45,2)+copy(sStr,43,2) ;
/////轴重2
izz2:=strtoint(zz2);
edit13.Text:=inttostr(izz2);
zx3:=copy(sStr,49,2) ;/////轴型3
izx3:=strtoint(zx3);
edit27.Text:=inttostr(izx3);
zz3:=copy(sStr,55,2)+copy(sStr,53,2)+copy(sStr,51,2) ;
/////轴重3
izz3:=strtoint(zz3);
edit28.Text:=inttostr(izz3);
zx4:=copy(sStr,57,2) ;/////轴型4
izx4:=strtoint(zx4);
edit23.Text:=inttostr(izx4);
zz4:=copy(sStr,63,2)+copy(sStr,61,2)+copy(sStr,59,2) ;
/////轴重4
izz4:=strtoint(zz4);
edit24.Text:=inttostr(izz4);
zx5:=copy(sStr,65,2) ;/////轴型5
izx5:=strtoint(zx5);
edit25.Text:=inttostr(izx5);
zz5:=copy(sStr,71,2)+copy(sStr,69,2)+copy(sStr,67,2) ;
/////轴重5
izz5:=strtoint(zz5);
edit26.Text:=inttostr(izz5);
zx6:=copy(sStr,73,2) ;/////轴型6
izx6:=strtoint(zx6);
edit5.Text:=inttostr(izx6);
zz6:=copy(sStr,79,2)+copy(sStr,77,2)+copy(sStr,75,2) ;
/////轴重6
izz6:=strtoint(zz6);
edit10.Text:=inttostr(izz6);
zx7:=copy(sStr,81,2) ;/////轴型7
izx7:=strtoint(zx7);
edit29.Text:=inttostr(izx7);
zz7:=copy(sStr,87,2)+copy(sStr,85,2)+copy(sStr,83,2) ;
/////轴重7
izz7:=strtoint(zz7);
edit30.Text:=inttostr(izz7);
end;

if izs=8 then
////轴重8
begin

zx1:=copy(sStr,33,2);
/////轴型1
izx1:=strtoint(zx1);
edit21.Text:=inttostr(izx1);
zz1:=copy(sStr,40,2)+copy(sStr,37,2)+copy(sStr,35,2) ;
/////轴重1
izz1:=strtoint(zz1);
edit12.Text:=inttostr(izz1);
zx2:=copy(sStr,41,2) ;
/////轴型2
izx2:=strtoint(zx2);
edit22.Text:=inttostr(izx2);
zz2:=copy(sStr,47,2)+copy(sStr,45,2)+copy(sStr,43,2) ;
/////轴重2
izz2:=strtoint(zz2);
edit13.Text:=inttostr(izz2);
zx3:=copy(sStr,49,2) ;/////轴型3
izx3:=strtoint(zx3);
edit27.Text:=inttostr(izx3);
zz3:=copy(sStr,55,2)+copy(sStr,53,2)+copy(sStr,51,2) ;
/////轴重3
izz3:=strtoint(zz3);
edit28.Text:=inttostr(izz3);
zx4:=copy(sStr,57,2) ;/////轴型4
izx4:=strtoint(zx4);
edit23.Text:=inttostr(izx4);
zz4:=copy(sStr,63,2)+copy(sStr,61,2)+copy(sStr,59,2) ;
/////轴重4
izz4:=strtoint(zz4);
edit24.Text:=inttostr(izz4);
zx5:=copy(sStr,65,2) ;/////轴型5
izx5:=strtoint(zx5);
edit25.Text:=inttostr(izx5);
zz5:=copy(sStr,71,2)+copy(sStr,69,2)+copy(sStr,67,2) ;
/////轴重5
izz5:=strtoint(zz5);
edit26.Text:=inttostr(izz5);
zx6:=copy(sStr,73,2) ;/////轴型6
izx6:=strtoint(zx6);
edit5.Text:=inttostr(izx6);
zz6:=copy(sStr,79,2)+copy(sStr,77,2)+copy(sStr,75,2) ;
/////轴重6
izz6:=strtoint(zz6);
edit10.Text:=inttostr(izz6);
zx7:=copy(sStr,81,2) ;/////轴型7
izx7:=strtoint(zx7);
edit29.Text:=inttostr(izx7);
zz7:=copy(sStr,87,2)+copy(sStr,85,2)+copy(sStr,83,2) ;
/////轴重7
izz7:=strtoint(zz7);
edit30.Text:=inttostr(izz7);
zx8:=copy(sStr,89,2) ;/////轴型8
izx8:=strtoint(zx8);
edit31.Text:=inttostr(izx8);
zz8:=copy(sStr,95,2)+copy(sStr,93,2)+copy(sStr,91,2) ;
/////轴重8
izz8:=strtoint(zz8);
edit32.Text:=inttostr(izz8);
}
// end;


end;
 
如何检测F0 A0 E0和F0 BB E0,表示通讯正常如何向硬件反馈
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
923
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
652
import
I
后退
顶部