Thông báo

Collapse
No announcement yet.

Giao tiếp RS232 trên PC bằng Visual Basic 6.0

Collapse
This is a sticky topic.
X
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #31
    Nguyên văn bởi nbb3i Xem bài viết
    Form Load là những thứ khi chương trình được mở ra nó sẽ ngay lập tức thực hiện.
    Phải ko nhỉ?
    Vậy chương trình giao tiếp nào với cổng COM, cũng cần "From_Load" phải ko bác?
    Nhưng "From_Load" ko có cái nút lệnh nào tr6n giao diện à? Mình chỉ thêm đoạn lệnh From Load vào để chạy thôi à?
    Thank you

    Comment


    • #32
      Nguyên văn bởi h_h_h Xem bài viết
      Em cũng mới học VB , và xem mục này thấy anh Bắc hướng dẫn chi tiết, em cũng thử làm 1 chương trình nhỏ truyền ký tự giữa máy tinh qua cổng com và em có thêm một số chức năng hay , gửi lên cho mọi người xem và cho ý kiến.
      bác ơi,bác up lên mạng cái đã sử dụng được rùi, bác có thể up mã nguồn lên cho anh em tham khảo dc ko ????????

      Comment


      • #33
        Nguyên văn bởi tpasterisk Xem bài viết
        Vậy chương trình giao tiếp nào với cổng COM, cũng cần "From_Load" phải ko bác?
        Nhưng "From_Load" ko có cái nút lệnh nào tr6n giao diện à? Mình chỉ thêm đoạn lệnh From Load vào để chạy thôi à?
        Thank you
        Tốt nhất là như thế.
        Form_Load là đoạn khai báo những đoạn code được thực thi khi cái "Form" (chương trình chính) được "Load" (được mở). Bản chất của nó cũng giống như cái Button_Click() ấy chả có gì khác cả.
        123...

        Comment


        • #34
          MScomm1.SThreshold là tham số cài đặt ngắt truyền của cổng com. Dặt =0 có nghĩa là không có ngắt xảy ra khi truyền tin từ máy tính. VD đặt =10 có nghĩa khi phần cứng máy tính gửi đi được 10 byte thì nó sẽ phát sinh một tín hiệu ngắt. Tín hiệu ngắt này được nhận biết trong sự kiện Oncom.

          Comment


          • #35
            Mình đang làm cái VB để làm giao diện với VXL.
            Mình đã thiết kế như các bạn nói ở trên nhưng không hiểu sao khi VXL của mình gửi ra một giá trị kiểu INT (là số 15 chẳng hạn) thì trên giao diện không hiển thị đúng số 15 mà nó hiển thị một kiểu khác. Làm thế nào để hiển thị giá trị thực từ VXL gửi ra.
            Mong các bạn giúp đỡ . đây là code VB của mình

            Private Sub Command1_Click()
            On Error GoTo OpenFalse
            If MSComm1.PortOpen = False Then
            MSComm1.PortOpen = True
            End If
            Exit Sub
            OpenFalse:
            MsgBox Err.Description & vbLf + vbCr + "Loi, khong the mo cong. Hay dong cac ung dung dang su dung cong COM"

            End Sub

            Private Sub Command2_Click()
            If MSComm1.PortOpen = True Then
            MSComm1.PortOpen = False
            End If
            End
            End Sub

            Private Sub Command3_Click()
            On Error GoTo sendfalse
            MSComm1.Output = Text1.Text
            Exit Sub
            sendfalse:
            MsgBox Err.Description & vbLf + vbCr + "Loi, Cong COM chua duoc mo, nhan Connect"
            End Sub

            Private Sub Form_Load()
            With MSComm1
            .Settings = cmbBaudRate.Text + "N,8,1"
            .RThreshold = 1
            .SThreshold = 0
            .InBufferSize = 1024
            .OutBufferSize = 1024
            .InputMode = comInputModeText
            .ParityReplace = ""
            .CommPort = Switch(cmbComPort.Text = "COM 1", 1, cmbComPort.Text = "COM 2", 2, cmbComPort.Text = "COM 3", 3, cmbComPort.Text = "COM 4", 4)
            End With
            End Sub

            Private Sub MSComm1_OnComm()
            Dim StringIn As String
            If MSComm1.CommEvent = comEvReceive Then
            StringIn = MSComm1.Input 'Nhan chuoi du lieu to VCOM
            Text2.Text = StringIn
            End If
            End Sub

            Comment


            • #36
              Bạn cộng thêm offset cho số bạn gửi lên vi xử lý để VB có thể hiển thị nó dưới dạng Text
              Ví dụ:
              Giả sử bạn muốn gửi số 1 từ vi xử lý lên hiển thị trên VB
              Trên Vi xử lý gửi putc(49) ; 1+48 =49
              trên VB giữ nguyên lệnh: Text2.Text = StringIn
              nếu ko cộng trên vi thì cộng trên VB cũng được: lấy mã ASCII của ký tự nhận được cộng thêm 48 rồi cho hiển thị.
              Còn nếu muốn hiển thị từng ký tự (VD: 15) thì bạn phải tách nó ra gửi lần lượt 2 số 1 và 5 sau đó trên VB cũng cộng thêm 48 vào từng số nhận được.
              Tại sao cộng thêm 48 thì bạn tham khảo thêm ở đây: http://www.asciitable.com/
              123...

              Comment


              • #37
                cám ơn các bác đã giúp đỡ tận tình. em đã xử lý được phần này rồi.

                Rất đơn giản. không cần cộng thêm 48
                đưa vào một mảng kiểu byte rồi dùng vòng for cho hiển thị ra là ok.

                Ở VB . mình khai báo

                X() As Byte
                Y As Byte / là số kí tự cần hiển thị
                x()= mscomm.input
                for i=0 to y-1
                abc. Text = abc.Text + x(i)
                next

                Comment


                • #38
                  Cách mới này đơn giản đấy .
                  Bạn có thể chú thích chi tiết hơn về đoạn code trên không?
                  123...

                  Comment


                  • #39
                    code vb:

                    Dim s As String
                    Dim s2 As String
                    Private Sub Command1_Click()
                    s = Text1.Text
                    MSComm1.Output = s
                    End Sub

                    Private Sub Command2_Click()
                    s2 = MSComm1.Input
                    If (s2 = "c") Then
                    Text.Text2 = "DHBKHN"
                    End If
                    Text3.Text = "TOI LA TOI"
                    End Sub

                    Private Sub Command3_Click()
                    End
                    End Sub

                    Private Sub Form_Load()
                    MSComm1.CommPort = 1
                    MSComm1.Settings = "9600,n,8,1"
                    MSComm1.PortOpen = True
                    End

                    code c trong CCS:
                    #include <18F4550.h>
                    //#device ADC=10
                    #fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG
                    #use delay(clock=20000000)
                    #use rs232( baud=9600, xmit=PIN_C6, rcv=PIN_C7)

                    char s=0;

                    #INT_RDA
                    void RDA_isr()
                    {
                    s=getc();
                    puts(s);
                    output_bit(PIN_B4,1);
                    }

                    VOID main()
                    {
                    set_tris_B(00000000);
                    enable_interrupts(GLOBAL);
                    enable_interrupts(INT_RDA);
                    output_b(0x01);

                    while(1){}
                    }

                    các bác cho em hỏi, tại sao khi em truyền kí tự c từ PC xuống thì em lại không nhận được kí tự c từ cổng Com? có ai biết thì giúp em nhé.

                    Comment


                    • #40
                      Nguyên văn bởi bac86_bk3i Xem bài viết
                      các bác cho em hỏi, tại sao khi em truyền kí tự c từ PC xuống thì em lại không nhận được kí tự c từ cổng Com? có ai biết thì giúp em nhé.
                      Bạn nhận được ký tự gì thế?
                      khi đàn sếu bay qua

                      Comment


                      • #41
                        Cho mình hỏi có ai biết hàm nào trong VC++ dùng để chuyển đổi chuỗi thành giá trị byte ko? Sao mình chỉ tìm thấy những hàm đổi chuỗi ra giá trị integer hay double..... nhưng ko có hàm nào dùng để đổi ra byte cả

                        Comment


                        • #42
                          Các bạn cho mình hỏi không hiểu sao ở PLC mình mã hóa ra ký tự ASCII rồi mà khi truyền lên VB6.0 thì khi dùng lệnh StringIn = MsComm1.Input thì vẫn hiển thị chuỗi bình thường. Thế nhưng khi mình dùng lệnh chuyển chuỗi sang dạng số thì lại báo lỗi. Speed = cdbl(StringIn). Khi debug thì mình thấy StringIn có dạng các ký tự ô trống. Phải xử lý thế nào đây. Các bạn giúp mình với nhé.

                          Comment


                          • #43
                            Nguyên văn bởi h_h_h Xem bài viết
                            Em cũng mới học VB , và xem mục này thấy anh Bắc hướng dẫn chi tiết, em cũng thử làm 1 chương trình nhỏ truyền ký tự giữa máy tinh qua cổng com và em có thêm một số chức năng hay , gửi lên cho mọi người xem và cho ý kiến.
                            em tải về mà không dùng được bác ạ

                            Comment


                            • #44
                              Có ai thử truyền tín hiệu từ AVR-CDC về VB 6.0 chưa, ví dụ em dùng kiểm tra ComEvents = OnComReceive sau đó lấy Textbox.text = Comm1.Input
                              Ví dụ:
                              Chuỗi gửi về có dạng "103S204A405B"
                              Thì nhận được tại Textbox ko hoàn toàn như vậy, thường là bị lỗi
                              Chuỗi nhận tại Textbox có khi là "405B" có khi là "204A405B", rất ít khi nhận đúng chuỗi gửi về. Ai thử làm vấn đề này giải thích hộ em chút...

                              Comment


                              • #45
                                Em có dùng bộ chuyển đổi RS485-RS232 để giao tiếp với máy tính, nhưng con Max485 lại có 1 chân điều khiển đường truyền(Transmitt or Receive). Vậy làm sao để có thể điều khiển được chân này từ máy tính? Theo như em biết có thể dùng chân RTS của cổng com, nhưng em không biết tác động đến chân này bằng cách nào.

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X