Thông báo

Collapse
No announcement yet.

Xử lý dữ liệu nhận về từ cổng COM trong thời gian thực...

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

  • Xử lý dữ liệu nhận về từ cổng COM trong thời gian thực...

    Mình đang làm 1 project về gọi điện thoại, trong đó có nhiều máy con và 1 máy mẹ (do mình điều khiển thông qua RS 232). Cụ thể là:
    Máy con muốn liên lạc với máy mẹ thì sẽ gửi 1 đoạn byte (độ dài 8 byte) đến máy mẹ, và nhiệm vụ của mình là nghe đoạn byte đó và xác định đó là máy con có ID bao nhiêu (cái này mình đã làm đc) và có cho phép nói chuyện với máy mẹ hay không (cái này mình cũng làm đc).
    Nhưng trong quá trình làm mình gặp vài vấn đề sau, thực sự là tìm nhiều cách rồi mà không giải quyết được..
    Thứ 1: Xử lý động trong thời gian thực. Mình muốn liên tục cập nhật request của các máy con, tức là khi máy con request là phải có tên trong danh sách luôn. Hiện tại thì mình chỉ xác định được máy con nào request sau khi ấn 1 button lưu lại dữ liệu nhận được từ các máy con rồi mới xử lý. Mình rất muốn quá trình đọc đoạn byte gửi về và phân tích này nó tự động.
    Thứ 2: Mình lắng nghe đoạn dữ liệu gửi về ở dạng string, sau đó chuyển về dạng byte, sau đó chuyển ra hex rồi phân tích chuỗi hex đó theo protocol cho trước, nhưng cách phân tích này nhiều lúc gặp lỗi vì là thao tác cắt, xén chuỗi string rồi so sánh:
    Ví dụ 07 6A 01 01 02 00 02 00 => minh sẽ cắt xén lấy ra chuỗi tại vị trí 13-14 tức là 02 để xử lý, nhưng hay gặp lỗi do dữ liệu nhận về không đủ, hoặc nhiều máy con cùng request dẫn đến chèn dữ liệu lên nhau và không đúng định dạng protocol cho trước.
    Có một anh đã nói mình nên dùng Ring buffer, nhưng mình chưa hiểu lắm, mình nghĩ nhận dữ liệu về dạng byte rồi lưu vào buffer để chờ xử lý vẫn là chuẩn nhất rồi chứ không phải là receive data như kiểu của mình. Nhưng nên lưu thế nào thì mình vẫn đang mắc.
    Mong các bạn giúp đỡ mình 2 vấn đề này. Mình rất cần hướng giải quyết sớm vì sắp đến deadline rồi. Cám ơn mọi người nhiều.

  • #2
    Bạn học bên viễn thông chắc luôn và đã được học qua ghép kênh ..bạn đưa các hoạt động bạn cần xử lý vào một chu kỳ làm việc và cứ thế mà lặp đi lặp lại cái chu kỳ đó n lần thôi ...thân

    Comment


    • #3
      Nguyên văn bởi pephuong Xem bài viết
      Bạn học bên viễn thông chắc luôn và đã được học qua ghép kênh ..bạn đưa các hoạt động bạn cần xử lý vào một chu kỳ làm việc và cứ thế mà lặp đi lặp lại cái chu kỳ đó n lần thôi ...thân
      Mình viết chương trình này trên C# bạn ơi, sao mà ghép kênh gì được?

      Comment


      • #4
        Bài toán của bạn là giải quyết vấn đề đa truy nhập. Đường truyền nhận RS232 của máy tính phải phục vụ đồng thời cho 8 thuê bao. Vậy có 2 cách:
        1. Thiết lập một kênh truyền RS232 đi từ máy tính đến các đầu vào RS232 nhận của 8 máy điện thoại con. Máy tính lần lượt phát tín hiệu cho phép từng máy con truyền về (phương pháp thẻ bài). Hoặc máy tính gửi 1 bản tin đồng bộ, sau đó là chia thời gian làm 8 khe, mỗi máy tính để bàn được phát dữ liệu trong khe tương ứng với ID của nó (ID máy từ 1-8) (phương pháp đa truy nhập phân chia theo thơi gian).
        2. Lắp một mạch dùng vi điều khiển, lập trình 8 cổng UART mềm với tốc độ thấp (ví dụ baudrate =300, 4 byte tốn gần 200ms -chấp nhận được). Dùng đầu ra UART cứng của VĐK nối máy tính. Lập trình đọc 8 kênh tốc độ thấp để dồn dữ liệu vào 1 kênh tốc độ cao truyền về máy tính.

        Comment


        • #5
          cám ơn mọi người nhiều

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          Đang tải...
          X