CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

大虾!!求救:怎么调用系统的COM1口(串口)通讯??

楼主appltliu(applet)2003-05-04 11:30:15 在 VB / 基础类 提问

系统本身自代了两个串口(com1,com2)请问我怎么才  
  能像超级终端一样,调用它并进行通讯??  
  在线等待!谢谢各位大虾!! 问题点数:100、回复次数:11Top

1 楼zhangning163(心平气和)回复于 2003-05-04 11:39:05 得分 10

在MS   DOS下用命令MOD   COM1   96,8,0,1   设置;  
  在VB   中可用MSCOMM控件或API引用;  
  Top

2 楼flyahead0()回复于 2003-05-04 11:47:43 得分 10

mscomm控件,每个口独立使用一个mscomm控件。察看MSDN相关内容。Top

3 楼cpf_cn(令狐飞)回复于 2003-05-04 11:54:11 得分 10

upTop

4 楼szqlovesly(szq)回复于 2003-05-04 12:09:37 得分 10

mscomm控件就可以了Top

5 楼appltliu(applet)回复于 2003-05-06 15:47:39 得分 0

那位大虾!能给我一个实例吗?/做一个简单的串口收发数据的功能!!Top

6 楼yefanqiu(叶帆)回复于 2003-05-06 16:17:43 得分 50

 
  '***********************************************************************************8  
  '方法  
  Public   Sub   OpenPort(PortNo   As   Integer)  
        On   Error   GoTo   ErrExit  
          MSComm1.CommPort   =   PortNo                                       '采用COM端口  
          MSComm1.Settings   =   mbps   +   ","   +   mCheckOut   +   ",8,1"  
          MSComm1.InputMode   =   comInputModeBinary             '采用二进制传输  
          MSComm1.NullDiscard   =   False                                   'NULL字符从端口传送到接受缓冲区  
          MSComm1.DTREnable   =   False                                       'DTR线无效  
          MSComm1.EOFEnable   =   False                                       '不寻找EOF符  
          MSComm1.RTSEnable   =   False                                       'RTS线无效  
          MSComm1.InBufferCount   =   0                                       '清空接受缓冲区  
          MSComm1.OutBufferCount   =   0                                     '清空传输缓冲区  
          MSComm1.SThreshold   =   1                                             '如果传输缓冲区完全空时产生MSComm事件  
          MSComm1.RThreshold   =   0                                             '不产生MSComm事件  
          MSComm1.InBufferSize   =   1024  
          MSComm1.PortOpen   =   True                                           '打开端口  
        Exit   Sub  
  ErrExit:  
        MsgBox   Err.Description  
  End   Sub  
  Public   Sub   ClosePort()  
        On   Error   GoTo   ErrExit  
            MSComm1.PortOpen   =   False                                             '打开端口  
        Exit   Sub  
  ErrExit:  
        MsgBox   Err.Description  
  End   Sub  
  '读数据  
  Public   Function   GetData(lngAddr   As   Long,   bytData()   As   Byte,   Optional   bytNum   As   Byte   =   1)   As   Boolean  
      On   Error   GoTo   ErrExit  
          Dim   MyArray(0   To   10)   As   Byte  
          Dim   MyArrays()   As   Byte  
          Dim   strBCD   As   String  
          Dim   sngTime   As   Single  
          Dim   MyData   As   Variant  
          Dim   mTime   As   Single  
          Dim   i   As   Integer  
                   
          mTime   =   (mWaitTime   +   10   *   bytNum)   /   1000#  
          strBCD   =   Trim(Format(lngAddr,   "000000"))  
           
          MyArray(0)   =   &HAC  
          MyArray(1)   =   &H55     '读  
          MyArray(2)   =   &H55  
          MyArray(3)   =   Val(Mid(strBCD,   1,   1))   *   16   +   Val(Mid(strBCD,   2,   1))  
          MyArray(4)   =   MyArray(3)  
          MyArray(5)   =   Val(Mid(strBCD,   3,   1))   *   16   +   Val(Mid(strBCD,   4,   1))  
          MyArray(6)   =   MyArray(5)  
          MyArray(7)   =   Val(Mid(strBCD,   5,   1))   *   16   +   Val(Mid(strBCD,   6,   1))  
          MyArray(8)   =   MyArray(7)  
          MyArray(9)   =   bytNum               '要读数据的个数  
          MyArray(10)   =   bytNum  
           
           
          MSComm1.Output   =   MyArray  
           
          MSComm1.InBufferCount   =   0       '清空接收缓冲区  
          Do  
              DoEvents  
          Loop   Until   MSComm1.OutBufferCount   =   0         '  
             
          sngTime   =   Timer  
          Do  
              DoEvents  
              If   Abs(Timer   -   sngTime)   >   mTime   Then   GetData   =   False:   Exit   Function     '等待100ms  
          Loop   Until   MSComm1.InBufferCount   =   1   +   bytNum   *   2  
           
          MyData   =   MSComm1.Input  
          MyArrays   =   MyData  
          If   MyArrays(0)   =   &HAC   Then  
              GetData   =   True  
              For   i   =   1   To   bytNum  
                  bytData(i   -   1)   =   MyArrays(2   *   i)  
                  If   MyArrays(2   *   i   -   1)   <>   MyArrays(2   *   i)   Then   GetData   =   False  
              Next   i  
          Else  
              GetData   =   False  
          End   If  
          Exit   Function  
  ErrExit:  
        MsgBox   Err.Description  
  End   Function  
   
  '写数据  
  Public   Function   SetData(lngAddr   As   Long,   bytData   As   Byte)   As   Boolean  
      On   Error   GoTo   ErrExit  
          Dim   MyArray(0   To   10)   As   Byte  
          Dim   MyArrays()   As   Byte  
          Dim   strBCD   As   String  
          Dim   sngTime   As   Single  
          Dim   MyData   As   Variant  
          Dim   mTime   As   Single  
                           
          mTime   =   mWaitTime   /   1000#  
          strBCD   =   Trim(Format(lngAddr,   "000000"))  
           
          MyArray(0)   =   &HAC  
          MyArray(1)   =   &HAA   '写  
          MyArray(2)   =   &HAA  
          MyArray(3)   =   Val(Mid(strBCD,   1,   1))   *   16   +   Val(Mid(strBCD,   2,   1))  
          MyArray(4)   =   MyArray(3)  
          MyArray(5)   =   Val(Mid(strBCD,   3,   1))   *   16   +   Val(Mid(strBCD,   4,   1))  
          MyArray(6)   =   MyArray(5)  
          MyArray(7)   =   Val(Mid(strBCD,   5,   1))   *   16   +   Val(Mid(strBCD,   6,   1))  
          MyArray(8)   =   MyArray(7)  
          MyArray(9)   =   bytData  
          MyArray(10)   =   bytData  
           
          MSComm1.Output   =   MyArray  
           
          MSComm1.InBufferCount   =   0       '清空接收缓冲区  
          Do  
            DoEvents  
          Loop   Until   MSComm1.OutBufferCount   =   0         '  
             
          sngTime   =   Timer  
          Do  
            DoEvents  
            If   Abs(Timer   -   sngTime)   >   mTime   Then   SetData   =   False:   Exit   Function     '等待100ms  
          Loop   Until   MSComm1.InBufferCount   =   3  
           
          MyData   =   MSComm1.Input  
          MyArrays   =   MyData  
          If   MyArrays(0)   =   &HAC   Then  
              If   MyArrays(1)   =   MyArrays(2)   And   MyArrays(1)   =   bytData   Then  
                  SetData   =   True  
                  Exit   Function  
              End   If  
          End   If  
          SetData   =   False  
          Exit   Function  
  ErrExit:  
        MsgBox   Err.Description  
  End   Function  
  Top

7 楼planetike(胜哥哥)回复于 2003-05-06 16:30:28 得分 0

使用comm控件,它里面有一个参数指定comm1,还是comm2Top

8 楼appltliu(applet)回复于 2003-05-06 21:37:09 得分 0

yefanqiu(叶帆)同志:  
  大恩不言谢!!以后但有用到小弟的地方尽管说!!thank   you     very   much!!Top

9 楼HanZhu1(寒竹)回复于 2003-05-06 22:39:40 得分 10

在vb下mscomm还是比较方便的Top

10 楼HanZhu1(寒竹)回复于 2003-05-21 08:47:42 得分 0

强烈推举mscomm控件  
  Top

相关问题

  • 串口通讯
  • 串口通讯!!!
  • 串口通讯
  • 串口通讯
  • Delphi有没有一种串口通讯的组件或Active控件,如果没有,要调用哪些API
  • 本人写的纯PB实现的串口通讯程序,没有调用任何控件。想要的快来!
  • 串口通讯?[Delphi]
  • spcomm串口通讯
  • PB串口通讯?
  • c# 串口通讯

关键词

  • 端口
  • 控件
  • mscomm
  • strbcd
  • myarray
  • 串口
  • 大虾
  • 缓冲区
  • bytdata
  • errexit

得分解答快速导航

  • 帖主:appltliu
  • zhangning163
  • flyahead0
  • cpf_cn
  • szqlovesly
  • yefanqiu
  • HanZhu1

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo