Thông báo

Collapse
No announcement yet.

Giao thức Modbus

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

  • #31
    crc16 code

    tôi cũng mới nghiên cứu modbus rtu và đã viết xong firmware cho VDK. cách tính crc nhanh nhất đó là tra bảng. Dưới đây là đoạn code tạo ra bảng, và tính crc tôi viết bằng C# cho máy PC.

    Code:
    ushort[] crc16_table = new ushort[256]
    bool is_made_table = false;
    
            void make_crc_table()
            {
                int c;
    
                for (int i = 0; i < 256; i++)
                {
                    c = i;
                    for (int j = 0; j < 8; j++)
                    {
                        if ((c & 1) == 0)
                            c = c >> 1;
                        else
                            c = 0xa001 ^ (c >> 1);
                    }
                    crc16_table[i] = (ushort)c;
                }
                is_made_table = true;
            }       
    
            int CRC16(byte[] msg, int count)
            {
                if (!is_made_table) make_crc_table();
    
                int crc = 0xffff;
                
                for (int i = 0; i < count; i++)
                {
                    int index = crc ^ msg[i];          // XOR crc with message
                    index = index & 0xff;               // keep least significant byte
                    crc = crc >> 8;                      // get most significant byte of crc
                    crc = crc ^ crc16_table[index];
                }
    
                return ((crc & 0xFF) << 8) | ((crc >> 8) & 0xFF);  //swap crc before return
            }
    CUNG CẤP PSOC, MẠCH NẠP
    CHUYỂN ĐỔI USB <-> RS485 AutoBaud
    RS232 <-> RS485 MultiBaud
    MẠCH NẠP USBPPI S7-200
    Mobile: 0906076116
    Email:

    Comment


    • #32
      ethernet

      Hiện mình đang nghiên cứu về phần truyền dữ lieu giữa máy tính và hệ nhúng bằng mạng Ethernet(qua cổng RJ45, dung ENC28J60 làm mạch kết nối giữa Ethernet và hệ nhúng). Mình đã xây dựng song giao thức Modbus ( chế độ truyền RTU ), nhưng không biết cách chuyển từ khung RTU thành khung MAC(chuẩn Ethernet). Có bạn nào đang nghiên cứu hoặc quan tâm có thể chỉ giùm không ?
      Xin chân thành cảm ơn!

      Comment


      • #33
        mình cũng đang quan tâm đến modbus TCP/IP và rất mong được chỉ bảo
        CUNG CẤP PSOC, MẠCH NẠP
        CHUYỂN ĐỔI USB <-> RS485 AutoBaud
        RS232 <-> RS485 MultiBaud
        MẠCH NẠP USBPPI S7-200
        Mobile: 0906076116
        Email:

        Comment


        • #34
          bác nào làm rồi post lên cho cho em với để em tham khảo, phần code cho vdk và code VB cho PC.
          Thanks mọi người

          Comment


          • #35
            Các bác cho hỏi Modbus truyền xa tối đa được bao nhiêu mét ạ? theo như lí thuyết nói thì Modbus dùng RS232 để truyền, mà cái này khoảng cách truyền chỉ vài mét mà ở chỗ em 2 cái tủ cách nhau mấy chục mét vẫn dùng Modbus để giao tiếp.

            Comment


            • #36
              Nguyên văn bởi Duykiban Xem bài viết
              Các bác cho hỏi Modbus truyền xa tối đa được bao nhiêu mét ạ? theo như lí thuyết nói thì Modbus dùng RS232 để truyền, mà cái này khoảng cách truyền chỉ vài mét mà ở chỗ em 2 cái tủ cách nhau mấy chục mét vẫn dùng Modbus để giao tiếp.
              đổi sang chuẩn rs485 truyền được hơn cây số( 1 km)!

              Comment


              • #37
                modbus hoạt động như thế nào vậy!chỉ cho em với !

                Comment


                • #38
                  Nguyên văn bởi MinhHa Xem bài viết
                  trễ 1 khoảng truyền 1 ký tự
                  1/tốc độ truyền X [ số bít truyền ( 7hay8) + Start + Stop(1 hay 2) + parity( nếu có) ]. giây.

                  ví dụ truyền 9600,N,8

                  t = 1/9600 x (8 + 2) gần 11ms.
                  -Hình như bác nhầm thì phải t= 10/9600=1.1ms.

                  Comment


                  • #39
                    Chào các bạn, tôi thấy mọi người trao đổi về Modbus rất hay, tôi cũng đang bắt tay vào viết Modbus. Bài toàn là dùng VB 6.0 để viết giao diện và truyền thông với đồng hồ đa năng của hãng Dixsen. Đồng hồ sử dụng Modbus RTU (RS 485), tuy nhiên tôi gặp một số vấn đề chưa có hướng giải quyết, bạn nào biết chỉ giáo với:
                    - Trong VB 6.0 thì muốn truyền thông ra ngoài ta dùng MScom để truyền và nhận dự liệu, nhưng theo tôi biết thì MScom chuyền dữ liệu dạng Ascii còn đồng hồ lại nhận dự liệu dạng Hex vậy làm sao để hai thiết bị hiểu nhau?
                    - Trong VB làm sao để phát hiện đc khoảng thời gian 3,5 char times để bắt đầu và kết thúc một khung chuyền, đặc biệt là việc phát hiện 3.5 char times cho việc phát hiện kết thúc khung chuyền?
                    Mới bắt đầu "mò mẫm" vào viết Modbus mong các bạn giúp đỡ!

                    Comment


                    • #40
                      chào các anh chị trên diễn đàn.Hiện e đang tìm hiểu về Modbus RTU(Viết Win32 Application trên VS2005,ngôn ngữ C++).Em có chút thắc mắc muốn hỏi các anh chị là trong bản tin Modbus có nói đến Mã hàm (Function code),vậy thì chắc phải có một thư viện chứa khai báo và định nghĩa sẵn các hàm này với mã code tương ứng chứ ạ(trong VS 2005,ngôn ngữ C++ ấy ạ).Nếu có thì nó là thư viện nào cần #include trong chương trình ạ?Rất mong được mọi người giúp đỡ e giải đáp thắc mắc này với ạ

                      Comment


                      • #41
                        Mấy Anh cho em hỏi, tại sao số lượng slave tối đa của modbus là 247 mà không phải là 255 nhỉ? ( Vì address là 8 bit nên tối đa sẽ là 255 !)
                        thanks.

                        Comment


                        • #42
                          Mình cũng đang làm về Modbus RTU dùng win32 viết trên visual 2005,cũng có thắc mắc như bạn.Ai biết gợi ý mình với?

                          Comment


                          • #43
                            2 bạn tính kết nối 255 slave cho hệ thống của mình à?
                            All in one. Sài Gòn + Đồng Nai.

                            Comment


                            • #44
                              Cam ơn các bác với các luồng trên, nhưng giữa phương pháp tính theo công thức và phương pháp tra bảng thì phương pháp nào ưu việt hơn cho xin ý kiến.

                              Comment


                              • #45
                                Nguyên văn bởi zippro Xem bài viết
                                Mấy Anh cho em hỏi, tại sao số lượng slave tối đa của modbus là 247 mà không phải là 255 nhỉ? ( Vì address là 8 bit nên tối đa sẽ là 255 !)
                                thanks.
                                Một số địa chỉ được tổ chức viết chuẩn "giữ lại" để dùng riêng cho mục đích chưa xác định trong tương lai.
                                Phần mềm tự do hoặc không dùng máy tính nữa !.

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X