Đăng Ký
Kết quả 1 đến 2 của 2

Threaded View

  1. #1
    Thành viên cấp 1
    Ngày tham gia
    Feb 2012
    Bài viết
    46
    Thanks
    1
    34 lượt trong 10 bài viết

    Post Một ví dụ đơn giản về giao thức Modbus RTU sử dụng C#.



    Mình làm một ví dụ đơn giản lập trình giao thức Modbus RTU sử dụng C# để chia sẻ cho anh em tham khảo.
    Bạn nào không có thiết bị thì có thể sử dụng phần mềm mô phỏng thiết bị modbus slave có trong phần example (Chạy file ModbusSlaveSetup.exe để cài đặt modbus Slave).
    Test theo video phía trên.
    Tài liệu mình gửi kèm cũng rất chi tiết. Các bạn có thể bám vào đó để lập trình cho các Function còn lại.
    Ở đây mình lấy Function 03 để làm ví dụ đọc 5 thanh ghi từ thiết bị hỗ trợ modbus slave.
    Chú ý:
    1. Ví dụ viết trên Visual C# 2012.
    2. Cách tính CRC/LRC cho chế độ Modbus RTU/ASCII. Cái này cực kỳ quan trọng cho giao thức ở chế độ RTU/ASCII.


    • CRC:
      Code:
              /// <summary>
              /// Calculate Cyclical Redundancy Check
              /// </summary>
              /// <param name="messageArray">The data used in CRC</param>
              /// <param name="CRC">The 2 byte CRC</param>        
              public static void CRC(byte[] messageArray, ref byte[] CRC)
              {
                  ushort CRCFull = 0xFFFF;
                  char CRCLSB;
      
                  for (int i = 0; i < (messageArray.Length) - 2; i++)
                  {
                      CRCFull = (ushort)(CRCFull ^ messageArray[i]);
      
                      for (int j = 0; j < 8; j++)
                      {
                          CRCLSB = (char)(CRCFull & 0x0001);
                          CRCFull = (ushort)((CRCFull >> 1) & 0x7FFF);
      
                          if (CRCLSB == 1)
                              CRCFull = (ushort)(CRCFull ^ 0xA001);
                      }
                  }
                  CRC[1] = (byte)((CRCFull >> 8) & 0xFF);
                  CRC[0] = (byte)(CRCFull & 0xFF);
              }
    • LRC:
      Code:
              /// <summary>
              /// Calculate Longitudinal Redundancy Check.
              /// </summary>
              /// <param name="data">The data used in LRC</param>
              /// <returns>LRC value</returns>
              public static byte LRC(byte[] data)
              {
                  if (data == null)
                      throw new ArgumentNullException("Tham số truyền vào không tồn tại phần tử nào");
                  byte lrc = 0;
                  foreach (byte b in data)
                      lrc += b;
                  lrc = (byte)((lrc ^ 0xFF) + 1);
                  return lrc;
              }


    Download:
    1. Example.rar
    2. Protocol Description.pdf


Đánh dấu

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •  
Back to Top