飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3603|回复: 0

mscomm32的简单应用

[复制链接]
  • TA的每日心情
    开心
    2019-9-19 16:05
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2007-2-8 11:04:53 | 显示全部楼层 |阅读模式
    风花雪月 e梦情缘
    网络代号:wnhoo or sos_admin
    网名:e梦缘
    Mail:[email protected]

    因为看到很多网友对串口通信的问题,其中最多的是关于元件的选用与通信的实现。
    我想您不论用什么类型的控件操作rs232均是一样的,我比较喜欢用mscomm32,因为它是ms的,且是vb程式设计软件自带的,并且免费哦
    还有一个就是moxa的rs232专业开发包pcomm,到www.moxa.com.twwww.moxa.com.cn可以看到。
    但是我建议您使用ms的,它免费,但pcomm不是的。并且mscomm32有中文帮助的,基本对串口操作事例都有的。很好用!!!


    所以下面我就针对mscomm32的应用写了一个简单的串口通信工具,主要功能就是通过ms的mscomm32控件实现rs232的数据传送与接受。
    主要讲解2中传送方法:
    1、直接传送
    2、传送数组元素

    down:

    http://delphi.ur-solution.com/de ... d/35466_mscomm1.rar

    控件安装〉〉〉

    方法零
    直接regsvr32 mscomm32.ocx
    条件:系统以前装过vb

    方法一
    1、安装VB6.0
    2、如同我上面的所说的安装方法,在DELPHI(5、6、7)中安装就可以用了

    方法二
    原文著作:王金涛
    出处:http://www.s8s8.net/cgi-bin/post ... c=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控件了。



    但是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^:=Buf;
    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;
    comm1.RThreshold:=20;
    WriteCom(comm1,buf);
    end;
    end;

    我想您使用byte array,应该是传送2进制;需要将INPUTMODE为1 - comInputModeBinary。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表