#include "modbusoverudp.h" ModbusOverUdp::ModbusOverUdp(QObject *parent) : QObject(parent) {timer= new QTimer(); timer->setInterval(1000); connect(timer,SIGNAL(timeout()),this,SLOT(timeout())); timer->start(); } void ModbusOverUdp::timeout() { if(isConnected){//запросы по всем фронтам for(quint16 i=1; i<=4; i++){ req(i,SENS); req(i,STATE); } } } uint16_t ModbusOverUdp::Crc16(uint16_t len, uint16_t iobuf[]) //CRC для сообщения такой то длинны /Len - начало контрольной сумимы { uint16_t i; uint16_t crc = 0xFFFF; for(i = 0; i < len; i++) { crc = (crc >> 8) ^ Crc16Table[(crc & 0xFF) ^ (iobuf[i]& 0xFF)]; } return crc; } uint16_t ModbusOverUdp::Crc16(uint16_t len, QByteArray iobuf) //CRC для сообщения такой то длинны /Len - начало контрольной сумимы { uint16_t i; uint16_t crc = 0xFFFF; for(i = 0; i < len; i++) { crc = (crc >> 8) ^ Crc16Table[(crc & 0xFF) ^ (iobuf[i] & 0xFF)]; // ввел маску 0xFF, тк прилетает 0хFFFFFFxx } return crc; } void ModbusOverUdp::readPendingDatagrams() { while (udpSocket->hasPendingDatagrams()) { QNetworkDatagram datagram = udpSocket->receiveDatagram(); processTheDatagram(datagram); } } void ModbusOverUdp::processTheDatagram(QNetworkDatagram & datagram) { QByteArray recived = datagram.data(); // копируем датаграмку в аррэй для удобной работы Set toSend; //структура для отправки в другой компонент sfloat res; //флоат для сборки из пакета модбас toSend.channel=(typeCHANNEL)(recived[0]-1); //Ch1 = 0 - в енаме switch (recived.size()){ // сужу о прибывшем по размеру пакета // ЭТО ПЛОХО!!! case 9: res.ch[3]=recived[3]; // Собираю флоат res.ch[2]=recived[4]; res.ch[1]=recived[5]; res.ch[0]=recived[6]; //qDebug() <<"Чувствительность для модбас адреса"<writeDatagram(datagram); } void ModbusOverUdp::stateSend(Set setWithState) { } void ModbusOverUdp::sensSend(Set setWithSens) { }