Thông báo

Collapse
No announcement yet.

nhận 1 chuỗi ký tự từ PC

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

  • nhận 1 chuỗi ký tự từ PC

    mình đang làm đồ án TN..có liên quan đến MODBUS...vấn đề mình đang gặp phải là
    +cách lập trình kiểm tra lỗi CRC.
    +nhận 1 chuỗi ký tự > 1 byte từ PC xuống VĐK

    --bạn nào đã làm về đề tài này rồi thì giúp mình với..chân thành cảm ơn.

  • #2
    Mình cũng đang vướn vấn đề này, mình muốn nhận một chuỗi kí tự từ máy vào VDK, nhưng VDK nó chỉ nhận được có một kí tự thôi. Ý đồ của mình ở đây là muốn nhận các chuổi kí tự từ máy tính về sao đó thực hiện một lệnh tương ứng với chuổi kí tự đó. VD: khi nhận được chuỗi"v100pr thì VDK bật tắt porta, khi nhận "v200pr" thì bật tắt portd chẳng hạn.
    nhờ các pro của diễn đàn tư vấn cho em với.
    cảm ơn các pro và các bạn thành viên, chúc một ngày tốt lành.

    Comment


    • #3
      mình cũng bị vướng như các bạn vì ko có thời gian tim hiêu chip có hỗ trợ các hàm nhận chuỗi ko nên mình nghĩ ra 1 cách khá đơn giản. trên PC sẽ gởi 1 mã lệnh xuông chip phải xác định độ dài vi dụ abc, bạn trèn thêm 2 ký tự nữa vào là @abc# mục đích báo hiểu bắt đầu và kết thúc chuỗi ký tự, trên PC bạn dùng timer (trong VB6) dinh thời gian la 1ms cứ 1 ms là nó tách 1 ký tự trong chuỗi ký tự gửi xuông chíp, còn trên chíp thì dùng ngắt nếu có ký tự trong bộ đệm thì ngắt để nhận, và chú ý rầng phải kiểm tra ký tự bắt đầu và kết thúc để ráp chuỗi lại, Mình đã làm cách này để gởi 1 mã lệnh điều khiển chip+

      Comment


      • #4
        cam on bạn, bạn có thể hướng dẫn mình chi tiết hơn ko? bạn có thể đưa code để mình và mọi người tham khảo ko? Nếu là AVR thì như thế nào nhỉ?

        Comment


        • #5
          Bác chanhlun10 hướng dẫn chi tiết phần VB được k ạ ! Phần tách 1ms để gửi ấy em đang mắc về cái giao tiếp pc vs vdk này
          bác cho em xin đoạn code VB of bác được k ?
          yh: vinhtk1205
          ngu phải học

          Comment


          • #6
            Với cái modbus một khung dữ liệu của nó sẽ được truyền liên tục và kết thúc bằng 1 khoảng trống không truyền dữ liệu. Tức là nếu máy tính gửi dữ liệu xuống vdk, vdk sẽ thực hiện nhận dữ liệu và gán các giá trị vào một mảng buffer đệm dữ liệu, mỗi khi một byte được nhận nó sẽ khởi động mộ bộ timer, timer này sẽ xác định khỏng thời gian tối đa giữa hai kí tự liên tiếp trong một khung truyền, néu sau khoảng thời gian trể này mà pic không nhận được kí tự thì có nghĩa là kết thúc một khung truyền pic sẽ thực hiện việc giải mã khung truyền này nếu mã CRC đúng thì vdk sẽ thực hiện lệnh trong khung ngược lại khung dữ liệu sẽ bị hủy. Việc tính toán CRC nếu dùng bằng thuật toán sẽ tốn khá nhiều thời gian xử lí của VDK vì vậy người ta thường sử dụng các bảng tra CRC, và việc tính toán CRC được thực hiện đồng thời cùng với dữ liệu được nhận.
            Giả sử bạn quy ước khug truyền gồm Source,Dest,Func,datalengh.dataN1,....,CRCh,CRCl
            thì khi vdk nhận được khung trên và kiểm tra CRC thành công thì nó bắt đầu kiểm tra byte Dest tức là điạ chỉ slave cần thực hiện nhiện vụ, vdk sẽ kiểm tra với địa chỉ của nó nếu đúng là địa chỉ của nó thì nó tiếp tục đọc mã lệnh Func và thực hiện lệnh này, ngược lại nếu ko phải địa chỉ của nó thì VDK sẽ bỏ qua khung truyền này và tiếp tục chờ khung mới.
            Còn việc bạn nhận về 1 chuỗi bạn muốn xác định VDK nhận chuỗi "v100pr" cái này đơn giản là bạn sử dụng các hàm xử lý chuỗi, chi tiết các hàm bạn xem trong file string.h.
            Mình cũng chỉ góp ý vậy thôi

            Comment

            Về tác giả

            Collapse

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

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

            Collapse

            Đang tải...
            X