区别:Modbus RTU 和 Modbus TCP

区别:Modbus RTU 和 Modbus TCP

Modbus RTU

常用函数,如下:

//打印数组数据
static void printArray(const QString& title, qint64 dataLen, const uint8_t* data)
{QString strPrint;for (int i = 0; i < dataLen; i++){strPrint += (QString("%1 ").arg(data[i], 2, 16, QChar('0')).toUpper());}qDebug() << title + " printArray:" << strPrint;
}// 计算 Modbus RTU CRC16
static uint16_t calculateCRC(const char* data, size_t length)
{// printArray("[LightBoxCom]::calculateCRC", length, (uint8_t*)data);uint16_t crc = 0xFFFF;for (size_t i = 0; i < length; i++){crc ^= data[i];for (uint8_t j = 0; j < 8; j++){if (crc & 0x0001){crc = (crc >> 1) ^ 0xA001;}else{crc = crc >> 1;}}}return crc;
}// 拼接字节 uint16_t
static uint16_t megerBytes(uchar back, uchar front)
{return static_cast<uint16_t>(front << 8 | back);
}// 拼接字节 uint32_t
static uint32_t megerBytes(uchar back, uchar bMid, uchar fMid, uchar front)
{return static_cast<uint16_t>(front << 24 | fMid << 16 | bMid << 8 | back);
}