我在Delphi中創建一個簡單的程序,使用2個參數通過COM端口發送字符,第一個參數是端口號,第二個參數是要發送的字符。所以如果我將它保存爲p.exe,「p.exe 20 A」將通過COM20發送「A」。串口不會在delphi中工作
try
PhoneNumber := ParamStr(2);
if(StrToInt(ParamStr(1))>=10)then
CommPort := '\\.\COM'+ParamStr(1)
else
CommPort := 'COM'+ParamStr(1);
hCommFile := CreateFile(PChar(CommPort),
GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if hCommFile=INVALID_HANDLE_VALUE then begin
ShowMessage('Unable to open '+ CommPort);
end;
if WriteFile(hCommFile, PChar(PhoneNumber)^, Length(PhoneNumber),NumberWritten, nil)=false then
showmessage('Unable to send');
PurgeComm(hCommFile,PURGE_TXCLEAR);
FlushFileBuffers(hCommFile);
CloseHandle(hCommFile);
Application.Terminate;
except
PurgeComm(hCommFile,PURGE_TXCLEAR);
FlushFileBuffers(hCommFile);
Application.Terminate;
end;
而且我還使用超級終端與COM編號baudrate = 9600,flow_control = none並且它給出了相同的結果。這個角色發送得很好。 問題是,我無法運行我的程序(p.exe),然後每次登錄到我的Windows XP時執行以下步驟: 通過超級終端連接到指定COM, 斷開連接。 然後我的可執行文件就可以運行了。否則,就像你在同一個COM中運行兩個超級終端會話一樣,它不起作用。有人得到一個提示回合呢?我錯過了我的代碼中的任何內容嗎?
+1做超級終端進行仔細的檢查。 –
因此,通過「不工作」,你會得到你的「無法打開......」錯誤,「無法發送」,或者是什麼? –
您需要使用setcommstate來獲得波特率。 –