当然可以
看这个例子
VERSION 5.00
Object = "{648A5603-2C6E-101B-82B6-000000000014}#1.1#0"; "MSCOMM32.OCX"
Begin VB.Form Form1 
   Caption         =   "Form1"
   ClientHeight    =   4350
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   7800
   LinkTopic       =   "Form1"
   ScaleHeight     =   4350
   ScaleWidth      =   7800
   StartUpPosition =   3  '窗口缺省
   Begin VB.CommandButton cmdOpen 
      Caption         =   "Open"
      Height          =   315
      Left            =   4590
      TabIndex        =   4
      Top             =   3315
      Width           =   1230
   End
   Begin VB.CommandButton cmdSend 
      Caption         =   "Send"
      Height          =   330
      Left            =   5955
      TabIndex        =   2
      Top             =   3300
      Width           =   1245
   End
   Begin VB.ListBox ListRevive 
      Height          =   1680
      Left            =   315
      TabIndex        =   1
      Top             =   1530
      Width           =   6900
   End
   Begin VB.TextBox txtSend 
      Height          =   315
      Left            =   315
      TabIndex        =   0
      Top             =   795
      Width           =   4155
   End
   Begin MSCommLib.MSComm MSComm1 
      Left            =   4920
      Top             =   630
      _ExtentX        =   1005
      _ExtentY        =   1005
      _Version        =   393216
      DTREnable       =   -1  'True
   End
   Begin VB.Label lblSend 
      AutoSize        =   -1  'True
      Caption         =   "Label1"
      Height          =   180
      Left            =   315
      TabIndex        =   3
      Top             =   1200
      Width           =   540
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub cmdOpen_Click()
    MSComm1.CommPort = 1
    MSComm1.InputMode = comInputModeBinary
    MSComm1.RThreshold = 1
    MSComm1.PortOpen = True
    MSComm1.RThreshold = 1
    cmdOpen.Enabled = False
End SubPrivate Sub cmdSend_Click()
    Dim OutByte() As Byte
    Dim tmpstr As String
    Dim i As Integer
    
    If txtSend.Text = "" Then
        MsgBox "请输入要发送的数据!", vbExclamation, "提示"
        txtSend.SetFocus
    End If
    
    OutByte = StrConv(txtSend.Text, vbFromUnicode)
    
    tmpstr = ""
    For i = LBound(OutByte) To UBound(OutByte)
        tmpstr = tmpstr & Hex(OutByte(i)) & " "
    Next i
    lblSend.Caption = tmpstr
    
    MSComm1.Output = OutByte
End SubPrivate Sub Form_Unload(Cancel As Integer)
    If MSComm1.PortOpen Then MSComm1.PortOpen = False
End SubPrivate Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
        Case comEventBreak '收到中断讯号
        Case comEventCDTO '
        Case comEventCTSTO
        Case comEventDSRTO
        Case comEventFrame
        Case comEventOverrun '数据遗失
        Case comEventRxOver '接收缓冲区漫溢
        Case comEventRxParity '极性错误
        Case comEventTxFull '传送缓冲区漫溢
        Case comEventDCB '未预期错误
        Case comEvCD
        Case comEvCTS
        Case comEvDSR
        Case comEvRing
        Case comEvReceive '收到字符
            Dim InByte() As Byte
            Dim i As Integer
            Dim buf As String
            
            InByte = MSComm1.Input
            
            buf = ""
            For i = LBound(InByte) To UBound(InByte)
                buf = buf & Hex(InByte(i)) & " "
            Next i
            ListRevive.AddItem buf
        Case comEvSend
        Case comEvEOF
    End Select
End Sub

解决方案 »

  1.   

    MSComm1.InputMode = comInputModeBinary'以二进制方式发送
      

  2.   

    多谢你先阿甘。
    我也试过用comInputModeBinary发送,不过还是不行
      

  3.   

    是这样的,硬件工程师做的硬件不是按AScII来转换的,而是自定了一套转换表,比喻我要送A过去,不是直接送阿A,而是转成他的格式代号,即是6代号,他想要我所有的内容都转成特定代号送过去,可是我发现不能送这些数字过去,因为控件当作字符来看待了,不知如何解决?
      

  4.   

    到底需要送什么呢?
    A的ascii还是10?
    6代号代表什么呢?
    总有一个协议吧,都是数字组成的
      

  5.   

    您只要把OutByte这个数组的数据改成您想要送的数据就可以
    我的这个程序只是一个例子
    协议的转换就需要您自己写了
      

  6.   

    一般情况下,我只要发一个A,对方也可以收到A,至于如何A转换成Asc码是由电脑完成的,而现在,其实现在他们的要求是由我先把A转换成特殊的代码,然后再送过去,他那边就再把这特殊的代码。这可行吗?
      

  7.   

    您自己写一个转换函数
    比如输入AB就生成一个
    byte的数组
    为{5,6}
    然后以我以上的方式送出去,明白?
      

  8.   

    那是你们之间的协议啊:(
    比如按cmd1完成fun1,你总得按照fun1该送什么数据来做吧?
    比如要送
    11 A2 00 FF(16进值)
    就把这些值放到byte array中送出去
      

  9.   

    我已经照办了,可是你刚才的语句
    Dim OutByte() As Byte
    OutByte = StrConv(txtSend.Text, vbFromUnicode)
    报错呢,怎么办?(没有装msdn)
      

  10.   

    你不要用我的这个,我送的是把字符装换成Ascii送出的
    您的不应该这样做!您到底明白我的意思没有?
    OutByte = StrConv(txtSend.Text, vbFromUnicode)
    这句是把一个字符串装换成byte array您要发送数据是您自己定义的,就是定义您自己的outbyte
      

  11.   

    请你告诉我如何把string转换成byte?我只是不知道如何转换了。谢谢帮了这么多,还有就是我如何给分给你?
      

  12.   

    就是我上面的函数
    OutByte = StrConv(txtSend.Text, vbFromUnicode)
    这个是把string装换成byte array(ascii码)
    但是,您的不该是转换Ascii送的啊协议还是您自己写的,明白?比如:清空硬件上的数据指令是
    0A->指令
    01->机号
    EE->校验码那么您的
    outbyte(0)=&h0a
    outbyte(1)=&h01
    outbyte(2)=&hEE
    然后送出,明白?点贴子右上角的管理,就可以给分