none
vb6 的MSCOMM32 轉為.net RS232 來用 RRS feed

  • 問題

  • 各位大大

    1. 在下在使用VB2005的RS232元件在溝通硬體,目前遇到因難都無法啟動硬體

    2. 因此公司有人用MSCOMM32 就可以溝通硬體。

    想問一下1 和  2 的差異是什麼?

    另外VB2005的RS232元件不就是要取MSCOMM32 ? 及如何用RS232 的方法?

    如需要code 在下再pro 出來

    問題困擾我二個星期了

    謝謝指導  Brian



    2009年9月21日 上午 08:54

解答

  • Brain:
    你的通訊協定有個 13是結尾字元
    你的程式是
    RS232.Write(OutBuffer, 0, 1)
    這樣只送出一個byte, 因為你第三個參數是1, 所以你只送出了 128或129, 所以設備沒反應
    應該是 RS232.Write(OutBuffer, 0, 2)
    我比較習慣寫成
    RS232.Write(OutBuffer, 0, OutBuffer.Length)
    請參考[Array.Length 屬性 ]



    學而不思則罔, 思而不學則殆. 寫程式無他, 唯勤而已.
    • 已標示為解答 Brianhhhh 2009年9月22日 上午 05:41
    2009年9月21日 上午 10:09
    版主

所有回覆

  • MSCOMM32 是使用 VB6 時代的 MSCOMM 元件吧。
    不過 .NET 的 SerialPort 不像 MSCOMM 還要經過 COM Interop,會比透過 MSCOMM 要快,但 MSCOMM 的參考文件會多一點。

    你要檢查的應該是有沒有用對吧。
    包含寫入到 Stream 以及硬體控制碼的資料對不對這些。
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    如果只會用 "看" 的學程式,那不如早點改行,以免誤己一生...
    2009年9月21日 上午 09:01
    版主
  • Serial Port和MSCOMM32的程式都貼出來吧,和您的硬體通訊規格...
    2009年9月21日 上午 09:02
  • 這個恐怕要知道設備端的資料會比較容易回答
    1. 設備端 RS232 的通訊設定
    2. 通訊協定
    學而不思則罔, 思而不學則殆. 寫程式無他, 唯勤而已.
    2009年9月21日 上午 09:20
    版主
  • .net 2005 中的RS232 的code 及協定 
    Dim mBaudRate As Integer
            Dim mParity As IO.Ports.Parity
            Dim mDataBit As Integer
            Dim mStopbit As IO.Ports.StopBits
            Dim mPortNanme As String

            mPortNanme = cmbCOM.SelectedItem.ToString
            mBaudRate = 115200
            mParity = Parity.None
            mDataBit = 8
            mStopbit = StopBits.One


            RS232 = New IO.Ports.SerialPort(mPortNanme, mBaudRate, mParity, mDataBit, mStopbit)
            'RS232.Encoding = Encoding
            ' RS232.Encoding = Encoding.ASCII
            'RS232.Encoding = Encoding.Unicode
    -----------------------------------
    On-81

            'Dim Buf As Object


            '清空輸入緩衝區

     

            Dim OutBuffer(1) As Byte
            'OutBuffer(0) = 129
            OutBuffer(0) = CType(129, Byte)
            ' OutBuffer(0) = Hex(81)
            OutBuffer(1) = CType(13, Byte)
            'OutBuffer(1) = 13
            'OutBuffer(0) = 13
            RS232.Write(OutBuffer, 0, 1)
    ---------------------------------------


    下列是MSCOM32的部份的code
    'Port open
        Dim port As Integer
        port = CInt(cboPort.SelectedItem)

        With mscomm
          If .PortOpen = True Then .PortOpen = False
          .CommPort = port
          .Settings = "115200,n,8,1"
          .InBufferSize = 1024
          .OutBufferSize = 1024
          .RThreshold = 1
          .RTSEnable = True
          .InBufferCount = 0            '清除接收區
          .OutBufferCount = 0           '清除發送區
          .InputLen = 0                 '讀取接收暫存區中全部的內容
          '以Binary方式接收資料
          .InputMode = MSCommLib.InputModeConstants.comInputModeBinary
        End With

        '打開
        Try
          mscomm.PortOpen = True
          MsgBox("Port開啟...")
          btOn.Enabled = True
          btOff.Enabled = True
        Catch ex As Exception
          'MsgBox(ex.ToString())
          MsgBox("此Port打不開...")
          btOn.Enabled = False
          btOff.Enabled = False

        End Try


      End Sub

    Private Sub btOn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btOn.Click

        'On-81

        Dim Buf As Object


        '清空輸入緩衝區
        Buf = mscomm.Input


        Dim OutBuffer(1) As Byte
        OutBuffer(0) = 129
        OutBuffer(1) = 13
        mscomm.Output = OutBuffer

      End Sub

      Private Sub btOff_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btOff.Click

        'Off-80


        Dim Buf As Object

        '清空輸入緩衝區
        Buf = mscomm.Input


        Dim OutBuffer(1) As Byte
        OutBuffer(0) = 128
        OutBuffer(1) = 13
        mscomm.Output = OutBuffer

      End Sub


    請大大幫忙

    2009年9月21日 上午 09:48
  • 我的設備端

    PROTOCOL

    The sensor is command driven as a slave device. Commands from the host are responded to or data is
    output in an isochronous stream. Command responses and data output are not interleaved.The RS232 port
    operates at 115kbaud, 8 data bits, 1 stop bit and without flow control. The data is in 8 bit hex values.
    Commands to the sensor are either 1 or 2 bytes. Response from the sensor is to echo the command unless

    SUPPORTED ONE BYTE COMMANDS

    Command: 0x80  關
    Command: 0x81  開

    這樣我如何做?

    謝謝

    Brian
    2009年9月21日 上午 09:51
  • Brain:
    你的通訊協定有個 13是結尾字元
    你的程式是
    RS232.Write(OutBuffer, 0, 1)
    這樣只送出一個byte, 因為你第三個參數是1, 所以你只送出了 128或129, 所以設備沒反應
    應該是 RS232.Write(OutBuffer, 0, 2)
    我比較習慣寫成
    RS232.Write(OutBuffer, 0, OutBuffer.Length)
    請參考[Array.Length 屬性 ]



    學而不思則罔, 思而不學則殆. 寫程式無他, 唯勤而已.
    • 已標示為解答 Brianhhhh 2009年9月22日 上午 05:41
    2009年9月21日 上午 10:09
    版主
  • dear Bill


    thanks

    己經可以on/ off

    RS232.Write(OutBuffer, 0, OutBuffer.Length)

    這個好用.


    brian

    2009年9月22日 上午 05:41