因為看到很多網友對串口通信的問題,其中最多的是關於元件的選用與通信的實現。
我想您不論用什麼類型的控件操作rs232均是一樣的,我比較喜歡用mscomm32,因為它是ms的,且是vb程式設計軟件自帶的,並且免費哦
還有一個就是moxa的rs232專業開發包pcomm,到www.moxa.com.tw或www.moxa.com.cn可以看到。
但是我建議您使用ms的,它免費,但pcomm不是的。並且mscomm32有中文幫助的,基本對串口操作事例都有的。很好用!!!
所以下面我就針對mscomm32的應用寫了一個簡單的串口通信工具,主要功能就是通過ms的mscomm32控件實現rs232的數據傳送與接受。
主要講解2中傳送方法:
1、直接傳送
2、傳送數組元素
down:
http://delphi.ur-solution.com/Delphi_download/upload/35466_mscomm1.rar
控件安裝〉〉〉
方法零
直接regsvr32 mscomm32.ocx
條件:系統以前裝過vb
方法一
1、安裝VB6.0
2、如同我上面的所說的安裝方法,在Delphi(5、6、7)中安裝就可以用了
方法二
原文著作:王金濤
出處:http://www.s8s8.Net/cgi-bin/post.CGI?action=replyquote&forum=5&topic=2279&postno=4
Delphi 具有功能強大、簡便易用和代碼執行速度快等特點,是全球公認的快速應用開發工具技術的先驅者。但是在對串口通信的控制上Delphi的幫助文檔和其他書籍中很少提及,這恰恰又是在開發應用系統時會經常遇到的問題。用過VB的程序員都知道 VB的MSComm通信控件具有豐富的與串口通信密切相關的屬性及事件,提供了一系列標准通信命令的接口,可以用它創建全雙工的、事件驅動的、高效實用的通信程序。在這裡就介紹一下如何把MSComm這個ActiveX控件加入到Delphi中,充分發揮出二者的優越性。
首先在VB安裝目錄下找到下列三個文件:
Mscomm.reg, Mscomm32.ocx,Mscomm32.dep ,
把這三個文件拷貝到Windows的system目錄下(注意WinNT下是System32)。然後用Windows下的注冊工具regsvr32注冊該OCX控件,例如:
Regsvr32 … system目錄Mscomm32.ocx .
注冊成功後用記事本打開Mscomm.reg,可以看到類似下面的內容:
[HKEY_CLASSES_ROOTLicenses4250E830-6AC2-11cf-8ADB-00AA00C00905]
@ = "kjljvjjjoquqmjjjvpQQkqmqykypoqjquoun",為了能正確使用該控件,需要修改注冊表的信息,在注冊表的在HKEY_CLASSES_ROOTLicenses下建一主鍵:
4250E830-6AC2-11cf-8ADB-00AA00C00905,主鍵的內容為
kjljvjjjoquqmjjjvpQQkqmqykypoqjquoun.
至此已經完成了控件的系統注冊工作,剩下的工作是在Delphi中導入這個ActiveX控件,進入Delphi環境在Component菜單下選Import ActiveX Control,這時在列表中可以看到Microsoft Comm Control 6.0選項, 選中這個選項點擊Install按鈕,完成安裝。在ActiveX控件頁上可以看到一個電話為圖標的控件,這就是MSComm控件。這樣就可以象在VB中一樣方便得使用MSComm控件了。
但是byte array的資料就是不知該用什麼方法送出去?
type
TCharArray=array[0..1] of BYTE;
PCharArray=^TCharArray;
procedure WriteCom(comm:TMSComm;const Buf:array of BYTE);
var
V:Variant;
p:PCharArray;
i:Integer;
begin
V:= VarArrayCreate([Low(Buf), High(Buf)],varByte);
P := VarArrayLock(V);
try
for i:=Low(Buf) to High(Buf) do P^[i]:=Buf[i];
finally
VarArrayUnlock(v);
end;
comm.OutPut:=V;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
buf:array[1..20] of BYTE;
i:integer;
str:string;
begin
if comm1.PortOpen then
begin
for i:=1 to length(str) do
buf[i]:=I;
comm1.RThreshold:=20;
WriteCom(comm1,buf);
end;
end;
我想您使用byte array,應該是傳送2進制;需要將INPUTMODE為1 - comInputModeBinary。