workingForRead

main
dplimin 2023-11-30 12:58:49 +03:00
parent 5717a7c939
commit 08b57b8ac0
11 changed files with 4445 additions and 8 deletions

View File

@ -1,4 +1,6 @@
QT += core gui QT += core gui
QT += network serialport serialbus
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
@ -17,13 +19,20 @@ DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \ SOURCES += \
main.cpp \ main.cpp \
mainwindow.cpp mainwindow.cpp \
modbusoverudp.cpp \
windowchannel.cpp
HEADERS += \ HEADERS += \
mainwindow.h enums.h \
mainwindow.h \
modbusoverudp.h \
windowchannel.h
FORMS += \ FORMS += \
mainwindow.ui mainwindow.ui \
windowchannel.ui
win32:RC_FILE = icon.rc
# Default rules for deployment. # Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin qnx: target.path = /tmp/$${TARGET}/bin

148
enums.h
View File

@ -1,4 +1,152 @@
#ifndef ENUMS_H #ifndef ENUMS_H
#define ENUMS_H #define ENUMS_H
#include <QObject>
//Привет. Меня зовут Дима и я пишу на КУТЭ 2 месяц.
//Вообщем я придерживаюсь такой концепции
//set=state(состояние прибора)+sens(чувствительность)
// между компонентами передаем SET, в разных сигналах для чувствительности и для состояния
typedef enum { CHARGE = 0, ICP} typeIIN;
typedef enum { Ku0_1 = 0, Ku0_2, Ku0_5, Ku1, Ku2, Ku5, Ku10, Ku20, Ku50, Ku100, Ku200, Ku500, Ku1000 } typeIKU;
typedef enum { Hp0_2 = 0, Hp0_3, Hp1, Hp2, Hp10 } typeIFV;
typedef enum { Lp200 = 0, Lp500, Lp1000, Lp5000, Lp10000, Lp20000, Lp50000, Lp100000 } typeIFN;
typedef enum { Ch1 = 0, Ch2, Ch3, Ch4, Ch5, Ch6, Ch7,
Ch8, Ch9, Ch10, Ch11, Ch12, Ch13, Ch14, Ch15, Ch16 } typeCHANNEL;
typedef enum { Accel = 0, Pascal, Nython } typeVALUE;
typedef enum
{
Out_0_0001 = 0,
Out_0_0002 = 1,
Out_0_0005 = 2,
Out_0_0010 = 3,
Out_0_0020 = 4,
Out_0_0050 = 5,
Out_0_0100 = 6,
Out_0_0200 = 7,
Out_0_0500 = 8,
Out_0_1000 = 9,
Out_0_2000 = 10,
Out_0_5000 = 11,
Out_1_0000 = 12,
Out_2_0000 = 13,
Out_5_0000 = 14,
Out_10_000 = 15,
Out_20_000 = 16,
Out_50_000 = 17,
Out_100_00 = 18,
Out_200_00 = 19,
Out_500_00 = 20,
Out_1000_0 = 21,
Out_2000_0 = 22,
Out_5000_0 = 23,
Out_10000 = 24
} typeOUTPUT;
typedef enum{SENS=0, STATE} typeREQ;
typedef struct {
typeCHANNEL channel;
typeIKU IKU;
typeIIN IIN;
typeIFV IFV;
typeIFN IFN;
float SENS;
typeVALUE VALUE;
typeOUTPUT OUTPUT;
} Set;
typedef struct
{
quint16 OWN; // 0,1 4001
quint16 BAUD; // 2,3 4002
quint16 INFB; // 4,5 4003 //БАЙТ КОНТРОЛЯ ЧЕТНОСТИ
quint16 IIN; // 6,7 5001
quint16 IFV; // 8,9 5002 //ФИЛЬТР ВЫСОКИХ
quint16 IFN; // 10,11 5003 // ФИЛЬТР НИЗКИХ
quint16 IKU; // 12,13 5004 //КОЭФИЦИЕНТ УСИЛЕНИЯ
quint16 IKE; // 14,15 5005
quint16 IKD; // 16,17 5006
quint16 IKS; // 18,19 5007
quint16 IPZ; // 20,21 5008 1- плавуящая то есть разорванная - по схеме наоборот
quint16 OPZ; // 22,23 5009 ПЛАВУЮЩАЯ ЗЕМЛЯ
quint16 VAL; // 24,25 5010 -- пикокулоны метры в секнду.....
quint16 TEMP; // 26,27 NONE
float KCOND; // 24,25,26,27 7501
float SENS; // 28,29,30,31 7502
float ACCEL; // 32,33,34,35 7503
} UserData_TypeDef; // ********LENGTH = 28 bytes***********
typedef enum
{
CHARGE_1 = 0,
KU_2,
KU_5,
KU_10,
KU_x10,
CHARGE_10,
CHARGE_0_1,
ICP_1,
ICP_10,
KU_200,
KU_500,
KU_1000
} IC_CORR;
typedef union
{
uint8_t ch[4];
uint16_t sh[2];
uint32_t lg;
float fl;
} sfloat;
typedef union{
uint8_t ch[4];
float fl;
} usfloat;
typedef union
{
uint8_t ch[4];
uint32_t lg;
} ulong_t;
typedef union
{
uint8_t ch[4];
int32_t lg;
} long_t;
typedef union{
uint8_t ch[2];
uint16_t sh;
} usshort;
typedef union
{
uint8_t ch[2];
int16_t sh;
} sshort_t;
#endif // ENUMS_H #endif // ENUMS_H

BIN
icon.ico 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -1,11 +1,41 @@
#include "mainwindow.h" #include "mainwindow.h"
#include "ui_mainwindow.h" #include "ui_mainwindow.h"
#include "windowchannel.h"
class ModbusOverUdp;
MainWindow::MainWindow(QWidget *parent) MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent) : QMainWindow(parent)
, ui(new Ui::MainWindow) , ui(new Ui::MainWindow)
{ {
ui->setupUi(this); ui->setupUi(this);
modbus=new ModbusOverUdp();
this->setWindowTitle ("Программа для управления A142");
ui->widget1->setWindowsChannel(Ch1);
ui->widget2->setWindowsChannel(Ch2);
ui->widget3->setWindowsChannel(Ch3);
ui->widget4->setWindowsChannel(Ch4);
connect(this->modbus,SIGNAL(stateRecive (Set)),
ui->widget1,SLOT(setState(Set)));
connect(modbus,SIGNAL(stateRecive (Set)),
ui->widget2,SLOT(setState(Set)));
connect(modbus,SIGNAL(stateRecive (Set)),
ui->widget3,SLOT(setState(Set)));
connect(modbus,SIGNAL(stateRecive (Set)),
ui->widget4,SLOT(setState(Set)));
connect(modbus,SIGNAL(sensRecive(Set)),
ui->widget1,SLOT(setSens(Set)));
connect(modbus,SIGNAL(sensRecive(Set)),
ui->widget2,SLOT(setSens(Set)));
connect(modbus,SIGNAL(sensRecive(Set)),
ui->widget3,SLOT(setSens(Set)));
connect(modbus,SIGNAL(sensRecive(Set)),
ui->widget4,SLOT(setSens(Set)));
} }
MainWindow::~MainWindow() MainWindow::~MainWindow()
@ -13,3 +43,15 @@ MainWindow::~MainWindow()
delete ui; delete ui;
} }
void MainWindow::on_pushButtonConnect_clicked()
{
if(isConnected==0){
modbus->connectTo(ui->lineEditAddres->text(),ui->lineEditPort->text().toInt());
ui->pushButtonConnect->setText("Отключиться");
isConnected=1;
}else{
modbus->disconnectFrom();
ui->pushButtonConnect->setText("Подключиться");
isConnected=0;
}
}

View File

@ -2,6 +2,9 @@
#define MAINWINDOW_H #define MAINWINDOW_H
#include <QMainWindow> #include <QMainWindow>
#include "modbusoverudp.h"
#include "enums.h"
#include "QDebug"
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; } namespace Ui { class MainWindow; }
@ -13,8 +16,17 @@ class MainWindow : public QMainWindow
public: public:
MainWindow(QWidget *parent = nullptr); MainWindow(QWidget *parent = nullptr);
bool isConnected=0;
ModbusOverUdp* modbus;
~MainWindow(); ~MainWindow();
private slots:
void on_pushButtonConnect_clicked();
private: private:
Ui::MainWindow *ui; Ui::MainWindow *ui;
}; };

View File

@ -6,17 +6,171 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>800</width> <width>539</width>
<height>600</height> <height>474</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>MainWindow</string> <string>MainWindow</string>
</property> </property>
<widget class="QWidget" name="centralwidget"/> <widget class="QWidget" name="centralwidget">
<widget class="QMenuBar" name="menubar"/> <widget class="QPushButton" name="pushButtonConnect">
<property name="geometry">
<rect>
<x>220</x>
<y>19</y>
<width>151</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>Подключится</string>
</property>
</widget>
<widget class="QLineEdit" name="lineEditAddres">
<property name="geometry">
<rect>
<x>53</x>
<y>20</y>
<width>81</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>192.168.0.50</string>
</property>
</widget>
<widget class="QLineEdit" name="lineEditPort">
<property name="geometry">
<rect>
<x>170</x>
<y>21</y>
<width>41</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>7000</string>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>12</x>
<y>21</y>
<width>41</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Адрес</string>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>140</x>
<y>23</y>
<width>29</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Порт:</string>
</property>
</widget>
<widget class="windowChannel" name="widget1" native="true">
<property name="geometry">
<rect>
<x>10</x>
<y>50</y>
<width>257</width>
<height>186</height>
</rect>
</property>
</widget>
<widget class="windowChannel" name="widget2" native="true">
<property name="geometry">
<rect>
<x>10</x>
<y>240</y>
<width>257</width>
<height>186</height>
</rect>
</property>
</widget>
<widget class="windowChannel" name="widget3" native="true">
<property name="geometry">
<rect>
<x>270</x>
<y>50</y>
<width>257</width>
<height>186</height>
</rect>
</property>
</widget>
<widget class="windowChannel" name="widget4" native="true">
<property name="geometry">
<rect>
<x>270</x>
<y>240</y>
<width>257</width>
<height>186</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
<x>480</x>
<y>20</y>
<width>61</width>
<height>21</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>15</pointsize>
</font>
</property>
<property name="text">
<string>A142</string>
</property>
</widget>
<widget class="QPushButton" name="pushButtonSettings">
<property name="geometry">
<rect>
<x>380</x>
<y>20</y>
<width>81</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>Настройка...</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>539</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/> <widget class="QStatusBar" name="statusbar"/>
</widget> </widget>
<customwidgets>
<customwidget>
<class>windowChannel</class>
<extends>QWidget</extends>
<header location="global">windowchannel.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/> <resources/>
<connections/> <connections/>
</ui> </ui>

View File

@ -1,6 +1,196 @@
#include "modbusoverudp.h" #include "modbusoverudp.h"
ModbusOverUdp::ModbusOverUdp(QObject *parent) : QObject(parent) 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() <<"Чувствительность для модбас адреса"<<toSend.channel+1 <<res.fl;
toSend.SENS= res.fl;
emit sensRecive(toSend);
break;
case 25:
//qDebug() <<"Подвалило состояние для модбас адреса"<<toSend.channel+1;
toSend.IIN=(typeIIN)(recived[4]-0);
toSend.IFV=(typeIFV)(recived[6]-0);
toSend.IFN=(typeIFN)(recived[8]-0);
toSend.IKU=(typeIKU)(recived[10]-0);
//toSend.OUTPUT=(typeOUTPUT)(recived[2]-0);
toSend.VALUE=(typeVALUE)(recived[22]-0);
emit stateRecive(toSend);
break;
default:
qDebug() <<"ТЫ не понимаешь, это другое";
qDebug() <<"Это"<<recived<<"размером"<<recived.size();
break;
//Разберись с этим
// "\x01\x10\x13\x89\x00\n\x14\x00\x00\x00\x04\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x05\xB3" размером 29
}
}
void ModbusOverUdp::connectTo(QString ipAdress, quint16 port)
{
udpSocket = new QUdpSocket(this);
targetIp =QHostAddress(ipAdress);
targetPort=port;
connect(udpSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));
isConnected=1;
}
void ModbusOverUdp::disconnectFrom()
{
isConnected=0;
}
void ModbusOverUdp::req(quint16 adr, typeREQ TYPEREQ)
{
QByteArray data;
switch (TYPEREQ)
{
case SENS:{
data.resize(8);
data[0]=adr;
data[1]=0x3;
data[2]=0x1b;
data[3]=0x5c;
data[4]=0x00;
data[5]=0x2;
uint16_t crcToSend= Crc16((uint16_t)6, data);
data[6]=LO(crcToSend);
data[7]=HI(crcToSend);
break;
}
case STATE:{
data.resize(8);
data[0]=adr;
data[1]=0x3;
data[2]=0x13;
data[3]=0x89;
data[4]=0x00;
data[5]=0xa;
uint16_t crcToSend= Crc16((uint16_t)6, data);
data[6]=LO(crcToSend);
data[7]=HI(crcToSend);
break;
}
}
sendPendingDatagrams(data);
}
void ModbusOverUdp::testReq()
{
QByteArray data;
data.resize(8);
data[0]=0x1;
data[1]=0x3;
data[2]=0x13;
data[3]=0x89;
data[4]=0x00;
data[5]=0x4;
uint16_t crcToSend= Crc16((uint16_t)6, data);
data[6]=LO(crcToSend);
data[7]=HI(crcToSend);
sendPendingDatagrams(data);
}
void ModbusOverUdp::sendPendingDatagrams( QByteArray & data )
{
QNetworkDatagram datagram;
datagram.setDestination(targetIp,targetPort);
datagram.setData(data);
// qDebug()<<"sended"<<datagram.data();
udpSocket->writeDatagram(datagram);
}
void ModbusOverUdp::stateSend(Set setWithState)
{
}
void ModbusOverUdp::sensSend(Set setWithSens)
{
}

View File

@ -2,15 +2,88 @@
#define MODBUSOVERUDP_H #define MODBUSOVERUDP_H
#include <QObject> #include <QObject>
#include "enums.h"
#include "QTimer"
#include "QDebug"
#include <QUdpSocket>
#include <QtNetwork>
#define LO(x) ((uint8_t) ((x) & 0xff))
#define HI(x) ((uint8_t) (((x) >> 8) & 0xff))
class ModbusOverUdp : public QObject class ModbusOverUdp : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
uint16_t Crc16Table[256]=
{
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,
0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,
0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,
0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,
0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,
0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,
0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,
0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,
0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,
0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,
0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,
0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,
0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,
0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,
0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,
0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,
0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,
0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,
0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,
0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,
0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,
0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,
0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,
0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,
0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,
0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,
0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,
0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,
0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040
};
explicit ModbusOverUdp(QObject *parent = nullptr); explicit ModbusOverUdp(QObject *parent = nullptr);
void sendPendingDatagrams(QByteArray &data);
uint16_t Crc16(uint16_t len, QByteArray iobuf);
uint16_t Crc16(uint16_t len, uint16_t iobuf[]);
QHostAddress targetIp;
quint16 targetPort;
signals: signals:
void stateRecive (Set setWithState);
void sensRecive (Set setWithSens);
public slots:
void connectTo(QString ipAdress, quint16 port);
void disconnectFrom();
void stateSend(Set setWithState);
void sensSend(Set setWithSens);
void readPendingDatagrams();
void timeout();
void req(quint16 adr, typeREQ TYPEREQ);
void testReq();
private:
QTimer *timer;
bool isConnected=0;
QUdpSocket* udpSocket;
void processTheDatagram(QNetworkDatagram &datagram);
}; };
#endif // MODBUSOVERUDP_H #endif // MODBUSOVERUDP_H

513
windowchannel.cpp 100644
View File

@ -0,0 +1,513 @@
#include "windowchannel.h"
#include "ui_windowchannel.h"
windowChannel::windowChannel(QWidget *parent) :
QWidget(parent),
ui(new Ui::windowChannel)
{
ui->setupUi(this);
//ДЕЛАЕМ ФОН ЧЕРНЫМ
QPalette Pal(palette());
Pal.setColor(QPalette::Background, Qt::black);
this->setAutoFillBackground(true);
this->setPalette(Pal);
this->show();
thisData.IFN=Lp200;
thisData.IFV=Hp1;
thisData.IIN=ICP;
thisData.IKU=Ku1;
thisData.SENS=1.0;
thisData.VALUE=Accel;
}
windowChannel::~windowChannel()
{
delete ui;
}
void windowChannel::setSens(Set data)
{
if(data.channel==this->channel){
thisData.SENS=data.SENS;
reDraw();
}
}
void windowChannel::setState(Set data)
{
if(data.channel==this->channel){
thisData.IKU=data.IKU;
thisData.IIN=data.IIN;
thisData.IFV=data.IFV;
thisData.IFN=data.IFN;
thisData.VALUE=data.VALUE;
reDraw();
}
}
void windowChannel::reDraw()
{
if(thisData.SENS<100000&&thisData.SENS>=10000) { ui->labelSENS->setText(QString::number(thisData.SENS,'f', 0));}
else if(thisData.SENS<10000&&thisData.SENS>=1000) { ui->labelSENS->setText(QString::number(thisData.SENS,'f', 1));}
else if(thisData.SENS<1000&&thisData.SENS>=100) {ui->labelSENS->setText(QString::number(thisData.SENS,'f', 2));}
else if(thisData.SENS<100&&thisData.SENS>=10){ui->labelSENS->setText(QString::number(thisData.SENS,'f', 3));}
else {ui->labelSENS->setText(QString::number(thisData.SENS,'f', 4));}
switch (thisData.IIN) {
case ICP:{
ui->labelIIN->setText("IEPE");
break;
}
case CHARGE:{
ui->labelIIN->setText("Заряд");
break;
}
}//end switch
switch (thisData.IFV) {
case Hp0_2:{
ui->labelVCH->setText("0.2Гц");
break;
}
case Hp0_3:{
ui->labelVCH->setText("0.3Гц");
break;
}
case Hp1:{
ui->labelVCH->setText("1Гц");
break;
}
case Hp2:{
ui->labelVCH->setText("2Гц");
break;
}
case Hp10:{
ui->labelVCH->setText("10Гц");
break;
}
}//end switch
switch (thisData.IFN) {
case Lp200:{
ui->labelNCH->setText("200Гц");
break;
}
case Lp500:{
ui->labelNCH->setText("500Гц");
break;
}
case Lp1000:{
ui->labelNCH->setText("1кГц");
break;
}
case Lp5000:{
ui->labelNCH->setText("5кГц");
break;
}
case Lp10000:{
ui->labelNCH->setText("10кГц");
break;
}
case Lp20000:{
ui->labelNCH->setText("20кГц");
break;
}
case Lp50000:{
ui->labelNCH->setText("50кГц");
break;
}
case Lp100000:{
ui->labelNCH->setText("100кГц");
break;
}
}//end switch
switch (thisData.VALUE) {
case Accel:{
if(thisData.IIN==ICP)(ui->labelUNIT1->setText("мВ/м/c2"));
else{ui->labelUNIT1->setText("пКл/м/с2");}
break;
}
case Nython:{
if(thisData.IIN==ICP)(ui->labelUNIT1->setText("мВ/Н"));
else{ui->labelUNIT1->setText("пКл/Н");}
break;
}
case Pascal:{
if(thisData.IIN==ICP)(ui->labelUNIT1->setText("мВ/Па"));
else{ui->labelUNIT1->setText("пКл/Па");}
break;
}
}//end switch
ui->labelOUT->setText(DisplayIKUA142(thisData.SENS, thisData.IKU, thisData.VALUE));
}
void windowChannel::setWindowsChannel(typeCHANNEL channel)
{
this->channel = channel;
ui->labelChanel->setNum((int)(channel+1));
}
typeCHANNEL windowChannel::getWindowsChannel()
{
return channel;
}
typeIKU windowChannel::VerifyGainA142(float sens, typeIKU iku)
{
if(sens <= 0.0010f) //0.001
{
if(iku > Ku1000)
{
iku = Ku1000;
}
}
else
if(/*sens >= 0.0011f && */sens <= 10.000f) //0.002
{
if(iku > Ku1000)
{
iku = Ku1000;
}
}
else
if(/*sens >= 10.001f && */sens <= 20.000f) //20
{
if(iku > Ku500)
{
iku = Ku500;
}
}
else
if(/*sens >= 20.001f && */sens <= 50.000f) //50
{
if(iku > Ku200)
{
iku = Ku200;
}
}
else
if(/*sens >= 50.001f && */sens <= 100.00f) //100
{
if(iku > Ku100)
{
iku = Ku100;
}
}
else
if(/*sens >= 100.01f && */sens <= 200.00f) //200
{
if(iku > Ku50)
{
iku = Ku50;
}
}
else
if(/*sens >= 200.01f && */sens <= 500.00f) //500
{
if(iku > Ku20)
{
iku = Ku20;
}
}
else
if(/*sens >= 500.01f && */sens <= 1000.0f) //1000
{
if(iku > Ku10)
{
iku = Ku10;
}
}
else
if(/*sens >= 1000.01f && */sens <= 2000.0f) //2000
{
if(iku > Ku5)
{
iku = Ku5;
}
}
else
if(/*sens >= 2000.01f && */sens <= 5000.0f) //5000
{
if(iku > Ku2)
{
iku = Ku2;
}
}
else
if(/*sens >= 5000.01f && */sens <= 10000.0f) //10000
{
if(iku > Ku1)
{
iku = Ku1;
}
}
else
if(/*sens >= 10001.0f && */sens <= 20000.0f) //20000
{
if(iku > Ku0_5)
{
iku = Ku0_5;
}
}
else
if(/*sens >= 20001.0f && */sens <= 50000.0f) //50000
{
if(iku > Ku0_2)
{
iku = Ku0_2;
}
}
else
if(sens < 100000.0f) //99999
{
if(iku > Ku0_1)
{
iku = Ku0_1;
}
}
return iku;
}
QString windowChannel::DisplayIKUA142(float sens, typeIKU iku ,typeVALUE value)
{uint out;
//вбычку обьявлю тут
const char *pOUT[3][25] =
{
{
"0.0001 мВ/м/c2",
"0.0002 мВ/м/c2",
"0.0005 мВ/м/c2",
"0.001 мВ/м/c2",
"0.002 мВ/м/c2",
"0.005 мВ/м/c2",
"0.01 мВ/м/c2",
"0.02 мВ/м/c2",
"0.05 мВ/м/c2",
"0.1 мВ/м/c2",
"0.2 мВ/м/c2",
"0.5 мВ/м/c2",
"1 мВ/м/c2",
"2 мВ/м/c2",
"5 мВ/м/c2",
"10 мВ/м/c2",
"20 мВ/м/c2",
"50 мВ/м/c2",
"100 мВ/м/c2",
"200 мВ/м/c2",
"500 мВ/м/c2",
"1 В/м/c2",
"2 В/м/c2",
"5 В/м/c2",
"10 В/м/c2"
},
{
"0.0001 мВ/Па",
"0.0002 мВ/Па",
"0.0005 мВ/Па",
"0.001 мВ/Па",
"0.002 мВ/Па",
"0.005 мВ/Па",
"0.01 мВ/Па",
"0.02 мВ/Па",
"0.05 мВ/Па",
"0.1 мВ/Па",
"0.2 мВ/Па",
"0.5 мВ/Па",
"1 мВ/Па",
"2 мВ/Па",
"5 мВ/Па",
"10 мВ/Па",
"20 мВ/Па",
"50 мВ/Па",
"100 мВ/Па",
"200 мВ/Па",
"500 мВ/Па",
"1 В/Па",
"2 В/Па",
"5 В/Па",
"10 В/Па"
},
{
"0.0001 мВ/Н",
"0.0002 мВ/Н",
"0.0005 мВ/Н",
"0.001 мВ/Н",
"0.002 мВ/Н",
"0.005 мВ/Н",
"0.01 мВ/Н",
"0.02 мВ/Н",
"0.05 мВ/Н",
"0.1 мВ/Н",
"0.2 мВ/Н",
"0.5 мВ/Н",
"1 мВ/Н",
"2 мВ/Н",
"5 мВ/Н",
"10 мВ/Н",
"20 мВ/Н",
"50 мВ/Н",
"100 мВ/Н",
"200 мВ/Н",
"500 мВ/Н",
"1 В/Н",
"2 В/Н",
"5 В/Н",
"10 В/Н"
}
};
if(sens <= 0.0010f) //0.001
{
out = iku;
}
else
if(/*sens >= 0.0011f && */sens <= 0.0020f) //0.002
{
out = (uint16_t)iku + 1;
}
else
if(/*sens >= 0.0021f && */sens <= 0.0050f) //0.005
{
out = (uint16_t)iku + 2;
}
else
if(/*sens >= 0.0051f && */sens <= 0.0100f) //0.01
{
out = (uint16_t)iku + 3;
}
else
if(/*sens >= 0.0101f && */sens <= 0.0200f) //0.02
{
out = (uint16_t)iku + 4;
}
else
if(/*sens >= 0.0201f && */sens <= 0.0500f) //0.05
{
out = (uint16_t)iku + 5;
}
else
if(/*sens >= 0.0501f && */sens <= 0.1000f) //0.1
{
out = (uint16_t)iku + 6;
}
else
if(/*sens >= 0.1001f && */sens <= 0.2000f) //0.2
{
out = (uint16_t)iku + 7;
}
else
if(/*sens >= 0.2001f && */sens <= 0.5000f) //0.5
{
out = (uint16_t)iku + 8;
}
else
if(/*sens >= 0.5001f && */sens <= 1.0000f) //1
{
out = (uint16_t)iku + 9;
}
else
if(/*sens >= 1.0001f && */sens <= 2.0000f) //2
{
out = (uint16_t)iku + 10;
}
else
if(/*sens >= 2.0001f && */sens <= 5.0000f) //5
{
out = (uint16_t)iku + 11;
}
else
if(/*sens >= 5.0001f && */sens <= 10.000f) //10
{
out = (uint16_t)iku + 12;
}
else
if(/*sens >= 10.001f && */sens <= 20.000f) //20
{
out = (uint16_t)iku + 13;
}
else
if(/*sens >= 20.001f && */sens <= 50.000f) //50
{
out = (uint16_t)iku + 14;
}
else
if(/*sens >= 50.001f && */sens <= 100.00f) //100
{
out = (uint16_t)iku + 15;
}
else
if(/*sens >= 100.01f && */sens <= 200.00f) //200
{
out = (uint16_t)iku + 16;
}
else
if(/*sens >= 200.01f && */sens <= 500.00f) //500
{
out = (uint16_t)iku + 17;
}
else
if(/*sens >= 500.01f && */sens <= 1000.0f) //1000
{
out = (uint16_t)iku + 18;
}
else
if(/*sens >= 1000.1f && */sens <= 2000.0f) //2000
{
out = (uint16_t)iku + 19;
}
else
if(/*sens >= 2000.1f && */sens <= 5000.0f) //2000
{
out = (uint16_t)iku + 20;
}
else
if(/*sens >= 5000.1f && */sens <= 10000.0f) //10000
{
out = (uint16_t)iku + 21;
}
else
if(/*sens >= 10001 && */sens <= 20000.0f) //20000
{
out = (uint16_t)iku + 22;
}
else
if(/*sens >= 20001 && */sens <= 50000.0f) //50000
{
out = (uint16_t)iku + 23;
}
else
if(/*sens >= 50001 && */sens <= 100000) //100000
{
out = (uint16_t)iku + 24;
}
return QString::fromStdString(pOUT[(uint16_t)value][out]);
}

40
windowchannel.h 100644
View File

@ -0,0 +1,40 @@
#ifndef WINDOWCHANNEL_H
#define WINDOWCHANNEL_H
#include <QWidget>
#include <enums.h>
namespace Ui {
class windowChannel;
}
class windowChannel : public QWidget
{
Q_OBJECT
public:
void setWindowsChannel(typeCHANNEL channel);
typeCHANNEL getWindowsChannel();
typeIKU VerifyGainA142(float sens,typeIKU iku);
QString DisplayIKUA142(float sens,typeIKU iku, typeVALUE value);
explicit windowChannel(QWidget *parent = nullptr);
~windowChannel();
public slots:
void setSens(Set data);
void setState(Set data);
void reDraw();
private:
Set thisData; //данные этой структуры
typeCHANNEL channel;
Ui::windowChannel *ui;
};
#endif // WINDOWCHANNEL_H

3256
windowchannel.ui 100644

File diff suppressed because it is too large Load Diff