Thông báo

Collapse
No announcement yet.

Lay du lieu tu bo chi thi so can?

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

  • Lay du lieu tu bo chi thi so can?

    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. Vi vao thoi diem nhan connect ta co the nhan duoc ky tu thu nhat hoac ky tu thu 6.

  • #2
    Nguyên văn bởi phamhoangdun
    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. Vi vao thoi diem nhan connect ta co the nhan duoc ky tu thu nhat hoac ky tu thu 6.
    đàu tiên bạn phải tóm được chuỗi nhận về
    dùng so sánh ký tự tìm ra đầu chuỗi và cuối chuỗi
    sau đó dùng
    Trim(), Left(), Right() của vb mà cắt bỏ những phần lôi thôi
    --------------------------------------------------------------
    Bán các loại UPS Online công suất từ 1KVA đến 800 KVA và Accu cho UPS + Ôtô
    --------------------------------------------------------------

    Comment


    • #3
      minh dung su kien nhan du lieu trong timer nen luc nhan dung luc nhan sai. Bac manhnd giup e voi

      Comment


      • #4
        Nếu sử dụng Timer , bạn nên nhận chuỗi dữ liệu và lưu vào bộ đệm , sau đó kiểm tra và lọc lấy dữ liệu đúng để hiển thị.
        Giả sử bạn nhận khung dữ liệu : 1 byte bắt đầu+4 byte data + 1 byte kết thúc
        VD :
        Buffer$=Buffer$ + MSComm1.Input
        sau đó kiểm tra byte bắt đầu và kết thúc (dùng lệnh Instr ), nếu đúng thì lọc 4 byte data ra hiển thị.

        Comment


        • #5
          Minh da su dung timer nhung do du lieu truyen lien tuc nen khi minh nhan Connect thi co khi hien thi dung va co khi hien thi sai. Vi du minh co mot chuoi sau --0.000kgCr
          minh viet doan code nhu sau :
          im str As String
          Private Sub Command1_Click()
          MSComm1.CommPort = 1
          MSComm1.Settings = "9600,n,8,1"
          MSComm1.PortOpen = True
          MSComm1.InputLen = 10
          Timer1.Enabled = True
          End Sub

          Private Sub Command2_Click()
          if MSComm1.PortOpen = True then mscomm1.portOpen = False
          End
          End Sub

          Private Sub Timer1_Timer()( interval=10)
          If MSComm1.InBufferCount = 10 Then
          str = MSComm1.Input
          lblnhan.Caption = Mid(str, 3, 5)
          End If
          End Sub

          Ket qua neu nhu dung thoi diem thi no hien thi = 0.000
          Neu khong dung thoi diem thi no hien thi = .000 hoac .00 hoac 0 hoac khogn co gi het
          Mong cac bac chi dum.

          Comment


          • #6
            Ban thu dung su kien oncom xem !Tuy nhien de 1 du lieu chac chan hon le thi so byte nan ve phai lon hon so byte trong chuoi format.Thi du 1 chuoi format la 18 byte thi nen lay ve 38 byte va dung ham Instr de tim ra ma dau (vit du NET+chr$(10)+chr$(13)) .chuoi can lay la 7 byte ke tiep.
            If MSComm1.CommEvent = comEvReceive Then
            sss = MSComm1.Input
            chuoidau=NET+chr$(10)+chr$(13)
            pos = InStr(sss, chuoidau)
            KL=Val(Mid$(sss, pos + 1, 4))
            txtKl=Mid$(sss, pos + 1, 7)
            Thiết bị định vị ,hộp đen :

            Comment


            • #7
              Như mình đã nói ở trên, không nên chỉ nhận một lần bằng lệnh str=MSComm1.Input , vì như vậy dễ bị sai dữ liệu.
              Bạn nên nhận liên tục cả một chuỗi dài : str=str+MSComm1.Input
              Sau đó kiểm tra , lọc lấy dữ liệu cần cho đến khi chắc chắn nhận đúng dữ liệu.

              Comment


              • #8
                Minh da lam nhu the nay ma van ko duoc.
                Private Sub Command1_Click()
                MSComm1.CommPort = 1
                MSComm1.Settings = "9600,n,8,1"
                MSComm1.PortOpen = True
                MSComm1.InputLen = 20
                Timer1.Enabled = True
                End Sub

                Private Sub Command2_Click()
                if MSComm1.PortOpen = True then mscomm1.portOpen = False
                End
                End Sub

                Private Sub Timer1_Timer()( interval=10)
                If MSComm1.InBufferCount =0 Then
                str = MSComm1.Input + mscomm1.Input
                chuoicuoi = chr(Cr)
                pos = InStr(str, chuoicuoi)
                lblnhan.Caption = Mid$(str, pos - 2, 5)
                End If
                End Sub
                Mong cac bac chi dum em.

                Comment


                • #9
                  Nguyên văn bởi phamhoangdun
                  Minh da lam nhu the nay ma van ko duoc.
                  Private Sub Command1_Click()
                  MSComm1.CommPort = 1
                  MSComm1.Settings = "9600,n,8,1"
                  MSComm1.PortOpen = True
                  MSComm1.InputLen = 20
                  Timer1.Enabled = True
                  End Sub

                  Private Sub Command2_Click()
                  if MSComm1.PortOpen = True then mscomm1.portOpen = False
                  End
                  End Sub

                  Private Sub Timer1_Timer()( interval=10)
                  If MSComm1.InBufferCount =0 Then
                  str = MSComm1.Input + mscomm1.Input

                  chuoicuoi = chr(Cr)
                  pos = InStr(str, chuoicuoi)
                  lblnhan.Caption = Mid$(str, pos - 2, 5)
                  End If
                  End Sub
                  Mong cac bac chi dum em.
                  Bạn sửa lại :
                  MSComm1.InputLen = 20
                  thành MSComm1.InputLen=0 ' xóa bộ đệm nhận

                  và :
                  If MSComm1.InBufferCount >=1 Then
                  str = str + MSComm1.Input ' chú ý biến str khai báo global
                  ....
                  end if

                  Comment


                  • #10
                    cam on bac trungkt minh se thu lai.

                    Comment


                    • #11
                      Em da thu lai nhung neu su dung su kien OnCom thi no chi lay duoc chuoi minh can lan dau tien. Lan thu hai thi khong the duoc no khong lien tuc nhan. Neu dat vao trong timer thi chay duoc nhung van lay chuoi sai. Mong cac bac giup em voi.

                      Comment


                      • #12
                        mình nghĩ bạn nên làm theo phương án của trung, nhớ điều chỉnh timer sao cho có thể đồng bộ với tốc độ baud, thường mình để 10ms với 9600, có những lần đã đau đầu vì timer và baud rate rồi.
                        bạn hãy chọn một baudrate cụ thể sau đó điều chỉnh interval của timer sao cho phù hợp.
                        chúc thành công.
                        --------------------------------------------------------------
                        Bán các loại UPS Online công suất từ 1KVA đến 800 KVA và Accu cho UPS + Ôtô
                        --------------------------------------------------------------

                        Comment


                        • #13
                          minh da chinh timer voi interval = 10 voi baud la 9600 nhung neu su dung su kien OnCom thi no chi lay duoc chuoi minh can lan dau tien. Lan thu hai thi khong the duoc no khong lien tuc nhan. Neu dat vao trong timer thi chay duoc nhung van lay chuoi sai. Mong cac bac giup em voi.
                          Neu minh ko dung su kien Oncom ma de su kien kien nhan dât ve tu com trong timer thi van chay duoc nhung nhu phan tren minh da noi no van ko the lay du lieu chinh xac theo minh mong muon. Doan code sau minh viet tren timer nho cac ban chi giup :
                          Private Sub Command1_Click()
                          MSComm1.CommPort = 1
                          MSComm1.Settings = "9600,n,8,1"
                          MSComm1.PortOpen = True
                          MSComm1.InputLen = 10
                          Timer1.Enabled = True
                          End Sub

                          Private Sub Command2_Click()
                          if MSComm1.PortOpen = True then mscomm1.portOpen = False
                          End
                          End Sub

                          Private Sub Timer1_Timer()( interval=10)
                          If MSComm1.InBufferCount = 10 Then
                          str = MSComm1.Input
                          lblnhan.Caption = Mid(str, 3, 5)
                          End If
                          End Sub

                          Neu su dung mscomm1.iputlen = 20 nhu bac trung thi du lieu lay ve van bi sai .
                          Last edited by phamhoangdun; 30-11-2005, 13:37.

                          Comment


                          • #14
                            Thế thì tốt nhất là nên nhận vào một mảng string
                            rồi xử lý kiểm tra cắt xén string đó thôi
                            rồi mới đưa ra hiển thị
                            bạn dùng win Terminal kiểm tra coi thử xem dữ liệu nhận về fomat có chuẩn không.
                            khi dùng nó thì mỗi gói sẽ được hiển thị trên một dòng
                            ví dụ :
                            -00000kg
                            -00001kg
                            ............
                            -00009kg

                            phương án là bạn tóm được ký tự gửi về là LF - Line Feed rồi dò theo độ dài của gói tin đó ( ví dụ này là 8 ký tự ) và gán vào một string. theo tôi cách này sẽ chíhn xác hơn.
                            chúc thành công
                            --------------------------------------------------------------
                            Bán các loại UPS Online công suất từ 1KVA đến 800 KVA và Accu cho UPS + Ôtô
                            --------------------------------------------------------------

                            Comment


                            • #15
                              Đây là đoạn code trích ra trong chương trình mình làm để đọc số liệu từ bộ Indicator MettLer-Toledo :

                              Private Sub Form_Load()
                              On Error Resume Next
                              With MSComm1
                              If .PortOpen = True Then .PortOpen = False
                              .CommPort = 2
                              .Settings = "9600,N,8,1"
                              .InBufferSize = 2000
                              .InputLen = 0
                              .OutBufferSize = 64
                              .PortOpen = True
                              End With
                              End Sub

                              Private Sub Timer1_Timer()
                              Timer1.Enabled = False
                              MSComm1_OnComm
                              Timer1.Enabled = True
                              End Sub

                              Private Sub MSComm1_OnComm()
                              With MSComm1
                              If .InBufferCount >= 1 Then
                              Dulieu = Dulieu + .Input
                              txtDulieu.Text=Dulieu ' TextBox kiểm tra xem dữ liệu truyền lên như thế nào
                              End If
                              End With
                              End Sub


                              *Bạn thử kiểm tra xem phần dữ liệu truyền lên hộp Text txtDulieu có liên tục không ?
                              Nếu đúng thì lọc lấy dữ liệu cần để hiển thị.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X