Windows CE 6 장치 (Motorola MC3100 스캐너 터미널)를 프로그래밍 중입니다. Lazarus FPC를 사용하여 컴파일하기.Windows CE 프로그래밍 직렬 포트 - 왜곡 된 출력 받기
3 주 후에 저는 마지 못해 여기 누군가가 왜 직렬 포트에서 왜곡 된 출력을 얻고 있는지 제안 할 수있는 희망을 게시합니다.
사용중인 코드는 아래에 게시되어 있습니다. 이것은 여러 곳에서 찾은 표준 코드입니다.
OpenPort가 정상적으로 작동합니다.
4 # 131] [# 26] [# 0] # 0] : I가 SendString를 사용하여 문자열을 보내면
는 ('ABCDEF')는 I는 등의 PC 직렬 포트에 잘못된 입력을받을 # 0] [# 0] (대괄호로 묶인 데이터는 인쇄 할 수없는 문자 ASCII 코드임을 나타냅니다.)
분명히 포트에 연결하고 올바른 문자를 보내고 있습니다 (7).
저는 Baud Rate, Data Bits, Parity 및 Stop Bits의 모든 조합을 기쁨없이 시도했습니다. 다른 PC 등에서도 케이블 교체를 시도했습니다.
DCB에 다른 것을 설정할 필요가 있습니까?
어떤 도움이나 제안이라도 대단히 감사하겠습니다.
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,
Windows, LResources;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
function OpenPort(ComPort:String;BaudRate,ByteSize,Parity,StopBits:integer):String;
procedure SendString(str:String);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
cc:TCOMMCONFIG;
Connected:Boolean;
implementation
{$R *.lfm}
var F: TextFile;
var hComm: THandle;
str: String;
lrc: LongWord;
{ TForm1 }
function
OpenPort(ComPort:String;BaudRate,ByteSize,Parity,StopBits:integer):String;
var
cc:TCOMMCONFIG;
SWide:WideString;
Port:LPCWSTR;
begin
SWide:=ComPort;
Port:=PWideChar(SWide);
result:='';
if (1=1) then begin
Connected:=False;
hComm:=CreateFile(Port, GENERIC_READ or GENERIC_WRITE,0, nil,OPEN_EXISTING,0,0);
if (hComm = INVALID_HANDLE_VALUE) then begin
ShowMessage('Fail to Open');
exit;
end;
GetCommState(hComm,cc.dcb);
cc.dcb.BaudRate:=BaudRate;
cc.dcb.ByteSize:=ByteSize;
cc.dcb.Parity:=Parity;
cc.dcb.StopBits:=StopBits;
if not SetCommState(hComm, cc.dcb) then begin
result:='SetCommState Error!';
CloseHandle(hComm);
exit;
end;
Connected:=True;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
OpenPort('COM1:',9600,8,0,0);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SendString('ABCDEFG');
end;
procedure TForm1.SendString(str:String);
var
lrc:LongWord;
begin
if (hComm=0) then exit;
try
if not PurgeComm(hComm, PURGE_TXABORT or PURGE_TXCLEAR) then
raise Exception.Create('Unable to purge com: ');
except
Exit;
end;
WriteFile(hComm,str,Length(str), lrc, nil);
end;
end.