区别: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); }