Thông báo

Collapse
No announcement yet.

Truyền thông dùng VB

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Truyền thông dùng VB

    Tại hạ đang dùng VB để viết code. Khi nhập một ký tự từ bàn phím nó sẽ truyền ra cổng com1 nhưng viết mãi không được. Tại hạ đưa ra code của mình để các hạ thử coi xem, để các hạ sửa giúp tại hạ với?
    Code như sau:
    Private Sub cmdthoat_click()
    end
    end sub
    Private Sub Form _KeyPress(KeyAscii As integer)
    truyen.text = keyascii
    truyenthong.output=truyen.text
    end sub
    Private Sub Form_Load()
    truyenthong.Commport=1
    truyenthong.Settings= "9600,N,8,1"
    truyenthong.inputlen=1
    truyenthong.portopen=true
    end sub
    Private Sub truyenthong_Oncomm()
    if (truyenthong.commEvent=comevreive) then
    nhan.text = truyenthong.input
    end if
    end sub
    Sau khi làm xong, tại hạ đã nối chân TXD và RXD của RS232 đưa vào cổng COM nhưng nó không chạy.
    Các hạ có cao kiến gì giúp mình với.Nhanh lên nhá, tại hạ đang rất cần.

  • #2
    trong chương chình trên, bạn cần tạo đối tượng truyenthong của lớp MScomm ngay sau Private Sub Form_Load(). hoặc bạn có thể làm như sau:
    1. add thành phần microsoft comm control6.0(hình cái điện thoại) vào form
    2. trong source trên, thay "truyenthong" = "mscomm" rồi chạy lại chương trình là ok
    ============================================
    chúc bạn thành công

    Comment


    • #3
      Nguyên văn bởi thanhtung
      Tại hạ đang dùng VB để viết code. Khi nhập một ký tự từ bàn phím nó sẽ truyền ra cổng com1 nhưng viết mãi không được. Tại hạ đưa ra code của mình để các hạ thử coi xem, để các hạ sửa giúp tại hạ với?
      Code như sau:
      Private Sub cmdthoat_click()
      end
      end sub
      Private Sub Form _KeyPress(KeyAscii As integer)
      truyen.text = keyascii
      truyenthong.output=truyen.text
      end sub
      Private Sub Form_Load()
      truyenthong.Commport=1
      truyenthong.Settings= "9600,N,8,1"
      truyenthong.inputlen=1
      truyenthong.portopen=true
      end sub
      Private Sub truyenthong_Oncomm()
      if (truyenthong.commEvent=comevreive) then
      nhan.text = truyenthong.input
      end if
      end sub
      Sau khi làm xong, tại hạ đã nối chân TXD và RXD của RS232 đưa vào cổng COM nhưng nó không chạy.
      Các hạ có cao kiến gì giúp mình với.Nhanh lên nhá, tại hạ đang rất cần.

      Bạn thử dùng Timer (đặt Interval=10) để nhận xem sao :
      Dim str as String
      ......
      Private Sub Timer1_Timer()
      Timer1.Enable=FALSE;
      truyenthong_Oncomm
      Timer1.Enable=TRUE
      end sub

      Private Sub truyenthong_Oncomm()
      if (truyenthong.InBufferCount>1) then
      str=str+truyenthong.Input
      nhan.text =str
      end if
      end Sub

      Comment


      • #4
        The following example shows how to send every character the user types to the serial port:

        Private Sub Form_KeyPress (KeyAscii As Integer)
        Dim Buffer as Variant

        ' Set and open port
        MSComm1.CommPort = 1
        MSComm1.PortOpen = True

        Buffer = Chr$(KeyAscii)
        MSComm1.Output = Buffer
        End Sub

        đoạn code trên có trong MSDN, mình paste cho thanhtung thử tham khảo xem sao

        Comment


        • #5
          Tại hạ cũng làm cái này roài.Các hạ nào thích thì mail cho tại hạ . Tại hạ gửi cho.

          Comment


          • #6
            Viết cái này dễ thôi mà. Chỉ cần các bác lưu ý là nếu các bác muốn dùng sự kiện OnComm thì các bác phải cho cái này MsComm.RThreshold = 1 hoặc bằng một số nào khác tương ứng là sau 1 byte nhận được thì sẽ xảy ra sự kiện OnComm. Còn nếu muốn làm với truyền thì set cái MsComm.SThreshold = 1 để xảy ra sự kiện OnComm khi truyền đi được 1 byte. ở đây tôi viết chương trình là dùng để nhận . Các bác đấu đầu 2,3 (RxD, TxD) của comm với nhau. Sau đó khi các bác ấn phím nào thì nó sẽ truyền qua cổng comm và nhận được thì hiển thị lên cái edit .

            Mã đây, các bác có thể cải tiến thêm:

            Code:
            Private Sub Form_KeyPress(KeyAscii As Integer)
            Dim DataToSend As String
            DataToSend = KeyAscii
            MSComm1.Output = DataToSend
            End Sub
            
            Private Sub Form_Load()
            With MSComm1
                .Settings = "9600,N,8,1"
                .RThreshold = 1
                .SThreshold = 0
                .InBufferSize = 1024
                .OutBufferSize = 1024
                .InputMode = comInputModeText
                .ParityReplace = ""
                .CommPort = 1 ' using com2
                If .PortOpen = False Then
                    .PortOpen = True
                End If
            End With
            End Sub
            
            Private Sub MSComm1_OnComm()
            Dim Buffer As String
            If MSComm1.CommEvent = comEvReceive Then
                Buffer = MSComm1.Input
                Text1.Text = Chr$(Buffer)
            End If
            End Sub
            Ở đây tôi dùng kiểu truyển text, cac bac có thể chuyển sang kiểu Binary truyền cho dễ dàng mã hóa, sử dụng giao tiếp với các thiết bị khác. Chuyển từ Ascii sang Hexa: dùng Hex$(string)
            Với lại các bác nên đọc quyển Serial_Port_Complete.pdf viết rất dễ hiểu, hướng dẫn chi tiết, chương trình giao thức truyền data.
            Last edited by ngohaibac; 04-05-2007, 02:15.
            Technical sale at WT Microelectronics S'pore
            Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
            Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com

            Comment


            • #7
              à quên các bác lưu ý là mặc định MsComm.RThreshold=0 nên các bác cứ để thế mà truyền thì sẽ chẳng bao giờ biết mà nhận đâu. Bài của Thanh làm không được vì khi đó chẳng có sự kiện KeyPress đâu vì khi đó đang focus ở cái edittext truyen.
              Technical sale at WT Microelectronics S'pore
              Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
              Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com

              Comment


              • #8
                Chao cac bac! Em dang viet chuong trinh nhan du lieu lieu truyen ve tu dau can bang VB6. Nhung dang gap chut van de mong cac bac ra tay giup do. Khi truyen ve indicator weight truyen 10 bít vi du : -0.000kgCrLF . Nho cac bac ra tay chi giup em lam sao lay duoc chuoi du lieu : 0.000kg.

                Comment


                • #9
                  Bạn đọc vào một xâu, sau đó dùng một xâu khác lấy dữ liệu ra thôi mà.
                  Ví dụ:
                  Code:
                  ' dùng sự kiện OnComm hoặc dùng đếm sự kiện khi nào InputLen = 10 thì đọc
                  Buffer = Comm1.Input ' nhận dữ liệu từ Indicator
                  Data  = Left$(Buffer,8)'
                  Data  = Right$(Data,7)'
                  Để nhận đúng dữ liệu thì bạn cứ thử viết thử nhận cả một xâu rồi hiện lên một edit box xem có đúng như bạn nghĩ không. Sau đó tìm qui luật của nó rồi dùng các hàm xử lí xâu( rất đơn giản trong MSDN) để xử lí.
                  Chúc thành công.
                  Last edited by ngohaibac; 04-05-2007, 02:44.
                  Technical sale at WT Microelectronics S'pore
                  Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
                  Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com

                  Comment


                  • #10
                    Bạn NGÔ HẢI BẮC ơi. Bạn có thể gửi cho mình code về truyền thông dùng VB được không? Mình giờ đang đau đầu vì không hiểu tại sao mà truyên xuống thì đựoc mà truyền lên là không được bạn à. Mà mình dùng comm ảo thì nó truyên thông được.
                    Bạn giúp mình tìm nguyên nhân với hoặc gửi cả chương trình mà bạn viết cho mình với. Mình đang cần lắm vì gần bảo vệ rồi .Cảm ơn bạn nhiều lắm.
                    Mail của mình :trandungee@gmail.com
                    Dây là code :

                    Dim Baud, Com, i, Sele, Inc, Data, j, k, xn As Byte
                    Dim b As Double
                    Dim Comsetting, DataIn As String
                    Dim receive, security As String



                    Private Sub Combo1_Click()

                    Com = Combo1.Text
                    Combo1.Enabled = False
                    Combo2.Enabled = True

                    End Sub

                    Private Sub Combo2_Click()

                    On Error GoTo X_Error

                    Baud = Combo2.Text
                    If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
                    MSComm1.CommPort = Com
                    Comsetting = CStr(Baud) & ",N,8,1"
                    MSComm1.Settings = Comsetting

                    MSComm1.InputLen = 0 ' Read all buffer on input
                    MSComm1.InBufferSize = 1024
                    'MSComm1.RThreshold = 0 ' khong tim kiem ky tu nhan duoc
                    MSComm1.RThreshold = 1 ' phat hien tung ky tu nhan duoc
                    MSComm1.InputMode = comInputModeText






                    MSComm1.OutBufferSize = 1024 ' Read all buffer on input
                    MSComm1.SThreshold = 0
                    MSComm1.Handshaking = comNone

                    If MSComm1.PortOpen = False Then MSComm1.PortOpen = True

                    Command2.Enabled = True
                    Command3.Enabled = True
                    Command4.Enabled = True
                    Command5.Enabled = True
                    Timer1.Enabled = True

                    GoTo KT


                    X_Error:

                    If MsgBox("Please select Com Port againt and then select Baud Rate ", vbOKOnly) = vbOK Then
                    Combo1.Enabled = True
                    Combo2.Enabled = False
                    Combo1.SetFocus
                    Command2.Enabled = False
                    Command3.Enabled = False
                    Command4.Enabled = False
                    Command5.Enabled = False
                    Timer1.Enabled = False


                    End If
                    KT:
                    End Sub

                    Private Sub Command1_Click()
                    xn = MsgBox("Do you want to exit ? ", vbOKCancel)
                    If xn = vbOK Then
                    Unload Me
                    End If
                    End Sub

                    Private Sub Command2_Click()
                    If Command2.Caption = "OFF" Then
                    MSComm1.Output = "a"
                    Command2.Caption = "ON"
                    Shape1(0).BackColor = &HFF&
                    Else
                    MSComm1.Output = "b"
                    Command2.Caption = "OFF"
                    Shape1(0).BackColor = &HFFFFFF
                    End If


                    End Sub

                    Private Sub Command3_Click()
                    If Command3.Caption = "OFF" Then
                    MSComm1.Output = "c"
                    Command3.Caption = "ON"
                    Shape1(1).BackColor = &HFF&
                    Else
                    MSComm1.Output = "d"
                    Command3.Caption = "OFF"
                    Shape1(1).BackColor = &HFFFFFF
                    End If


                    End Sub

                    Private Sub Command4_Click()
                    If Command4.Caption = "OFF" Then
                    MSComm1.Output = "e"
                    Command4.Caption = "ON"
                    Shape1(2).BackColor = &HFF&
                    Else
                    MSComm1.Output = "f"
                    Command4.Caption = "OFF"
                    Shape1(2).BackColor = &HFFFFFF
                    End If


                    End Sub

                    Private Sub Command5_Click()
                    If Command5.Caption = "OFF" Then
                    MSComm1.Output = "m"
                    Command5.Caption = "ON"
                    Shape1(3).BackColor = &HFF&
                    Else
                    MSComm1.Output = "n"
                    Command5.Caption = "OFF"
                    Shape1(3).BackColor = &HFFFFFF
                    End If


                    End Sub

                    Private Sub Command6_Click()
                    Text2.Text = receive
                    Text1.Text = security
                    End Sub

                    Private Sub Command7_Click()
                    Text2.Text = ""
                    DataIn = ""
                    receive = ""
                    Text1.Text = ""
                    End Sub

                    Private Sub Command8_Click()
                    For k = 0 To 3
                    Shape1(k).BackColor = &HFFFFFF
                    Next k
                    Command2.Caption = "OFF"
                    Command3.Caption = "OFF"
                    Command4.Caption = "OFF"
                    Command5.Caption = "OFF"
                    MSComm1.Output = "b"
                    MSComm1.Output = "d"
                    MSComm1.Output = "f"
                    MSComm1.Output = "n"
                    End Sub

                    Private Sub Form_Load()

                    Combo2.Enabled = False
                    i = 60
                    Sele = 2
                    Inc = 0
                    Command2.Caption = "OFF"
                    Command3.Caption = "OFF"
                    Command4.Caption = "OFF"
                    Command5.Caption = "OFF"
                    For j = 0 To 3
                    Shape1(j).BackColor = &HFFFFFF
                    Next j
                    Command2.Enabled = False
                    Command3.Enabled = False
                    Command4.Enabled = False
                    Command5.Enabled = False
                    Text2.Text = 0
                    End Sub


                    Private Sub MSComm1_OnComm()
                    Dim Data As String
                    Select Case MSComm1.CommEvent
                    Case comEvReceive
                    DataIn = MSComm1.Input
                    ' Data = Asc(DataIn)

                    If DataIn = "a" Then ' dung de chong trom
                    security = "An toan"
                    End If
                    If DataIn = "b" Then
                    security = "Co ke trom "
                    End If
                    If DataIn <> "a" And DataIn <> "b" Then ' nhan du lieu tu VDK
                    receive = receive + DataIn
                    End If





                    End Select

                    End Sub
                    Last edited by success; 20-05-2012, 08:16.

                    Comment


                    • #11

                      Đây lành hình ảnh mà minh dùng comm ảo thì Send và receive thì ok. mà cái phần mềm phía bên phải ấy. Mình dùng nó để truyền xuống VDK thì đươc. còn cái bên trai dùng VB thì không được.
                      Bạn giúp mình với.

                      Comment

                      Về tác giả

                      Collapse

                      thanhtung Tìm hiểu thêm về thanhtung

                      Bài viết mới nhất

                      Collapse

                      Đang tải...
                      X