workingForRead
parent
5717a7c939
commit
08b57b8ac0
|
@ -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
148
enums.h
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
12
mainwindow.h
12
mainwindow.h
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
162
mainwindow.ui
162
mainwindow.ui
|
@ -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>
|
||||||
|
|
|
@ -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)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue