训练营Modbus项目代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 line
740 B

  1. #pragma once
  2. #include <QObject>
  3. #include <QVector>
  4. #include <QByteArray>
  5. #include <QtEndian>
  6. #include <QDebug>
  7. /**
  8. * Modbus RTU数据包格式合成和解析
  9. * 创建传输或发送数据包的统一格式
  10. * 计算以及解析CRC16校验码
  11. */
  12. class Modbus_RTU_Pkg : public QObject
  13. {
  14. Q_OBJECT
  15. public:
  16. explicit Modbus_RTU_Pkg(QObject *parent = nullptr);
  17. ~Modbus_RTU_Pkg();
  18. // 构建Modbus RTU数据包
  19. QVector<quint8> build_modbus_pkg(
  20. quint8 slave_addr,
  21. quint8 func_code,
  22. const QVector<quint8>& work_data
  23. );
  24. // 解析Modbus RTU数据包
  25. bool parse_modbus_pkg(
  26. const QVector<quint8> &pkg,
  27. quint8 &slave_addr,
  28. quint8 &func_code,
  29. QVector<quint8> &work_data
  30. );
  31. private:
  32. // 计算Modbus CRC16
  33. quint16 calc_crc(const QVector<quint8>& pkg_data) const;
  34. };