線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3064
推到 Plurk!
推到 Facebook!

mscomm32的简单应用。

 
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-08 17:14:54 IP:61.155.xxx.xxx 未訂閱
因为看到很多网友对串口通信的问题,其中最多的是关于元件的选用与通信的实现。 我想您不论用什么类型的控件操作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、传送数组元素 控件安装〉〉〉 方法零 直接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_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905] @ = "kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun",为了能正确使用该控件,需要修改注册表的信息,在注册表的在HKEY_CLASSES_ROOT\Licenses下建一主键: 4250E830-6AC2-11cf-8ADB-00AA00C00905,主键的内容为 kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun. 至此已经完成了控件的系统注册工作,剩下的工作是在Delphi中导入这个ActiveX控件,进入Delphi环境在Component菜单下选Import ActiveX Control,这时在列表中可以看到Microsoft Comm Control 6.0选项, 选中这个选项点击Install按钮,完成安装。在ActiveX控件页上可以看到一个电话为图标的控件,这就是MSComm控件。这样就可以象在VB中一样方便得使用MSComm控件了。
附加檔案:35466_mscomm1.rar
sally
一般會員


發表:10
回覆:21
積分:6
註冊:2003-08-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-08 18:55:04 IP:61.13.xxx.xxx 未訂閱
謝謝您撥冗回覆,但是byte array的資料就是不知該用什麼方法送出去?
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-08 19:22:26 IP:61.155.xxx.xxx 未訂閱
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。
lin11112
初階會員


發表:42
回覆:83
積分:25
註冊:2003-02-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-19 16:04:00 IP:61.30.xxx.xxx 未訂閱
sos_admin大大 看到您提供的方式後 小弟粉想試試 可否請大大提供一個在BCB下執行的範例呢? 謝謝
wychen57
一般會員


發表:32
回覆:77
積分:21
註冊:2003-10-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-11 21:28:23 IP:211.76.xxx.xxx 未訂閱
引言: 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。
請問有writecom,有沒有readcom的轉換呢,把comm1.input轉回陣列呢,謝謝
系統時間:2024-06-27 1:13:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!