我的客户显示屏是Giga1011,更改代码如下:
function Inti_Port(
strCom:string;
nBaudRate,
nByteSize,
nStopBits:integer):Thandle;
var
dcb :TDCB;
hComm :Thandle;
comtimeout :TCommTimeouts;
nWrited:LongWord;
begin
result:= 0;
hComm :=CreateFile(pchar(strCom),GENERIC_READ+GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if(hComm = INVALID_HANDLE_VALUE) then
begin
Application.MessageBox(PChar(strCom+'通讯口已被占用或损坏!'),'错误',64);
exit;
end;
comtimeout. ReadIntervalTimeout := MAXDWORD;
comtimeout. ReadTotalTimeoutConstant := 1000;
comtimeout. ReadTotalTimeoutMultiplier := 0;
comtimeout.WriteTotalTimeoutConstant := 0;
comtimeout.WriteTotalTimeoutMultiplier := 0;
SetCommTimeouts(hComm,comtimeout);
//超时时间
if(strCom='COM1')
or(strCom='COM2')
or(strCom='COM3')
or(strCom='COM4') then
begin
dcb.DCBlength:=sizeof(DCB);
GetCommState(hComm,dcb);
//取通讯口原参数
dcb.BaudRate :=nBaudRate;
//波特率
dcb.ByteSize :=nByteSize;
//数据位
dcb.Parity :=NOPARITY;
//奇偶校验位
dcb.StopBits :=nStopBits;
//停止位
SetCommState(hComm,dcb);
//设定通讯口参数
EscapeCommFunction(hComm,SETDTR);
end;
WriteFile(hComm,char(27)+'@',2,nWrited,nil);
result := hComm;
end;
function PrintTo1011(
hPort:Thandle;
szPrintstring:string):LongWord;
var
nSize :LongWord;
nWrited:LongWord;
Outbuffer: array [0..15] of char;
i:integer;
begin
WriteFile(hPort,char(12)+char(0),1,nWrited,nil);
nSize :=length(szPrintstring);
//指令ESC QA为设置显示字串d1 d2 d3 d4 d5 d6…dn CR
//ASCII 形式:ESC QA d1 d2 d3 d4 d5 d6…dn C R
//十进制形式:[027][081][065]d1d2d3..dn[013]
//十六进制形式:[1Bh][51h][41h]d1d2d3..dn[0Dh]{20h≤dn≤5fh}
//描述:设置显示字串模式,显示d1,d2….dn{1≤n≤11}用"清除显示屏和清除字串模式"命令或"清除光标行"命令取消显示字串模式。
Outbuffer[0] := char(27);
Outbuffer[1] := char(81);
Outbuffer[2] := char(65);
for i:=1 to nSize do
begin
Outbuffer[i+2] := szPrintstring;
end;
Outbuffer[nsize+3] := char(13);
Outbuffer[nsize+4] := char(0);
if(WriteFile(hPort,Outbuffer,nSize+3,nWrited,nil) = true) then
begin
FlushFileBuffers(hPort);
end;
result := nWrited;
end;
procedure TForm_Main.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
if(ComHandle <> 0) then
CloseHandle(ComHandle);
Action := caFree;
end;
procedure TForm_Main.FormShow(Sender: TObject);
begin
if(ComHandle <> 0) then
CloseHandle(ComHandle);
ComHandle := Inti_Port('COM1', 9600,8,1);
if(ComHandle <> 0) then
begin
PrintTo1011(ComHandle, '200210010');
end;
end;
另外Giga1011的说明如下:
Giga1011 LED顾客显示屏
功能
□显示屏可旋转角度及变换高度
□标准RS-232C通讯接口,固定通讯速率9600bps
□简单命令集控制的多功能数据显示方式
□可选显示屏高度
性能
1) 显示方式:LED
2) 字符数:11字符
3) 显示颜色:绿色
ESC Q A 发送字符显示字
ESC Q C 发送状态显示字
ESC @ 初始化显示屏
CLR 清除显示屏的所有字符
命令详细说明
ESC Q A 发送字符显示字
十进制码 [27] [81] [65] d1d2..dn [13] 20h<=dn<=5Fh
十六进制码 [1B] [51] [43] d1d2..dn [0D] 1<=n<=11
描述 发送d1d2..dn字符到显示屏上显示,所建立的字符显示方式,只能用CLR命令改变。
ESC Q C 发送状态显示字
十进制码 [27] [81] [67] d1d2..dn [13] 30h<=dn<=31h
十六进制码 [1B] [51] [43] d1d2..dn [0D] 1<=n<=5
描述 发送d1d2..dn状态字到显示屏上显示,所建立的状
态字符显示方式,只能用CLR命令改变。
ESC @ 初始化显示屏
十进制码 [27] [64]
十六进制码 [1B] [40]
描述 象重新插拔一样清除显示屏和显示缓冲区的数据。
CLR 清除显示屏的所有字符
十进制码 [12]
十六进制码 [0C]
描述 清除显示屏上所有字符及字符显示方式。