瀏覽代碼

项目结构不合理,此次更新项目结构

master
ZTZHANG\ztzhang 2 週之前
父節點
當前提交
9bfbf5c8a9
共有 11 個檔案被更改,包括 17 行新增268 行删除
  1. +5
    -3
      Modbus/Modbus.vcxproj
  2. +8
    -2
      Modbus/Modbus.vcxproj.filters
  3. +0
    -17
      Modbus/include/modbus_log.h
  4. +0
    -43
      Modbus/include/modbus_rtu_pkg.h
  5. +0
    -13
      Modbus/include/modbus_rtu_receiver.h
  6. +0
    -20
      Modbus/include/modbus_rtu_sender.h
  7. +4
    -2
      Modbus/src/modbus.cpp
  8. +0
    -13
      Modbus/src/modbus_log.cpp
  9. +0
    -129
      Modbus/src/modbus_rtu_pkg.cpp
  10. +0
    -13
      Modbus/src/modbus_rtu_receiver.cpp
  11. +0
    -13
      Modbus/src/modbus_rtu_sender.cpp

+ 5
- 3
Modbus/Modbus.vcxproj 查看文件

@@ -71,7 +71,7 @@
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
@@ -95,9 +95,10 @@
<QtRcc Include="resources\modbus.qrc" />
<QtUic Include="ui\modbus.ui" />
<QtMoc Include="include\modbus.h" />
<ClCompile Include="src\modbus_master.cpp" />
<ClCompile Include="src\modbus_err.cpp" />
<ClCompile Include="src\modbus_rtu_receiver.cpp" />
<ClCompile Include="src\modbus_log.cpp" />
<ClCompile Include="src\modbus_msg.cpp" />
<ClCompile Include="src\modbus_rtu_pkg.cpp" />
<ClCompile Include="src\modbus_rtu_sender.cpp" />
<ClCompile Include="src\modbus.cpp" />
@@ -106,11 +107,12 @@
<ResourceCompile Include="resources\Modbus.rc" />
</ItemGroup>
<ItemGroup>
<QtMoc Include="include\modbus_log.h" />
<QtMoc Include="include\modbus_msg.h" />
<QtMoc Include="include\modbus_rtu_receiver.h" />
<QtMoc Include="include\modbus_err.h" />
<ClInclude Include="include\modbus_rtu_sender.h" />
<QtMoc Include="include\modbus_rtu_pkg.h" />
<QtMoc Include="include\modbus_master.h" />
<ClInclude Include="x64\Debug\qt\uic\ui_modbus.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />


+ 8
- 2
Modbus/Modbus.vcxproj.filters 查看文件

@@ -52,7 +52,7 @@
<ClCompile Include="src\modbus_rtu_pkg.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\modbus_log.cpp">
<ClCompile Include="src\modbus_msg.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\modbus_rtu_receiver.cpp">
@@ -61,6 +61,9 @@
<ClCompile Include="src\modbus_err.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\modbus_master.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="x64\Debug\qt\uic\ui_modbus.h">
@@ -74,7 +77,7 @@
<QtMoc Include="include\modbus_rtu_pkg.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="include\modbus_log.h">
<QtMoc Include="include\modbus_msg.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="include\modbus_rtu_receiver.h">
@@ -83,5 +86,8 @@
<QtMoc Include="include\modbus_err.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="include\modbus_master.h">
<Filter>Header Files</Filter>
</QtMoc>
</ItemGroup>
</Project>

+ 0
- 17
Modbus/include/modbus_log.h 查看文件

@@ -1,17 +0,0 @@
#pragma once

#include <QObject>


/**
* .
*/
class Modbus_Log : public QObject
{
Q_OBJECT

public:
Modbus_Log(QObject *parent);
~Modbus_Log();
};


+ 0
- 43
Modbus/include/modbus_rtu_pkg.h 查看文件

@@ -1,43 +0,0 @@
#pragma once
#include <QObject>
#include <QVector>
#include <QByteArray>
#include <QtEndian>
#include <QDebug>


/**
* Modbus RTU数据包格式合成和解析
* 创建传输或发送数据包的统一格式
* 计算以及解析CRC16校验码
*/
class Modbus_RTU_Pkg : public QObject
{
Q_OBJECT

public:
explicit Modbus_RTU_Pkg(QObject *parent = nullptr);
~Modbus_RTU_Pkg();

// 构建Modbus RTU数据包
QVector<quint8> build_modbus_pkg(
quint8 slave_addr,
quint8 func_code,
const QVector<quint8>& work_data
);

// 解析Modbus RTU数据包
bool parse_modbus_pkg(
const QVector<quint8> &pkg,
quint8 &slave_addr,
quint8 &func_code,
QVector<quint8> &work_data
);



private:
// 计算Modbus CRC16
quint16 calc_crc(const QVector<quint8>& pkg_data) const;
};


+ 0
- 13
Modbus/include/modbus_rtu_receiver.h 查看文件

@@ -1,13 +0,0 @@
#pragma once

#include <QObject>

class Modbus_RTU_Receiver : public QObject
{
Q_OBJECT

public:
Modbus_RTU_Receiver(QObject *parent);
~Modbus_RTU_Receiver();
};


+ 0
- 20
Modbus/include/modbus_rtu_sender.h 查看文件

@@ -1,20 +0,0 @@
#pragma once

#include <QObject>
#include <QVector>
#include <QByteArray>

/**
* Modbus RTU发送数据类
* 主要实现了功能码
*/
class Modbus_RTU_Sender : public QObject
{
public:
explicit Modbus_RTU_Sender(QObject *parent);
~Modbus_RTU_Sender();



};


+ 4
- 2
Modbus/src/modbus.cpp 查看文件

@@ -32,20 +32,21 @@ Modbus::~Modbus()
}




// 实现下拉框显示串口
void Modbus::init_serialport_client()
{
ui->serialBox->addItems(get_avail_serialport());
}

// 下拉框获取信息
QStringList Modbus::get_avail_serialport()
{
// 下拉框串口
QStringList listAvailSerialPort;

// 遍历可用串口
foreach(const QSerialPortInfo& info, QSerialPortInfo::availablePorts())
foreach(const QSerialPortInfo & info, QSerialPortInfo::availablePorts())
{
serial->setPort(info);
// 使用ReadWrite模式打开串口成功,则加入列表
@@ -58,6 +59,7 @@ QStringList Modbus::get_avail_serialport()
return listAvailSerialPort;
}


// 使用按钮打开串口
void Modbus::serial_button_clicked()
{


+ 0
- 13
Modbus/src/modbus_log.cpp 查看文件

@@ -1,13 +0,0 @@
#include "../include/modbus_log.h"

Modbus_Log::Modbus_Log(QObject *parent)
: QObject(parent)
{

}

Modbus_Log::~Modbus_Log()
{

}


+ 0
- 129
Modbus/src/modbus_rtu_pkg.cpp 查看文件

@@ -1,129 +0,0 @@
#include "../include/modbus_rtu_pkg.h"

Modbus_RTU_Pkg::Modbus_RTU_Pkg(QObject *parent)
: QObject(parent)
{

}

Modbus_RTU_Pkg::~Modbus_RTU_Pkg()
{

}

/**
* 构建Modbus RTU数据包
*
* \param slave_addr
* \param func_code
* \param work_data
* \return
*/
QVector<quint8> Modbus_RTU_Pkg::build_modbus_pkg(
quint8 slave_addr,
quint8 func_code,
const QVector<quint8>& work_data
)
{
QVector<quint8> pkg;

try {
// 添加设备地址
pkg.append(slave_addr);
// 添加功能码
pkg.append(func_code);
// 添加工作数据
pkg.append(work_data);

// 计算CRC
quint16 crc = calc_crc(pkg);

// 添加CRC,小端序
// 低字节
pkg.append(static_cast<quint8>(crc & 0xFF));
// 高字节
pkg.append(static_cast<quint8>((crc >> 8) & 0xFF));
}
catch (const std::exception& ex) {
// TODO:抛出异常
}

return pkg;
}

/**
* 解析Modbus RTU数据包
*
* \param pkg
* \param slave_addr
* \param func_code
* \param work_data
* \return
*/
bool Modbus_RTU_Pkg::parse_modbus_pkg(
const QVector<quint8>& pkg,
quint8& slave_addr,
quint8& func_code,
QVector<quint8>& work_data
)
{
// 检查数据包长度
if (pkg.size() < 4)
{
// TODO:抛出异常

return false;
}

// 提取设备地址
slave_addr = pkg[0];
// 提取功能码
func_code = pkg[1];
// 提取工作数据
work_data.clear();
if (pkg.size() > 4)
{
work_data = pkg.mid(2, pkg.size() - 4);
}
// 提取数据包自带的CRC
quint16 crc_bring = static_cast<quint16>(pkg[pkg.size() - 2]) |
(static_cast<quint16>(pkg[pkg.size() - 1]) << 8);
// 计算接收数据CRC
QVector<quint8> pkg_data = pkg.mid(0, pkg.size() - 2);
quint16 crc_after_calc = calc_crc(pkg_data);
// CRC校验
if (crc_after_calc != crc_bring)
{
// TODO:抛出异常

return false;
}

return true;
}

/**
* 使用查表法计算CRC
*
* \param pkg_data
* \return
*/
quint16 Modbus_RTU_Pkg::calc_crc(const QVector<quint8>& pkg_data) const
{
static const quint16 crcTable[] = {
0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,
0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,
0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,
0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841
};

quint16 crc = 0xFFFF;
for (int i = 0; i < pkg_data.size(); ++i) {
crc ^= static_cast<quint16>(pkg_data[i]);
crc = (crc >> 8) ^ crcTable[crc & 0x0F];
crc = (crc >> 8) ^ crcTable[crc & 0x0F];
}
return crc;
}

+ 0
- 13
Modbus/src/modbus_rtu_receiver.cpp 查看文件

@@ -1,13 +0,0 @@
#include "../include/modbus_rtu_receiver.h"

Modbus_RTU_Receiver::Modbus_RTU_Receiver(QObject *parent)
: QObject(parent)
{

}

Modbus_RTU_Receiver::~Modbus_RTU_Receiver()
{

}


+ 0
- 13
Modbus/src/modbus_rtu_sender.cpp 查看文件

@@ -1,13 +0,0 @@
#include "../include/modbus_rtu_sender.h"


Modbus_RTU_Sender::Modbus_RTU_Sender(QObject* parent)
: QObject(parent)
{
}

Modbus_RTU_Sender::~Modbus_RTU_Sender()
{

}


Loading…
取消
儲存