modified: A142_Desktop.pro

new file:   customcombobox.cpp
new file:   customcombobox.h
	new file:   customlabel.cpp
	new file:   customlabel.h
	modified:   enums.h
	modified:   icon.ico
	new file:   ipsettings.cpp
	new file:   ipsettings.h
	new file:   ipsettings.ui
	modified:   main.cpp
	modified:   mainwindow.cpp
	modified:   mainwindow.h
	modified:   mainwindow.ui
	modified:   modbusoverudp.cpp
	modified:   modbusoverudp.h
	new file:   release/moc_predefs.h
	modified:   windowchannel.cpp
	modified:   windowchannel.h
	modified:   windowchannel.ui
main
dplimin 2023-12-07 16:55:56 +03:00
parent 08b57b8ac0
commit fa0d4f3db9
20 changed files with 1790 additions and 336 deletions

View File

@ -18,18 +18,25 @@ DEFINES += QT_DEPRECATED_WARNINGS
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \ SOURCES += \
customcombobox.cpp \
customlabel.cpp \
ipsettings.cpp \
main.cpp \ main.cpp \
mainwindow.cpp \ mainwindow.cpp \
modbusoverudp.cpp \ modbusoverudp.cpp \
windowchannel.cpp windowchannel.cpp
HEADERS += \ HEADERS += \
customcombobox.h \
customlabel.h \
enums.h \ enums.h \
ipsettings.h \
mainwindow.h \ mainwindow.h \
modbusoverudp.h \ modbusoverudp.h \
windowchannel.h windowchannel.h
FORMS += \ FORMS += \
ipsettings.ui \
mainwindow.ui \ mainwindow.ui \
windowchannel.ui windowchannel.ui
win32:RC_FILE = icon.rc win32:RC_FILE = icon.rc

50
customcombobox.cpp 100644
View File

@ -0,0 +1,50 @@
#include "customcombobox.h"
CustomComboBox::CustomComboBox(QWidget *parent) : QComboBox(parent)
{
this->setStyleSheet("QComboBox { background-color : black; color : #d4ae13; "
"}QComboBox:editable {"
" background: black; selection-background-color: black; color : #d4ae13;}"
"QComboBox QAbstractItemView {"
" selection-background-color: black;}"
);
}
void CustomComboBox::wheelEvent(QWheelEvent * event)
{
if (event->delta() > 0) {
emit wheelUp();
}else{
emit wheelDown();
}
}
/*
void CustomComboBox::mousePressEvent(QMouseEvent *event)
{
emit clicked();
}
*/
void CustomComboBox::enterEvent(QEvent * event)
{
this->setStyleSheet("QComboBox { background-color : black; color : green; "
"}QComboBox:editable {"
" background: black; selection-background-color: black;}"
"QComboBox QAbstractItemView {"
" selection-background-color: black;}"
);
emit focused();
}
void CustomComboBox::leaveEvent(QEvent * event)
{
this->setStyleSheet("QComboBox { background-color : black; color : #d4ae13; "
"}QComboBox:editable {"
" background: black; selection-background-color: black; color : #d4ae13; selection-color: #d4ae13; }"
"QComboBox QAbstractItemView {"
" selection-background-color: black;}"
);
emit unfocused();
}

31
customcombobox.h 100644
View File

@ -0,0 +1,31 @@
#ifndef CUSTOMCOMBOBOX_H
#define CUSTOMCOMBOBOX_H
#include <QWidget>
#include <QComboBox>
#include <QMouseEvent>
#include <QWheelEvent>
#include <QDebug>
class CustomComboBox : public QComboBox
{
Q_OBJECT
public:
explicit CustomComboBox(QWidget *parent = nullptr);
protected:
void wheelEvent(QWheelEvent * event) override;
// void mousePressEvent(QMouseEvent *event) override;
void enterEvent(QEvent * event) override;
void leaveEvent(QEvent * event) override;
signals:
void wheelUp();
void wheelDown();
void clicked();
void focused();
void unfocused();
};
#endif // CUSTOMCOMBOBOX_H

33
customlabel.cpp 100644
View File

@ -0,0 +1,33 @@
#include "customlabel.h"
CustomLabel::CustomLabel(QWidget *parent) : QLabel(parent)
{
}
void CustomLabel::wheelEvent(QWheelEvent * event)
{
if (event->delta() > 0) {
emit wheelUp();
}else{
emit wheelDown();
}
}
void CustomLabel::mousePressEvent(QMouseEvent *event)
{
emit clicked();
}
void CustomLabel::enterEvent(QEvent * event)
{
this->setStyleSheet("QLabel { color : green; }");
emit focused();
}
void CustomLabel::leaveEvent(QEvent * event)
{
this->setStyleSheet("QLabel { color : #d4ae13; }");
emit unfocused();
}

36
customlabel.h 100644
View File

@ -0,0 +1,36 @@
#ifndef CUSTOMLABEL_H
#define CUSTOMLABEL_H
#include <QLabel>
#include <QMouseEvent>
#include <QWheelEvent>
#include <QDebug>
class CustomLabel : public QLabel
{
Q_OBJECT
public:
explicit CustomLabel(QWidget *parent = nullptr);
protected:
void wheelEvent(QWheelEvent * event) override;
void mousePressEvent(QMouseEvent *event) override;
void enterEvent(QEvent * event) override;
void leaveEvent(QEvent * event) override;
//void mouseRe(QMouseEvent *event) override;
signals:
void wheelUp();
void wheelDown();
void clicked();
void focused();
void unfocused();
};
#endif // CUSTOMLABEL_H

View File

@ -10,7 +10,12 @@
typedef enum { CHARGE = 0, ICP} typeIIN; 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 { Ku0_1 = 0, Ku0_2, Ku0_5,
Ku1, Ku2, Ku5,
Ku10, Ku20, Ku50,
Ku100, Ku200, Ku500,
Ku1000 } typeIKU; // 13 штук
typedef enum { Hp0_2 = 0, Hp0_3, Hp1, Hp2, Hp10 } typeIFV; 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 { Lp200 = 0, Lp500, Lp1000, Lp5000, Lp10000, Lp20000, Lp50000, Lp100000 } typeIFN;
typedef enum { Ch1 = 0, Ch2, Ch3, Ch4, Ch5, Ch6, Ch7, typedef enum { Ch1 = 0, Ch2, Ch3, Ch4, Ch5, Ch6, Ch7,
@ -45,7 +50,7 @@ typedef enum
Out_10000 = 24 Out_10000 = 24
} typeOUTPUT; } typeOUTPUT;
typedef enum{SENS=0, STATE} typeREQ; typedef enum{SENS=0, STATE, IIN, IFV, IFN,IKU,VAL} typeREQ;
typedef struct { typedef struct {
typeCHANNEL channel; typeCHANNEL channel;

BIN
icon.ico

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

27
ipsettings.cpp 100644
View File

@ -0,0 +1,27 @@
#include "ipsettings.h"
#include "ui_ipsettings.h"
#include "mainwindow.h"
#include "modbusoverudp.h"
ipSettings::ipSettings(QWidget *parent, QString ip, ModbusOverUdp* modbus) :
QDialog(parent),
ui(new Ui::ipSettings)
{
this->setFixedSize(458,146);
ui->setupUi(this);
ui->lineEditOldIp->setText(ip);
ui->lineEditNewIp->setText(ip);
this->modbus=modbus;
}
ipSettings::~ipSettings()
{
delete ui;
}
void ipSettings::on_pushButton_clicked()
{
modbus->changeIp(ui->lineEditOldIp->text(), ui->lineEditNewIp->text());
ui->labelResult->setText("Произведите подключение по новому адресу");
}

29
ipsettings.h 100644
View File

@ -0,0 +1,29 @@
#ifndef IPSETTINGS_H
#define IPSETTINGS_H
#include <QDialog>
#include "modbusoverudp.h"
namespace Ui {
class ipSettings;
}
class ipSettings : public QDialog
{
Q_OBJECT
public:
explicit ipSettings(QWidget *parent = nullptr, QString ip="0", ModbusOverUdp *modbus= nullptr);
~ipSettings();
private slots:
void on_pushButton_clicked();
private:
Ui::ipSettings *ui;
ModbusOverUdp *modbus;
};
#endif // IPSETTINGS_H

144
ipsettings.ui 100644
View File

@ -0,0 +1,144 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ipSettings</class>
<widget class="QDialog" name="ipSettings">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>458</width>
<height>146</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<widget class="QLineEdit" name="lineEditOldIp">
<property name="geometry">
<rect>
<x>140</x>
<y>60</y>
<width>161</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QLineEdit" name="lineEditNewIp">
<property name="geometry">
<rect>
<x>140</x>
<y>90</y>
<width>161</width>
<height>20</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>20</x>
<y>60</y>
<width>81</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Текущий адрес</string>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>20</x>
<y>90</y>
<width>81</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string>Новый адрес</string>
</property>
</widget>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
<x>310</x>
<y>60</y>
<width>47</width>
<height>13</height>
</rect>
</property>
<property name="text">
<string>:7000</string>
</property>
</widget>
<widget class="QLabel" name="label_4">
<property name="geometry">
<rect>
<x>310</x>
<y>90</y>
<width>47</width>
<height>13</height>
</rect>
</property>
<property name="text">
<string>:7000</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>350</x>
<y>54</y>
<width>81</width>
<height>61</height>
</rect>
</property>
<property name="text">
<string>Сменить
адрес</string>
</property>
</widget>
<widget class="QLabel" name="label_5">
<property name="geometry">
<rect>
<x>20</x>
<y>10</y>
<width>411</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Данный режим предназначен для смены адреса A142. </string>
</property>
</widget>
<widget class="QLabel" name="label_6">
<property name="geometry">
<rect>
<x>20</x>
<y>30</y>
<width>411</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string>Текущий адрес можно узнать на экране включения A142</string>
</property>
</widget>
<widget class="QLabel" name="labelResult">
<property name="geometry">
<rect>
<x>20</x>
<y>110</y>
<width>411</width>
<height>21</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -4,6 +4,9 @@
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
QCoreApplication::setOrganizationName("org");
QCoreApplication::setApplicationName("app");
QApplication a(argc, argv); QApplication a(argc, argv);
MainWindow w; MainWindow w;
w.show(); w.show();

View File

@ -10,13 +10,44 @@ MainWindow::MainWindow(QWidget *parent)
{ {
ui->setupUi(this); ui->setupUi(this);
conf = new QSettings();
modbus=new ModbusOverUdp(); modbus=new ModbusOverUdp();
this->setWindowTitle ("Программа для управления A142"); this->setWindowTitle ("Программа для управления A142");
this->setFixedSize(532,447);
ui->lineEditPort->setEnabled(0);
ui->widget1->setWindowsChannel(Ch1); ui->widget1->setWindowsChannel(Ch1);
ui->widget2->setWindowsChannel(Ch2); ui->widget2->setWindowsChannel(Ch2);
ui->widget3->setWindowsChannel(Ch3); ui->widget3->setWindowsChannel(Ch3);
ui->widget4->setWindowsChannel(Ch4); ui->widget4->setWindowsChannel(Ch4);
ui->widget1->hideValue();
ui->widget2->hideValue();
ui->widget3->hideValue();
ui->widget4->hideValue();
ui->lineEditAddres->setText(conf->value("section1/keyCurrentIp").toString());
qDebug()<<"Значение ва памяти"<<conf->value("section1/keyCurrentIp").toString();
if(ui->lineEditAddres->text()==""){
ui->lineEditAddres->setText("192.168.0.50");
}
QRegExp ip_regexp("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}");
QRegExpValidator *ip_validator = new QRegExpValidator(ip_regexp,ui->lineEditAddres);
ui->lineEditAddres->setValidator(ip_validator);
/*
ui->lineEditAddres->setInputMask("000.000.000.000");
QRegExp rx( "( |[0-9] | [0-9] | [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])."
"( |[0-9] | [0-9] | [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])."
"( |[0-9] | [0-9] | [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])."
"( |[0-9] | [0-9] | [0-9]|[0-9][0-9] | [0-9][0-9]|[0-1][0-9][0-9]|2[0-4][0-9]|25[0-5])");
QRegExpValidator *validator = new QRegExpValidator(QRegExp(rx), ui->lineEditAddres);
ui->lineEditAddres->setValidator(validator);
*/
connect(this->modbus,SIGNAL(stateRecive (Set)), connect(this->modbus,SIGNAL(stateRecive (Set)),
ui->widget1,SLOT(setState(Set))); ui->widget1,SLOT(setState(Set)));
connect(modbus,SIGNAL(stateRecive (Set)), connect(modbus,SIGNAL(stateRecive (Set)),
@ -35,11 +66,24 @@ MainWindow::MainWindow(QWidget *parent)
connect(modbus,SIGNAL(sensRecive(Set)), connect(modbus,SIGNAL(sensRecive(Set)),
ui->widget4,SLOT(setSens(Set))); ui->widget4,SLOT(setSens(Set)));
connect(ui->widget1,SIGNAL(ReadyToSend(Set, typeREQ)),
modbus,SLOT(set(Set,typeREQ)));
connect(ui->widget2,SIGNAL(ReadyToSend(Set, typeREQ)),
modbus,SLOT(set(Set,typeREQ)));
connect(ui->widget3,SIGNAL(ReadyToSend(Set, typeREQ)),
modbus,SLOT(set(Set,typeREQ)));
connect(ui->widget4,SIGNAL(ReadyToSend(Set, typeREQ)),
modbus,SLOT(set(Set,typeREQ)));
} }
MainWindow::~MainWindow() MainWindow::~MainWindow()
{ {
qDebug()<<ui->lineEditAddres->text();
conf->setValue("section1/keyCurrentIp",ui->lineEditAddres->text());
qDebug()<<"Значение ва памяти"<<conf->value("section1/keyCurrentIp").toString();
delete ui; delete ui;
} }
@ -47,11 +91,33 @@ void MainWindow::on_pushButtonConnect_clicked()
{ {
if(isConnected==0){ if(isConnected==0){
modbus->connectTo(ui->lineEditAddres->text(),ui->lineEditPort->text().toInt()); modbus->connectTo(ui->lineEditAddres->text(),ui->lineEditPort->text().toInt());
ui->lineEditAddres->setEnabled(0);
//ui->lineEditPort->setEnabled(0);
ui->pushButtonConnect->setText("Отключиться"); ui->pushButtonConnect->setText("Отключиться");
ui->pushButtonSettings->setEnabled(0);
isConnected=1; isConnected=1;
}else{ }else{
modbus->disconnectFrom(); modbus->disconnectFrom();
ui->lineEditAddres->setEnabled(1);
// ui->lineEditPort->setEnabled(1);
ui->widget1->hideValue();
ui->widget2->hideValue();
ui->widget3->hideValue();
ui->widget4->hideValue();
ui->pushButtonConnect->setText("Подключиться"); ui->pushButtonConnect->setText("Подключиться");
ui->pushButtonSettings->setEnabled(1);
isConnected=0; isConnected=0;
} }
} }
void MainWindow::on_pushButtonSettings_clicked()
{
ipSettings *w2 = new ipSettings(this, ui->lineEditAddres->text(),modbus);
w2->exec();
}

View File

@ -5,6 +5,9 @@
#include "modbusoverudp.h" #include "modbusoverudp.h"
#include "enums.h" #include "enums.h"
#include "QDebug" #include "QDebug"
#include "ipsettings.h"
#include "QRegExpValidator"
#include <QSettings>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; } namespace Ui { class MainWindow; }
@ -18,6 +21,8 @@ public:
MainWindow(QWidget *parent = nullptr); MainWindow(QWidget *parent = nullptr);
bool isConnected=0; bool isConnected=0;
ModbusOverUdp* modbus; ModbusOverUdp* modbus;
QSettings *conf;
~MainWindow(); ~MainWindow();
@ -27,6 +32,8 @@ private slots:
void on_pushButtonConnect_clicked(); void on_pushButtonConnect_clicked();
void on_pushButtonSettings_clicked();
private: private:
Ui::MainWindow *ui; Ui::MainWindow *ui;
}; };

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>539</width> <width>532</width>
<height>474</height> <height>447</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -30,9 +30,9 @@
<widget class="QLineEdit" name="lineEditAddres"> <widget class="QLineEdit" name="lineEditAddres">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>53</x> <x>43</x>
<y>20</y> <y>20</y>
<width>81</width> <width>91</width>
<height>20</height> <height>20</height>
</rect> </rect>
</property> </property>
@ -56,9 +56,9 @@
<widget class="QLabel" name="label"> <widget class="QLabel" name="label">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>12</x> <x>7</x>
<y>21</y> <y>21</y>
<width>41</width> <width>31</width>
<height>16</height> <height>16</height>
</rect> </rect>
</property> </property>
@ -156,7 +156,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>539</width> <width>532</width>
<height>21</height> <height>21</height>
</rect> </rect>
</property> </property>

View File

@ -21,7 +21,6 @@ void ModbusOverUdp::timeout()
} }
} }
@ -53,7 +52,22 @@ void ModbusOverUdp::readPendingDatagrams()
{ {
while (udpSocket->hasPendingDatagrams()) { while (udpSocket->hasPendingDatagrams()) {
QNetworkDatagram datagram = udpSocket->receiveDatagram(); QNetworkDatagram datagram = udpSocket->receiveDatagram();
QByteArray recived = datagram.data(); // копируем датаграмку в аррэй для удобной работы
int indNachalaCrc = recived[2]+3;
uint16_t crcRecived = Crc16(indNachalaCrc, recived); // в функции используют больше или меньше
if((recived[indNachalaCrc]&0xFF)==LO(crcRecived)&&(recived[indNachalaCrc+1]&0xFF)==HI(crcRecived)){ //todo внимание костыль
//qDebug()<<"CRC Ок ";
}else{
qDebug()<<"CRC не катит";
return;
}
processTheDatagram(datagram); processTheDatagram(datagram);
} }
} }
@ -63,14 +77,20 @@ void ModbusOverUdp::processTheDatagram(QNetworkDatagram & datagram)
QByteArray recived = datagram.data(); // копируем датаграмку в аррэй для удобной работы QByteArray recived = datagram.data(); // копируем датаграмку в аррэй для удобной работы
Set toSend; //структура для отправки в другой компонент Set toSend; //структура для отправки в другой компонент
sfloat res; //флоат для сборки из пакета модбас sfloat res; //флоат для сборки из пакета модбас
toSend.channel=(typeCHANNEL)(recived[0]-1); //Ch1 = 0 - в енаме toSend.channel=(typeCHANNEL)(recived[0]-1); //Ch1 = 0 - в енаме
switch (recived.size()){ // сужу о прибывшем по размеру пакета // ЭТО ПЛОХО!!! switch (recived.size()){ // пришла чувствительность
case 9: case 9: {
//посчитать контрольные суммы
// и добавить кучу проверок на хорошие значения
res.ch[3]=recived[3]; // Собираю флоат res.ch[3]=recived[3]; // Собираю флоат
res.ch[2]=recived[4]; res.ch[2]=recived[4];
res.ch[1]=recived[5]; res.ch[1]=recived[5];
@ -78,29 +98,34 @@ void ModbusOverUdp::processTheDatagram(QNetworkDatagram & datagram)
//qDebug() <<"Чувствительность для модбас адреса"<<toSend.channel+1 <<res.fl; //qDebug() <<"Чувствительность для модбас адреса"<<toSend.channel+1 <<res.fl;
toSend.SENS= res.fl; toSend.SENS= res.fl;
emit sensRecive(toSend); emit sensRecive(toSend);
break; break;
}
case 25: case 25:
//qDebug() <<"Подвалило состояние для модбас адреса"<<toSend.channel+1; //qDebug() <<"Подвалило состояние для модбас адреса"<<toSend.channel+1;
//посчитать контрольные суммы
// и добавить кучу проверок на хорошие значения
if((int)recived[4]>2) return;
if((int)recived[6]>5) return;
if((int)recived[8]>7) return;
if((int)recived[10]>12) return;
if((int)recived[22]>3) return;
toSend.IIN=(typeIIN)(recived[4]-0); toSend.IIN=(typeIIN)(recived[4]-0);
toSend.IFV=(typeIFV)(recived[6]-0); toSend.IFV=(typeIFV)(recived[6]-0);
toSend.IFN=(typeIFN)(recived[8]-0); toSend.IFN=(typeIFN)(recived[8]-0);
toSend.IKU=(typeIKU)(recived[10]-0); toSend.IKU=(typeIKU)(recived[10]-0);
//toSend.OUTPUT=(typeOUTPUT)(recived[2]-0);
toSend.VALUE=(typeVALUE)(recived[22]-0);
toSend.VALUE=(typeVALUE)(recived[22]-0);
emit stateRecive(toSend); emit stateRecive(toSend);
break; break;
default: default:
qDebug() <<"ТЫ не понимаешь, это другое";
qDebug() <<"Это"<<recived<<"размером"<<recived.size();
qDebug()<<recived;
break; 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
} }
} }
@ -117,9 +142,229 @@ void ModbusOverUdp::connectTo(QString ipAdress, quint16 port)
void ModbusOverUdp::disconnectFrom() void ModbusOverUdp::disconnectFrom()
{ {
delete udpSocket;
isConnected=0; isConnected=0;
disconnect(udpSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));
} }
void ModbusOverUdp::set(Set setWithState, typeREQ TYPEREQ)
{QByteArray data;
switch (TYPEREQ)
{
case SENS:{
data.resize(13);
data[0]=(uint16_t)setWithState.channel+1;
data[1]=0x10;
data[2]=0x1D;
data[3]=0x4E;
data[4]=0x00;
data[5]=0x1; //1- регистр 32 бит 7502
data[6]=0x4;
usfloat res;
res.fl=setWithState.SENS;
data[7]=res.ch[3]&0xFF; // Собираю флоат
data[8]=res.ch[2]&0xFF;
data[9]=res.ch[1]&0xFF;
data[10]=res.ch[0]&0xFF;
uint16_t crcToSend= Crc16((uint16_t)11, data);
data[11]=(LO(crcToSend)&0xFF);
data[12]=(HI(crcToSend)&0xFF);
break;
}
/*
* // c этими регистрами работает после перезагрузки
data[0]=(uint16_t)setWithState.channel+1;
data[1]=0x10;
data[2]=0x1B;
data[3]=0x5C;
data[4]=0x00;
data[5]=0x2;
data[6]=0x4;
usfloat res;
res.fl=setWithState.SENS;
data[7]=res.ch[3]&0xFF; // Собираю флоат
data[8]=res.ch[2]&0xFF;
data[9]=res.ch[1]&0xFF;
data[10]=res.ch[0]&0xFF;
*/
case STATE:{
qDebug()<<"Установка state";
data.resize(29);
data[0]=(uint16_t)setWithState.channel+1;
data[1]=0x10;
data[2]=0x13;
data[3]=0x89;
data[4]=0x00;
data[5]=0xa;// 10 регистров
data[6]=0x14;// фпропусил размер пакета
data[7]=0x00;
data[8]=(uint16_t)setWithState.IIN;// 5001
data[9]=0x00;
data[10]=(uint16_t)setWithState.IFV;// 5002
data[11]=0x00;
data[12]=(uint16_t)setWithState.IFN;// 5003
data[13]=0x00;
data[14]=(uint16_t)setWithState.IKU;;// 5004
data[15]=0x00;
data[16]=0x01;// 5005
data[17]=0x00;
data[18]=0x01;// 5006
data[19]=0x00;
data[20]=0x01;// 5007
data[21]=0x00;
data[22]=0x01;// 5008
data[23]=0x00;
data[24]=0x01;// 5009
data[25]=0x00;
data[26]=(uint16_t)setWithState.VALUE;// 5010
uint16_t crcToSend= Crc16((uint16_t)27, data);
data[27]=LO(crcToSend);
data[28]=HI(crcToSend);
break;
}
case IIN:{
qDebug()<<"Установка iin";
data.resize(11);
data[0]=(uint16_t)setWithState.channel+1;
data[1]=0x10;
data[2]=0x13; //5001
data[3]=0x89;
data[4]=0x00;
data[5]=0x1;// 1 регистров
data[6]=0x2;// байта
data[7]=0x00;
data[8]=(uint16_t)setWithState.IIN;// 5001
uint16_t crcToSend= Crc16((uint16_t)9, data);
data[9]=LO(crcToSend);
data[10]=HI(crcToSend);
break;
}
case IFV:{
qDebug()<<"Установка IVF";
data.resize(11);
data[0]=(uint16_t)setWithState.channel+1;
data[1]=0x10;
data[2]=0x13;
data[3]=0x8a;
data[4]=0x00;
data[5]=0x1;// 1 регистров
data[6]=0x2;// байта
data[7]=0x00;
data[8]=(uint16_t)setWithState.IFV;// 5002
uint16_t crcToSend= Crc16((uint16_t)9, data);
data[9]=LO(crcToSend);
data[10]=HI(crcToSend);
break;
}
case IFN:{
qDebug()<<"Установка IVN";
data.resize(11);
data[0]=(uint16_t)setWithState.channel+1;
data[1]=0x10;
data[2]=0x13;
data[3]=0x8b; //5003
data[4]=0x00;
data[5]=0x1;// 1 регистров
data[6]=0x2;// байта
data[7]=0x00;
data[8]=(uint16_t)setWithState.IFN;// 5003
uint16_t crcToSend= Crc16((uint16_t)9, data);
data[9]=LO(crcToSend);
data[10]=HI(crcToSend);
break;
}
case IKU:{
qDebug()<<"Установка IKU"<<(uint16_t)setWithState.IKU<<"в канал"<<(uint16_t)setWithState.channel+1;
data.resize(11);
data[0]=(uint16_t)setWithState.channel+1;
data[1]=0x10;
data[2]=0x13;
data[3]=0x8c; //5004
data[4]=0x00;
data[5]=0x1;// 1 регистров
data[6]=0x2;// байта
data[7]=0x00;
data[8]=(uint16_t)setWithState.IKU;// 5004
uint16_t crcToSend= Crc16((uint16_t)9, data);
data[9]=LO(crcToSend);
data[10]=HI(crcToSend);
break;
}
case VAL:{
qDebug()<<"Запрос Val";
data.resize(11);
data[0]=(uint16_t)setWithState.channel+1;
data[1]=0x10;
data[2]=0x13;//5010
data[3]=0x92;
data[4]=0x00;
data[5]=0x1;// 1 регистров
data[6]=0x2;// байта
data[7]=0x00;
data[8]=(uint16_t)setWithState.VALUE;// 5010
uint16_t crcToSend= Crc16((uint16_t)9, data);
data[9]=LO(crcToSend);
data[10]=HI(crcToSend);
break;
}
}//end switch
qDebug()<<"поясняю прибору"<<data.toHex();
sendPendingDatagrams(data);
}
void ModbusOverUdp::req(quint16 adr, typeREQ TYPEREQ) void ModbusOverUdp::req(quint16 adr, typeREQ TYPEREQ)
{ {
QByteArray data; QByteArray data;
@ -156,6 +401,66 @@ void ModbusOverUdp::req(quint16 adr, typeREQ TYPEREQ)
sendPendingDatagrams(data); sendPendingDatagrams(data);
} }
void ModbusOverUdp::changeIp(QString oldIp, QString newIp)
{
qDebug()<<"НАчинаем смену Ip";
udpSocket = new QUdpSocket(this);
// udpSocket->bind(QHostAddress::LocalHost,8000,QAbstractSocket::DontShareAddress);
targetIp =QHostAddress(oldIp);
targetPort=7000;
// QUdpSocket *udpSocketForRecive= new QUdpSocket(this);
connect(udpSocket, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));
QStringList ip= newIp.split(".");
qDebug()<<ip;
uint16_t ip0= ip.at(0).toInt();
uint16_t ip1= ip.at(1).toInt();
uint16_t ip2= ip.at(2).toInt();
uint16_t ip3= ip.at(3).toInt();
qDebug()<<ip0;
qDebug()<<ip1;
qDebug()<<ip2;
qDebug()<<ip3;
QByteArray data;
data.resize(13);
data[0]=0x11; //наверное прокатит
data[1]=0x10;//команда на запись
data[2]=0x0f; //4001
data[3]=0xa1; //4001
data[4]=0x00;
data[5]=0x2; //2 колличество регистров
data[6]=0x4; //4 байта
data[7]=ip0;
data[8]=ip1;
data[9]=ip2;
data[10]=ip3;
uint16_t crcToSend= Crc16((uint16_t)11, data);
data[11]=(LO(crcToSend)&0xFF);
data[12]=(HI(crcToSend)&0xFF);
QNetworkDatagram datagram;
datagram.setDestination(targetIp,targetPort);
datagram.setData(data);
// qDebug()<<"sended"<<datagram.data();
udpSocket->writeDatagram(datagram);
udpSocket->waitForBytesWritten(50);
}
void ModbusOverUdp::testReq() void ModbusOverUdp::testReq()
{ {
@ -187,10 +492,4 @@ void ModbusOverUdp::sendPendingDatagrams( QByteArray & data )
} }
void ModbusOverUdp::stateSend(Set setWithState)
{
}
void ModbusOverUdp::sensSend(Set setWithSens)
{
}

View File

@ -6,11 +6,18 @@
#include "QTimer" #include "QTimer"
#include "QDebug" #include "QDebug"
#include <QUdpSocket> #include <QUdpSocket>
#include <QtNetwork> #include "QtNetwork"
#define LO(x) ((uint8_t) ((x) & 0xff)) #define LO(x) ((uint8_t) ((x) & 0xff))
#define HI(x) ((uint8_t) (((x) >> 8) & 0xff)) #define HI(x) ((uint8_t) (((x) >> 8) & 0xff))
/////////////////
//привет, я из будущего!!
//Возможно хорошей идеей будет если ты напишешь в обработчике ответов сигналы (в тч и ошибку),
//а потом в зависимости от нужд будешь к ним подключать что нужно
//
class ModbusOverUdp : public QObject class ModbusOverUdp : public QObject
{ {
Q_OBJECT Q_OBJECT
@ -56,8 +63,8 @@ public:
uint16_t Crc16(uint16_t len, QByteArray iobuf); uint16_t Crc16(uint16_t len, QByteArray iobuf);
uint16_t Crc16(uint16_t len, uint16_t iobuf[]); uint16_t Crc16(uint16_t len, uint16_t iobuf[]);
QHostAddress targetIp; QHostAddress targetIp; //работаем с этим адресом
quint16 targetPort; quint16 targetPort; //роаботаем с этим портом
signals: signals:
@ -68,11 +75,13 @@ signals:
public slots: public slots:
void connectTo(QString ipAdress, quint16 port); void connectTo(QString ipAdress, quint16 port);
void disconnectFrom(); void disconnectFrom();
void stateSend(Set setWithState); void set(Set setWithState, typeREQ TYPEREQ);
void sensSend(Set setWithSens);
void readPendingDatagrams(); void readPendingDatagrams();
void timeout(); void timeout();
void req(quint16 adr, typeREQ TYPEREQ); void req(quint16 adr, typeREQ TYPEREQ);
void changeIp(QString oldIp,QString newIp);
void testReq(); void testReq();
@ -81,6 +90,7 @@ private:
bool isConnected=0; bool isConnected=0;
QUdpSocket* udpSocket; QUdpSocket* udpSocket;
void processTheDatagram(QNetworkDatagram &datagram); void processTheDatagram(QNetworkDatagram &datagram);
}; };

View File

@ -0,0 +1,376 @@
#define __DBL_MIN_EXP__ (-1021)
#define __FLT32X_MAX_EXP__ 1024
#define __cpp_attributes 200809
#define __pentiumpro__ 1
#define __UINT_LEAST16_MAX__ 0xffff
#define __ATOMIC_ACQUIRE 2
#define __FLT128_MAX_10_EXP__ 4932
#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F
#define __GCC_IEC_559_COMPLEX 2
#define __UINT_LEAST8_TYPE__ unsigned char
#define __SIZEOF_FLOAT80__ 12
#define _WIN32 1
#define __INTMAX_C(c) c ## LL
#define __CHAR_BIT__ 8
#define __UINT8_MAX__ 0xff
#define __WINT_MAX__ 0xffff
#define __FLT32_MIN_EXP__ (-125)
#define __cpp_static_assert 200410
#define __ORDER_LITTLE_ENDIAN__ 1234
#define __SIZE_MAX__ 0xffffffffU
#define __WCHAR_MAX__ 0xffff
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L)
#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1
#define __GCC_ATOMIC_CHAR_LOCK_FREE 2
#define __GCC_IEC_559 2
#define __FLT32X_DECIMAL_DIG__ 17
#define __FLT_EVAL_METHOD__ 2
#define __cpp_binary_literals 201304
#define __FLT64_DECIMAL_DIG__ 17
#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2
#define __cpp_variadic_templates 200704
#define __UINT_FAST64_MAX__ 0xffffffffffffffffULL
#define __SIG_ATOMIC_TYPE__ int
#define __DBL_MIN_10_EXP__ (-307)
#define __FINITE_MATH_ONLY__ 0
#define __GNUC_PATCHLEVEL__ 0
#define __FLT32_HAS_DENORM__ 1
#define __UINT_FAST8_MAX__ 0xff
#define __has_include(STR) __has_include__(STR)
#define _stdcall __attribute__((__stdcall__))
#define __DEC64_MAX_EXP__ 385
#define __INT8_C(c) c
#define __INT_LEAST8_WIDTH__ 8
#define __UINT_LEAST64_MAX__ 0xffffffffffffffffULL
#define __SHRT_MAX__ 0x7fff
#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L
#define __FLT64X_MAX_10_EXP__ 4932
#define __UINT_LEAST8_MAX__ 0xff
#define __GCC_ATOMIC_BOOL_LOCK_FREE 2
#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128
#define __UINTMAX_TYPE__ long long unsigned int
#define __DEC32_EPSILON__ 1E-6DF
#define __FLT_EVAL_METHOD_TS_18661_3__ 2
#define __OPTIMIZE__ 1
#define __UINT32_MAX__ 0xffffffffU
#define __GXX_EXPERIMENTAL_CXX0X__ 1
#define __LDBL_MAX_EXP__ 16384
#define __FLT128_MIN_EXP__ (-16381)
#define __WINT_MIN__ 0
#define __FLT128_MIN_10_EXP__ (-4931)
#define __INT_LEAST16_WIDTH__ 16
#define __SCHAR_MAX__ 0x7f
#define __FLT128_MANT_DIG__ 113
#define __WCHAR_MIN__ 0
#define __INT64_C(c) c ## LL
#define __DBL_DIG__ 15
#define __GCC_ATOMIC_POINTER_LOCK_FREE 2
#define __FLT64X_MANT_DIG__ 64
#define __SIZEOF_INT__ 4
#define __SIZEOF_POINTER__ 4
#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2
#define __USER_LABEL_PREFIX__ _
#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x
#define __STDC_HOSTED__ 1
#define __WIN32 1
#define __LDBL_HAS_INFINITY__ 1
#define __FLT32_DIG__ 6
#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F
#define __GXX_WEAK__ 1
#define __SHRT_WIDTH__ 16
#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L
#define __DEC32_MAX__ 9.999999E96DF
#define __cpp_threadsafe_static_init 200806
#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x
#define __MINGW32__ 1
#define __FLT32X_HAS_INFINITY__ 1
#define __INT32_MAX__ 0x7fffffff
#define __INT_WIDTH__ 32
#define __SIZEOF_LONG__ 4
#define __UINT16_C(c) c
#define __PTRDIFF_WIDTH__ 32
#define __DECIMAL_DIG__ 21
#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64
#define __INTMAX_WIDTH__ 64
#define __FLT64_MIN_EXP__ (-1021)
#define __has_include_next(STR) __has_include_next__(STR)
#define __FLT64X_MIN_10_EXP__ (-4931)
#define __LDBL_HAS_QUIET_NAN__ 1
#define __FLT64_MANT_DIG__ 53
#define _REENTRANT 1
#define __GNUC__ 7
#define _cdecl __attribute__((__cdecl__))
#define __GXX_RTTI 1
#define __cpp_delegating_constructors 200604
#define __FLT_HAS_DENORM__ 1
#define __SIZEOF_LONG_DOUBLE__ 12
#define __BIGGEST_ALIGNMENT__ 16
#define __STDC_UTF_16__ 1
#define __FLT64_MAX_10_EXP__ 308
#define __i686 1
#define __FLT32_HAS_INFINITY__ 1
#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L)
#define _thiscall __attribute__((__thiscall__))
#define __cpp_raw_strings 200710
#define __INT_FAST32_MAX__ 0x7fffffff
#define __WINNT 1
#define __DBL_HAS_INFINITY__ 1
#define __INT64_MAX__ 0x7fffffffffffffffLL
#define __WINNT__ 1
#define __DEC32_MIN_EXP__ (-94)
#define __INTPTR_WIDTH__ 32
#define __FLT32X_HAS_DENORM__ 1
#define __INT_FAST16_TYPE__ short int
#define _fastcall __attribute__((__fastcall__))
#define __LDBL_HAS_DENORM__ 1
#define __cplusplus 201103L
#define __cpp_ref_qualifiers 200710
#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL
#define __INT_LEAST32_MAX__ 0x7fffffff
#define __DEC32_MIN__ 1E-95DF
#define __DEPRECATED 1
#define __cpp_rvalue_references 200610
#define __DBL_MAX_EXP__ 1024
#define __WCHAR_WIDTH__ 16
#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32
#define __DEC128_EPSILON__ 1E-33DL
#define __ATOMIC_HLE_RELEASE 131072
#define __WIN32__ 1
#define __PTRDIFF_MAX__ 0x7fffffff
#define __ATOMIC_HLE_ACQUIRE 65536
#define __FLT32_HAS_QUIET_NAN__ 1
#define __GNUG__ 7
#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL
#define __SIZEOF_SIZE_T__ 4
#define __cpp_rvalue_reference 200610
#define __cpp_nsdmi 200809
#define __FLT64X_MIN_EXP__ (-16381)
#define __SIZEOF_WINT_T__ 2
#define __LONG_LONG_WIDTH__ 64
#define __cpp_initializer_lists 200806
#define __FLT32_MAX_EXP__ 128
#define __cpp_hex_float 201603
#define __GCC_HAVE_DWARF2_CFI_ASM 1
#define __GXX_ABI_VERSION 1011
#define __FLT128_HAS_INFINITY__ 1
#define __FLT_MIN_EXP__ (-125)
#define __i686__ 1
#define __cpp_lambdas 200907
#define __FLT64X_HAS_QUIET_NAN__ 1
#define __INT_FAST64_TYPE__ long long int
#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64
#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L)
#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x
#define __DECIMAL_BID_FORMAT__ 1
#define __GXX_TYPEINFO_EQUALITY_INLINE 0
#define __FLT64_MIN_10_EXP__ (-307)
#define __FLT64X_DECIMAL_DIG__ 21
#define __DEC128_MIN__ 1E-6143DL
#define __REGISTER_PREFIX__
#define __UINT16_MAX__ 0xffff
#define __DBL_HAS_DENORM__ 1
#define __cdecl __attribute__((__cdecl__))
#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32
#define __UINT8_TYPE__ unsigned char
#define __i386 1
#define __FLT_MANT_DIG__ 24
#define __LDBL_DECIMAL_DIG__ 21
#define __VERSION__ "7.3.0"
#define __UINT64_C(c) c ## ULL
#define __cpp_unicode_characters 200704
#define __GCC_ATOMIC_INT_LOCK_FREE 2
#define __FLT128_MAX_EXP__ 16384
#define __FLT32_MANT_DIG__ 24
#define _X86_ 1
#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__
#define __FLT128_HAS_DENORM__ 1
#define __FLT128_DIG__ 33
#define __SCHAR_WIDTH__ 8
#define __INT32_C(c) c
#define __DEC64_EPSILON__ 1E-15DD
#define __ORDER_PDP_ENDIAN__ 3412
#define __DEC128_MIN_EXP__ (-6142)
#define __code_model_32__ 1
#define __FLT32_MAX_10_EXP__ 38
#define __INT_FAST32_TYPE__ int
#define __UINT_LEAST16_TYPE__ short unsigned int
#define __FLT64X_HAS_INFINITY__ 1
#define __INT16_MAX__ 0x7fff
#define __i386__ 1
#define __cpp_rtti 199711
#define __SIZE_TYPE__ unsigned int
#define __UINT64_MAX__ 0xffffffffffffffffULL
#define __FLT64X_DIG__ 18
#define __INT8_TYPE__ signed char
#define __GCC_ASM_FLAG_OUTPUTS__ 1
#define __FLT_RADIX__ 2
#define __INT_LEAST16_TYPE__ short int
#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L
#define __UINTMAX_C(c) c ## ULL
#define __SIG_ATOMIC_MAX__ 0x7fffffff
#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2
#define __SIZEOF_PTRDIFF_T__ 4
#define __FLT32X_MANT_DIG__ 53
#define __FLT32X_MIN_EXP__ (-1021)
#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF
#define __pentiumpro 1
#define __MSVCRT__ 1
#define __INT_FAST16_MAX__ 0x7fff
#define __FLT64_DIG__ 15
#define __UINT_FAST32_MAX__ 0xffffffffU
#define __UINT_LEAST64_TYPE__ long long unsigned int
#define __FLT_HAS_QUIET_NAN__ 1
#define __FLT_MAX_10_EXP__ 38
#define __LONG_MAX__ 0x7fffffffL
#define __FLT64X_HAS_DENORM__ 1
#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL
#define __FLT_HAS_INFINITY__ 1
#define __cpp_unicode_literals 200710
#define __UINT_FAST16_TYPE__ short unsigned int
#define __DEC64_MAX__ 9.999999999999999E384DD
#define __INT_FAST32_WIDTH__ 32
#define __CHAR16_TYPE__ short unsigned int
#define __PRAGMA_REDEFINE_EXTNAME 1
#define __SIZE_WIDTH__ 32
#define __SEG_FS 1
#define __INT_LEAST16_MAX__ 0x7fff
#define __DEC64_MANT_DIG__ 16
#define __UINT_LEAST32_MAX__ 0xffffffffU
#define __SEG_GS 1
#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32
#define __GCC_ATOMIC_LONG_LOCK_FREE 2
#define __SIG_ATOMIC_WIDTH__ 32
#define __INT_LEAST64_TYPE__ long long int
#define __INT16_TYPE__ short int
#define __INT_LEAST8_TYPE__ signed char
#define __DEC32_MAX_EXP__ 97
#define __INT_FAST8_MAX__ 0x7f
#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128
#define __INTPTR_MAX__ 0x7fffffff
#define __GXX_MERGED_TYPEINFO_NAMES 0
#define __cpp_range_based_for 200907
#define __FLT64_HAS_QUIET_NAN__ 1
#define __stdcall __attribute__((__stdcall__))
#define __FLT32_MIN_10_EXP__ (-37)
#define __EXCEPTIONS 1
#define __LDBL_MANT_DIG__ 64
#define __DBL_HAS_QUIET_NAN__ 1
#define __FLT64_HAS_INFINITY__ 1
#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x
#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1)
#define __INTPTR_TYPE__ int
#define __UINT16_TYPE__ short unsigned int
#define __WCHAR_TYPE__ short unsigned int
#define __SIZEOF_FLOAT__ 4
#define __UINTPTR_MAX__ 0xffffffffU
#define __INT_FAST64_WIDTH__ 64
#define __DEC64_MIN_EXP__ (-382)
#define __cpp_decltype 200707
#define __FLT32_DECIMAL_DIG__ 9
#define __INT_FAST64_MAX__ 0x7fffffffffffffffLL
#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1
#define __FLT_DIG__ 6
#define __FLT64X_MAX_EXP__ 16384
#define __UINT_FAST64_TYPE__ long long unsigned int
#define __INT_MAX__ 0x7fffffff
#define WIN32 1
#define __INT64_TYPE__ long long int
#define __FLT_MAX_EXP__ 128
#define __DBL_MANT_DIG__ 53
#define __cpp_inheriting_constructors 201511
#define __SIZEOF_FLOAT128__ 16
#define __INT_LEAST64_MAX__ 0x7fffffffffffffffLL
#define __DEC64_MIN__ 1E-383DD
#define __WINT_TYPE__ short unsigned int
#define __UINT_LEAST32_TYPE__ unsigned int
#define __SIZEOF_SHORT__ 2
#define __LDBL_MIN_EXP__ (-16381)
#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64
#define __WINT_WIDTH__ 16
#define __INT_LEAST8_MAX__ 0x7f
#define __FLT32X_MAX_10_EXP__ 308
#define __WCHAR_UNSIGNED__ 1
#define __LDBL_MAX_10_EXP__ 4932
#define __ATOMIC_RELAXED 0
#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L)
#define __thiscall __attribute__((__thiscall__))
#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128
#define __UINT8_C(c) c
#define __FLT64_MAX_EXP__ 1024
#define __INT_LEAST32_TYPE__ int
#define __SIZEOF_WCHAR_T__ 2
#define __FLT128_HAS_QUIET_NAN__ 1
#define __INT_FAST8_TYPE__ signed char
#define __fastcall __attribute__((__fastcall__))
#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x
#define __GNUC_STDC_INLINE__ 1
#define __FLT64_HAS_DENORM__ 1
#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32
#define __DBL_DECIMAL_DIG__ 17
#define __STDC_UTF_32__ 1
#define __INT_FAST8_WIDTH__ 8
#define __DEC_EVAL_METHOD__ 2
#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x
#define __ORDER_BIG_ENDIAN__ 4321
#define __cpp_runtime_arrays 198712
#define __UINT64_TYPE__ long long unsigned int
#define __UINT32_C(c) c ## U
#define __INTMAX_MAX__ 0x7fffffffffffffffLL
#define __cpp_alias_templates 200704
#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
#define WINNT 1
#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F
#define __INT8_MAX__ 0x7f
#define __LONG_WIDTH__ 32
#define __UINT_FAST32_TYPE__ unsigned int
#define __CHAR32_TYPE__ unsigned int
#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F
#define __cpp_constexpr 200704
#define __INT32_TYPE__ int
#define __SIZEOF_DOUBLE__ 8
#define __cpp_exceptions 199711
#define __FLT_MIN_10_EXP__ (-37)
#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64
#define __INT_LEAST32_WIDTH__ 32
#define __INTMAX_TYPE__ long long int
#define i386 1
#define _INTEGRAL_MAX_BITS 64
#define __DEC128_MAX_EXP__ 6145
#define __FLT32X_HAS_QUIET_NAN__ 1
#define __ATOMIC_CONSUME 1
#define __GNUC_MINOR__ 3
#define __INT_FAST16_WIDTH__ 16
#define __UINTMAX_MAX__ 0xffffffffffffffffULL
#define __DEC32_MANT_DIG__ 7
#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x
#define __DBL_MAX_10_EXP__ 308
#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L
#define __INT16_C(c) c
#define __STDC__ 1
#define __FLT32X_DIG__ 15
#define __PTRDIFF_TYPE__ int
#define __ATOMIC_SEQ_CST 5
#define __UINT32_TYPE__ unsigned int
#define __FLT32X_MIN_10_EXP__ (-307)
#define __UINTPTR_TYPE__ unsigned int
#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD
#define __DEC128_MANT_DIG__ 34
#define __LDBL_MIN_10_EXP__ (-4931)
#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128
#define __SIZEOF_LONG_LONG__ 8
#define __cpp_user_defined_literals 200809
#define __FLT128_DECIMAL_DIG__ 36
#define __GCC_ATOMIC_LLONG_LOCK_FREE 2
#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x
#define __LDBL_DIG__ 18
#define __FLT_DECIMAL_DIG__ 9
#define __UINT_FAST16_MAX__ 0xffff
#define __GCC_ATOMIC_SHORT_LOCK_FREE 2
#define __INT_LEAST64_WIDTH__ 64
#define __UINT_FAST8_TYPE__ unsigned char
#define __ATOMIC_ACQ_REL 4
#define __ATOMIC_RELEASE 3
#define __declspec(x) __attribute__((x))

View File

@ -1,6 +1,7 @@
#include "windowchannel.h" #include "windowchannel.h"
#include "ui_windowchannel.h" #include "ui_windowchannel.h"
#include "customlabel.h"
//#include "customcombobox.h"
windowChannel::windowChannel(QWidget *parent) : windowChannel::windowChannel(QWidget *parent) :
@ -18,13 +19,46 @@ windowChannel::windowChannel(QWidget *parent) :
this->setPalette(Pal); this->setPalette(Pal);
this->show(); this->show();
thisData.IFN=Lp200; ui->comboBoxIIN->addItem("Заряд"); //индекс 0
ui->comboBoxIIN->addItem("IEPE");//индекс 1
ui->comboBoxVCH->addItem("0.2Гц"); //индекс 0
ui->comboBoxVCH->addItem("0.3Гц");//индекс 1
ui->comboBoxVCH->addItem("1Гц"); //индекс 2
ui->comboBoxVCH->addItem("2Гц");//индекс 3
ui->comboBoxVCH->addItem("10Гц"); //индекс 4
ui->comboBoxNCH->addItem("200Гц"); //индекс 0
ui->comboBoxNCH->addItem("500Гц");//индекс 1
ui->comboBoxNCH->addItem("1кГц"); //индекс 2
ui->comboBoxNCH->addItem("5кГц");//индекс 3
ui->comboBoxNCH->addItem("10кГц"); //индекс 4
ui->comboBoxNCH->addItem("20кГц");//индекс 5
ui->comboBoxNCH->addItem("50кГц"); //индекс 6
ui->comboBoxNCH->addItem("100кГц");//индекс 7
// QStringList stringList;
// ui->comboBoxOUT->addItems(stringList);
// ui->comboBoxOUT->insertItems(1,stringList);
thisData.IFN=Lp200; //инициализирую по умолчанию, что бы когда прилетит первый сэнс не было вылета из за расчетов портированных с прибора
thisData.IFV=Hp1; thisData.IFV=Hp1;
thisData.IIN=ICP; thisData.IIN=ICP;
thisData.IKU=Ku1; thisData.IKU=Ku1;
thisData.SENS=1.0; thisData.SENS=1.0;
thisData.VALUE=Accel; thisData.VALUE=Accel;
connect(ui->labelSENS,SIGNAL(clicked()),this,SLOT(sendSens()));//подключаю сигнал от кастом лэйбла для вызова процедуры смены чувствительности
} }
windowChannel::~windowChannel() windowChannel::~windowChannel()
@ -32,6 +66,25 @@ windowChannel::~windowChannel()
delete ui; delete ui;
} }
void windowChannel::sendSens()
{
Set dataToSend=thisData;
bool ok;
dataToSend.SENS = QInputDialog::getDouble(this, tr("Введите значение"),
tr("Введите значение чувствительности датчика"), thisData.SENS, 0.0001, 99999, 4, &ok,
Qt::WindowFlags(), 1);
if (ok){emit ReadyToSend(dataToSend, SENS);}
if(thisData.IKU!=VerifyGainA142(thisData)){
thisData.IKU=VerifyGainA142(thisData);
emit ReadyToSend(thisData, IKU);
};
}
void windowChannel::setSens(Set data) void windowChannel::setSens(Set data)
{ {
@ -66,37 +119,44 @@ void windowChannel::reDraw()
else if(thisData.SENS<100&&thisData.SENS>=10){ui->labelSENS->setText(QString::number(thisData.SENS,'f', 3));} 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));} else {ui->labelSENS->setText(QString::number(thisData.SENS,'f', 4));}
//выставляем значение комбобоксов
switch (thisData.IIN) { switch (thisData.IIN) {
case ICP:{ case ICP:{
ui->labelIIN->setText("IEPE");
ui->comboBoxIIN->setCurrentIndex(1);
break; break;
} }
case CHARGE:{ case CHARGE:{
ui->labelIIN->setText("Заряд");
ui->comboBoxIIN->setCurrentIndex(0);
break; break;
} }
}//end switch }//end switch
switch (thisData.IFV) { switch (thisData.IFV) {
case Hp0_2:{ case Hp0_2:{
ui->labelVCH->setText("0.2Гц");
ui->comboBoxVCH->setCurrentIndex(0);
break; break;
} }
case Hp0_3:{ case Hp0_3:{
ui->labelVCH->setText("0.3Гц");
ui->comboBoxVCH->setCurrentIndex(1);
break; break;
} }
case Hp1:{ case Hp1:{
ui->labelVCH->setText("1Гц");
ui->comboBoxVCH->setCurrentIndex(2);
break; break;
} }
case Hp2:{ case Hp2:{
ui->labelVCH->setText("2Гц");
ui->comboBoxVCH->setCurrentIndex(3);
break; break;
} }
case Hp10:{ case Hp10:{
ui->labelVCH->setText("10Гц");
ui->comboBoxVCH->setCurrentIndex(4);
break; break;
} }
}//end switch }//end switch
@ -104,66 +164,101 @@ void windowChannel::reDraw()
switch (thisData.IFN) { switch (thisData.IFN) {
case Lp200:{ case Lp200:{
ui->labelNCH->setText("200Гц");
ui->comboBoxNCH->setCurrentIndex(0);
break; break;
} }
case Lp500:{ case Lp500:{
ui->labelNCH->setText("500Гц");
ui->comboBoxNCH->setCurrentIndex(1);
break; break;
} }
case Lp1000:{ case Lp1000:{
ui->labelNCH->setText("1кГц");
ui->comboBoxNCH->setCurrentIndex(2);
break; break;
} }
case Lp5000:{ case Lp5000:{
ui->labelNCH->setText("5кГц");
ui->comboBoxNCH->setCurrentIndex(3);
break; break;
} }
case Lp10000:{ case Lp10000:{
ui->labelNCH->setText("10кГц");
ui->comboBoxNCH->setCurrentIndex(4);
break; break;
} }
case Lp20000:{ case Lp20000:{
ui->labelNCH->setText("20кГц");
ui->comboBoxNCH->setCurrentIndex(5);
break; break;
} }
case Lp50000:{ case Lp50000:{
ui->labelNCH->setText("50кГц");
ui->comboBoxNCH->setCurrentIndex(6);
break; break;
} }
case Lp100000:{ case Lp100000:{
ui->labelNCH->setText("100кГц");
ui->comboBoxNCH->setCurrentIndex(7);
break; break;
} }
}//end switch }//end switch
switch (thisData.VALUE) { switch (thisData.VALUE) {
case Accel:{ case Accel:{
if(thisData.IIN==ICP)(ui->labelUNIT1->setText("мВ/м/c2")); ui->comboBoxUNIT->setCurrentIndex(0);
else{ui->labelUNIT1->setText("пКл/м/с2");}
break; break;
} }
case Nython:{ case Nython:{
if(thisData.IIN==ICP)(ui->labelUNIT1->setText("мВ/Н")); ui->comboBoxUNIT->setCurrentIndex(1);
else{ui->labelUNIT1->setText("пКл/Н");}
break; break;
} }
case Pascal:{ case Pascal:{
if(thisData.IIN==ICP)(ui->labelUNIT1->setText("мВ/Па")); ui->comboBoxUNIT->setCurrentIndex(2);
else{ui->labelUNIT1->setText("пКл/Па");}
break; break;
} }
}//end switch }//end switch
ui->labelOUT->setText(DisplayIKUA142(thisData.SENS, thisData.IKU, thisData.VALUE)); ui->labelOUT->setText(DisplayIKUA142(thisData.SENS, thisData.IKU, thisData.VALUE));
showValue();
} }
void windowChannel::hideValue()
{
ui->comboBoxIIN->hide();
ui->comboBoxNCH->hide();
ui->comboBoxOUT->hide();
ui->comboBoxVCH->hide();
ui->comboBoxIIN->hide();
ui->comboBoxUNIT->hide();
ui->labelSENS->hide();
}
void windowChannel::showValue()
{
ui->comboBoxIIN->show();
ui->comboBoxNCH->show();
ui->comboBoxOUT->show();
ui->comboBoxVCH->show();
ui->comboBoxIIN->show();
ui->comboBoxUNIT->show();
ui->labelSENS->show();
}
void windowChannel::setWindowsChannel(typeCHANNEL channel) void windowChannel::setWindowsChannel(typeCHANNEL channel)
{ {
this->channel = channel; this->channel = channel;
ui->labelChanel->setNum((int)(channel+1)); thisData.channel=channel;
ui->labelChanel->setNum((int)(channel+1)); //потому что енам с 0
} }
typeCHANNEL windowChannel::getWindowsChannel() typeCHANNEL windowChannel::getWindowsChannel()
@ -172,128 +267,129 @@ typeCHANNEL windowChannel::getWindowsChannel()
} }
typeIKU windowChannel::VerifyGainA142(float sens, typeIKU iku) typeIKU windowChannel::VerifyGainA142(Set thisData) //сверяет гейн на допусимый прибора при установке сенс
{ {
if(sens <= 0.0010f) //0.001 if(thisData.SENS <= 0.0010f) //0.001
{ {
if(iku > Ku1000) if(thisData.IKU > Ku1000)
{ {
iku = Ku1000; thisData.IKU = Ku1000;
} }
} }
else else
if(/*sens >= 0.0011f && */sens <= 10.000f) //0.002 if(/*sens >= 0.0011f && */thisData.SENS <= 10.000f) //0.002
{ {
if(iku > Ku1000) if(thisData.IKU > Ku1000)
{ {
iku = Ku1000; thisData.IKU = Ku1000;
} }
} }
else else
if(/*sens >= 10.001f && */sens <= 20.000f) //20 if(/*sens >= 10.001f && */thisData.SENS <= 20.000f) //20
{ {
if(iku > Ku500) if(thisData.IKU > Ku500)
{ {
iku = Ku500; thisData.IKU = Ku500;
} }
} }
else else
if(/*sens >= 20.001f && */sens <= 50.000f) //50 if(/*sens >= 20.001f && */thisData.SENS <= 50.000f) //50
{ {
if(iku > Ku200) if(thisData.IKU > Ku200)
{ {
iku = Ku200; thisData.IKU = Ku200;
} }
} }
else else
if(/*sens >= 50.001f && */sens <= 100.00f) //100 if(/*sens >= 50.001f && */thisData.SENS <= 100.00f) //100
{ {
if(iku > Ku100) if(thisData.IKU > Ku100)
{ {
iku = Ku100; thisData.IKU = Ku100;
} }
} }
else else
if(/*sens >= 100.01f && */sens <= 200.00f) //200 if(/*sens >= 100.01f && */thisData.SENS <= 200.00f) //200
{ {
if(iku > Ku50) if(thisData.IKU > Ku50)
{ {
iku = Ku50; thisData.IKU = Ku50;
} }
} }
else else
if(/*sens >= 200.01f && */sens <= 500.00f) //500 if(/*sens >= 200.01f && */thisData.SENS <= 500.00f) //500
{ {
if(iku > Ku20) if(thisData.IKU > Ku20)
{ {
iku = Ku20; thisData.IKU = Ku20;
} }
} }
else else
if(/*sens >= 500.01f && */sens <= 1000.0f) //1000 if(/*sens >= 500.01f && */thisData.SENS <= 1000.0f) //1000
{ {
if(iku > Ku10) if(thisData.IKU > Ku10)
{ {
iku = Ku10; thisData.IKU = Ku10;
} }
} }
else else
if(/*sens >= 1000.01f && */sens <= 2000.0f) //2000 if(/*sens >= 1000.01f && */thisData.SENS <= 2000.0f) //2000
{ {
if(iku > Ku5) if(thisData.IKU > Ku5)
{ {
iku = Ku5; thisData.IKU = Ku5;
} }
} }
else else
if(/*sens >= 2000.01f && */sens <= 5000.0f) //5000 if(/*sens >= 2000.01f && */thisData.SENS <= 5000.0f) //5000
{ {
if(iku > Ku2) if(thisData.IKU > Ku2)
{ {
iku = Ku2; thisData.IKU = Ku2;
} }
} }
else else
if(/*sens >= 5000.01f && */sens <= 10000.0f) //10000 if(/*sens >= 5000.01f && */thisData.SENS <= 10000.0f) //10000
{ {
if(iku > Ku1) if(thisData.IKU > Ku1)
{ {
iku = Ku1; thisData.IKU = Ku1;
} }
} }
else else
if(/*sens >= 10001.0f && */sens <= 20000.0f) //20000 if(/*sens >= 10001.0f && */thisData.SENS <= 20000.0f) //20000
{ {
if(iku > Ku0_5) if(thisData.IKU > Ku0_5)
{ {
iku = Ku0_5; thisData.IKU = Ku0_5;
} }
} }
else else
if(/*sens >= 20001.0f && */sens <= 50000.0f) //50000 if(/*sens >= 20001.0f && */thisData.SENS <= 50000.0f) //50000
{ {
if(iku > Ku0_2) if(thisData.IKU > Ku0_2)
{ {
iku = Ku0_2; thisData.IKU = Ku0_2;
} }
} }
else else
if(sens < 100000.0f) //99999 if(thisData.SENS < 100000.0f) //99999
{ {
if(iku > Ku0_1) if(thisData.IKU > Ku0_1)
{ {
iku = Ku0_1; thisData.IKU = Ku0_1;
} }
} }
return iku; return thisData.IKU;
} }
QString windowChannel::DisplayIKUA142(float sens, typeIKU iku ,typeVALUE value) QString windowChannel::DisplayIKUA142(float sens, typeIKU iku ,typeVALUE value)
{uint out; {uint out;
uint offset;
//вбычку обьявлю тут //вбычку обьявлю тут
const char *pOUT[3][25] = const char *pOUT[3][25] =
@ -385,129 +481,462 @@ QString windowChannel::DisplayIKUA142(float sens, typeIKU iku ,typeVALUE value)
if(sens <= 0.0010f) //0.001 if(sens <= 0.0010f) //0.001
{ {
out = iku; out = iku;
offset=0;
} }
else else
if(/*sens >= 0.0011f && */sens <= 0.0020f) //0.002 if(/*sens >= 0.0011f && */sens <= 0.0020f) //0.002
{ {
out = (uint16_t)iku + 1; out = (uint16_t)iku + 1;
offset=1;
} }
else else
if(/*sens >= 0.0021f && */sens <= 0.0050f) //0.005 if(/*sens >= 0.0021f && */sens <= 0.0050f) //0.005
{ {
out = (uint16_t)iku + 2; out = (uint16_t)iku + 2;
offset=2;
} }
else else
if(/*sens >= 0.0051f && */sens <= 0.0100f) //0.01 if(/*sens >= 0.0051f && */sens <= 0.0100f) //0.01
{ {
out = (uint16_t)iku + 3; out = (uint16_t)iku + 3;
offset=3;
} }
else else
if(/*sens >= 0.0101f && */sens <= 0.0200f) //0.02 if(/*sens >= 0.0101f && */sens <= 0.0200f) //0.02
{ {
out = (uint16_t)iku + 4; out = (uint16_t)iku + 4;
offset=4;
} }
else else
if(/*sens >= 0.0201f && */sens <= 0.0500f) //0.05 if(/*sens >= 0.0201f && */sens <= 0.0500f) //0.05
{ {
out = (uint16_t)iku + 5; out = (uint16_t)iku + 5;
offset=5;
} }
else else
if(/*sens >= 0.0501f && */sens <= 0.1000f) //0.1 if(/*sens >= 0.0501f && */sens <= 0.1000f) //0.1
{ {
out = (uint16_t)iku + 6; out = (uint16_t)iku + 6;
offset=6;
} }
else else
if(/*sens >= 0.1001f && */sens <= 0.2000f) //0.2 if(/*sens >= 0.1001f && */sens <= 0.2000f) //0.2
{ {
out = (uint16_t)iku + 7; out = (uint16_t)iku + 7;
offset=7;
} }
else else
if(/*sens >= 0.2001f && */sens <= 0.5000f) //0.5 if(/*sens >= 0.2001f && */sens <= 0.5000f) //0.5
{ {
out = (uint16_t)iku + 8; out = (uint16_t)iku + 8;
offset=8;
} }
else else
if(/*sens >= 0.5001f && */sens <= 1.0000f) //1 if(/*sens >= 0.5001f && */sens <= 1.0000f) //1
{ {
out = (uint16_t)iku + 9; out = (uint16_t)iku + 9;
offset=9;
} }
else else
if(/*sens >= 1.0001f && */sens <= 2.0000f) //2 if(/*sens >= 1.0001f && */sens <= 2.0000f) //2
{ {
out = (uint16_t)iku + 10; out = (uint16_t)iku + 10;
offset=10;
} }
else else
if(/*sens >= 2.0001f && */sens <= 5.0000f) //5 if(/*sens >= 2.0001f && */sens <= 5.0000f) //5
{ {
out = (uint16_t)iku + 11; out = (uint16_t)iku + 11;
offset=11;
} }
else else
if(/*sens >= 5.0001f && */sens <= 10.000f) //10 if(/*sens >= 5.0001f && */sens <= 10.000f) //10
{ {
out = (uint16_t)iku + 12; out = (uint16_t)iku + 12;
offset=12;
} }
else else
if(/*sens >= 10.001f && */sens <= 20.000f) //20 if(/*sens >= 10.001f && */sens <= 20.000f) //20
{ {
out = (uint16_t)iku + 13; out = (uint16_t)iku + 13;
offset=13;
} }
else else
if(/*sens >= 20.001f && */sens <= 50.000f) //50 if(/*sens >= 20.001f && */sens <= 50.000f) //50
{ {
out = (uint16_t)iku + 14; out = (uint16_t)iku + 14;
offset=14;
} }
else else
if(/*sens >= 50.001f && */sens <= 100.00f) //100 if(/*sens >= 50.001f && */sens <= 100.00f) //100
{ {
out = (uint16_t)iku + 15; out = (uint16_t)iku + 15;
offset=15;
} }
else else
if(/*sens >= 100.01f && */sens <= 200.00f) //200 if(/*sens >= 100.01f && */sens <= 200.00f) //200
{ {
out = (uint16_t)iku + 16; out = (uint16_t)iku + 16;
offset=16;
} }
else else
if(/*sens >= 200.01f && */sens <= 500.00f) //500 if(/*sens >= 200.01f && */sens <= 500.00f) //500
{ {
out = (uint16_t)iku + 17; out = (uint16_t)iku + 17;
offset=17;
} }
else else
if(/*sens >= 500.01f && */sens <= 1000.0f) //1000 if(/*sens >= 500.01f && */sens <= 1000.0f) //1000
{ {
out = (uint16_t)iku + 18; out = (uint16_t)iku + 18;
offset=18;
} }
else else
if(/*sens >= 1000.1f && */sens <= 2000.0f) //2000 if(/*sens >= 1000.1f && */sens <= 2000.0f) //2000
{ {
out = (uint16_t)iku + 19; out = (uint16_t)iku + 19;
offset=19;
} }
else else
if(/*sens >= 2000.1f && */sens <= 5000.0f) //2000 if(/*sens >= 2000.1f && */sens <= 5000.0f) //2000
{ {
out = (uint16_t)iku + 20; out = (uint16_t)iku + 20;
offset=20;
} }
else else
if(/*sens >= 5000.1f && */sens <= 10000.0f) //10000 if(/*sens >= 5000.1f && */sens <= 10000.0f) //10000
{ {
out = (uint16_t)iku + 21; out = (uint16_t)iku + 21;
offset=21;
} }
else else
if(/*sens >= 10001 && */sens <= 20000.0f) //20000 if(/*sens >= 10001 && */sens <= 20000.0f) //20000
{ {
out = (uint16_t)iku + 22; out = (uint16_t)iku + 22;
offset=22;
} }
else else
if(/*sens >= 20001 && */sens <= 50000.0f) //50000 if(/*sens >= 20001 && */sens <= 50000.0f) //50000
{ {
out = (uint16_t)iku + 23; out = (uint16_t)iku + 23;
offset=23;
} }
else else
if(/*sens >= 50001 && */sens <= 100000) //100000 if(/*sens >= 50001 && */sens <= 100000) //100000
{ {
out = (uint16_t)iku + 24; out = (uint16_t)iku + 24;
offset=24;
} }
// qDebug()<<"текущяя строка Ку по списку"<<out;
//qDebug()<<"смещение"<<offset;
//этот кусочек смотрит на чувствительность и
//пытается заполнить комбобобокс значениями строк соответствующим индексам КУ
ui->comboBoxOUT->clear();
uint16_t maxPlannedOut = offset+13;
for (uint offsetToWork=offset;((offsetToWork<25)&&(offsetToWork<maxPlannedOut));offsetToWork++) {
ui->comboBoxOUT->addItem(pOUT[(uint16_t)value][offsetToWork]);
ui->comboBoxOUT->setCurrentIndex(iku);
//qDebug()<<"добавлено смещние"<<offsetToWork;
}
return QString::fromStdString(pOUT[(uint16_t)value][out]); return QString::fromStdString(pOUT[(uint16_t)value][out]);
} }
void windowChannel::on_comboBoxIIN_currentIndexChanged(int index) //если это делать в индекс активэйтэд то не обновляется единицы датчика с первого раза
{ //int currentIndex=ui->comboBoxUNIT->currentIndex();
ui->comboBoxUNIT->clear();
if(index==0) {thisData.IIN=CHARGE;
ui->comboBoxUNIT->addItem("пКл/м/с2");
ui->comboBoxUNIT->addItem("пКл/Н");
ui->comboBoxUNIT->addItem("пКл/Па");
//ui->comboBoxUNIT->setCurrentIndex(currentIndex);
}
else {thisData.IIN=ICP;
ui->comboBoxUNIT->addItem("мВ/м/c2");
ui->comboBoxUNIT->addItem("мВ/Н");
ui->comboBoxUNIT->addItem("мВ/Па");
// ui->comboBoxUNIT->setCurrentIndex(currentIndex);
}
emit ReadyToSend(thisData, IIN);
}
void windowChannel::on_comboBoxVCH_activated(int index)
{
if(index==0) thisData.IFV=Hp0_2;
else if(index==1) thisData.IFV=Hp0_3;
else if(index==2) thisData.IFV=Hp1;
else if(index==3) thisData.IFV=Hp2;
else if(index==4) thisData.IFV=Hp10;
emit ReadyToSend(thisData, IFV);
}
void windowChannel::on_comboBoxNCH_activated(int index)
{
if(index==0) thisData.IFN=Lp200;
else if(index==1) thisData.IFN=Lp500;
else if(index==2) thisData.IFN=Lp1000;
else if(index==3) thisData.IFN=Lp5000;
else if(index==4) thisData.IFN=Lp10000;
else if(index==5) thisData.IFN=Lp20000;
else if(index==6) thisData.IFN=Lp50000;
else if(index==7) thisData.IFN=Lp100000;
emit ReadyToSend(thisData, IFN);
}
void windowChannel::on_comboBoxUNIT_currentIndexChanged(int index)
{
}
void windowChannel::on_comboBoxUNIT_activated(int index)
{
if(index==0) thisData.VALUE=Accel;
else if(index==1) thisData.VALUE=Nython;
else if(index==2) thisData.VALUE=Pascal;
emit ReadyToSend(thisData, VAL);
}
void windowChannel::on_comboBoxIIN_activated(int index)
{
}
QStringList windowChannel::avalibleKuList(Set thisData)
{
QStringList result;
uint startIndex;
//вбычку обьявлю тут
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(thisData.SENS <= 0.0010f) //0.001
{
startIndex = thisData.IKU;
}
else
if(/*thisData.SENS >= 0.0011f && */thisData.SENS <= 0.0020f) //0.002
{
startIndex = (uint16_t)thisData.IKU + 1;
}
else
if(/*thisData.SENS >= 0.0021f && */thisData.SENS <= 0.0050f) //0.005
{
startIndex = (uint16_t)thisData.IKU + 2;
}
else
if(/*thisData.SENS >= 0.0051f && */thisData.SENS <= 0.0100f) //0.01
{
startIndex = (uint16_t)thisData.IKU + 3;
}
else
if(/*thisData.SENS >= 0.0101f && */thisData.SENS <= 0.0200f) //0.02
{
startIndex = (uint16_t)thisData.IKU + 4;
}
else
if(/*thisData.SENS >= 0.0201f && */thisData.SENS <= 0.0500f) //0.05
{
startIndex = (uint16_t)thisData.IKU + 5;
}
else
if(/*thisData.SENS >= 0.0501f && */thisData.SENS <= 0.1000f) //0.1
{
startIndex = (uint16_t)thisData.IKU + 6;
}
else
if(/*thisData.SENS >= 0.1001f && */thisData.SENS <= 0.2000f) //0.2
{
startIndex = (uint16_t)thisData.IKU + 7;
}
else
if(/*thisData.SENS >= 0.2001f && */thisData.SENS <= 0.5000f) //0.5
{
startIndex = (uint16_t)thisData.IKU + 8;
}
else
if(/*thisData.SENS >= 0.5001f && */thisData.SENS <= 1.0000f) //1
{
startIndex = (uint16_t)thisData.IKU + 9;
}
else
if(/*thisData.SENS >= 1.0001f && */thisData.SENS <= 2.0000f) //2
{
startIndex = (uint16_t)thisData.IKU + 10;
}
else
if(/*thisData.SENS >= 2.0001f && */thisData.SENS <= 5.0000f) //5
{
startIndex = (uint16_t)thisData.IKU + 11;
}
else
if(/*thisData.SENS >= 5.0001f && */thisData.SENS <= 10.000f) //10
{
startIndex = (uint16_t)thisData.IKU + 12;
}
else
if(/*thisData.SENS >= 10.001f && */thisData.SENS <= 20.000f) //20
{
startIndex = (uint16_t)thisData.IKU + 13;
}
else
if(/*thisData.SENS >= 20.001f && */thisData.SENS <= 50.000f) //50
{
startIndex = (uint16_t)thisData.IKU + 14;
}
else
if(/*thisData.SENS >= 50.001f && */thisData.SENS <= 100.00f) //100
{
startIndex = (uint16_t)thisData.IKU + 15;
}
else
if(/*thisData.SENS >= 100.01f && */thisData.SENS <= 200.00f) //200
{
startIndex = (uint16_t)thisData.IKU + 16;
}
else
if(/*thisData.SENS >= 200.01f && */thisData.SENS <= 500.00f) //500
{
startIndex = (uint16_t)thisData.IKU + 17;
}
else
if(/*thisData.SENS >= 500.01f && */thisData.SENS <= 1000.0f) //1000
{
startIndex = (uint16_t)thisData.IKU + 18;
}
else
if(/*thisData.SENS >= 1000.1f && */thisData.SENS <= 2000.0f) //2000
{
startIndex = (uint16_t)thisData.IKU + 19;
}
else
if(/*thisData.SENS >= 2000.1f && */thisData.SENS <= 5000.0f) //2000
{
startIndex = (uint16_t)thisData.IKU + 20;
}
else
if(/*thisData.SENS >= 5000.1f && */thisData.SENS <= 10000.0f) //10000
{
startIndex = (uint16_t)thisData.IKU + 21;
}
else
if(/*thisData.SENS >= 10001 && */thisData.SENS <= 20000.0f) //20000
{
startIndex = (uint16_t)thisData.IKU + 22;
}
else
if(/*thisData.SENS >= 20001 && */thisData.SENS <= 50000.0f) //50000
{
startIndex = (uint16_t)thisData.IKU + 23;
}
else
if(/*thisData.SENS >= 50001 && */thisData.SENS <= 100000) //100000
{
startIndex = (uint16_t)thisData.IKU + 24;
}
qDebug()<<"стартовый индекс для расчета "<<startIndex;
}
void windowChannel::on_comboBoxOUT_activated(int index)
{
thisData.IKU=(typeIKU)index;
emit ReadyToSend(thisData, IKU);
}

View File

@ -3,6 +3,8 @@
#include <QWidget> #include <QWidget>
#include <enums.h> #include <enums.h>
#include <QInputDialog>
#include <mainwindow.h>
namespace Ui { namespace Ui {
class windowChannel; class windowChannel;
@ -11,30 +13,58 @@ class windowChannel;
class windowChannel : public QWidget class windowChannel : public QWidget
{ {
Q_OBJECT Q_OBJECT
class MainWindow;
bool isConnected;
public: public:
void hideValue();
void showValue();
void setWindowsChannel(typeCHANNEL channel); void setWindowsChannel(typeCHANNEL channel);
typeCHANNEL getWindowsChannel(); typeCHANNEL getWindowsChannel();
typeIKU VerifyGainA142(float sens,typeIKU iku); typeIKU VerifyGainA142(Set thisData);
QString DisplayIKUA142(float sens,typeIKU iku, typeVALUE value); QString DisplayIKUA142(float sens,typeIKU iku, typeVALUE value);
explicit windowChannel(QWidget *parent = nullptr); explicit windowChannel(QWidget *parent = nullptr);
~windowChannel(); ~windowChannel();
signals:
void ReadyToSend(Set, typeREQ);
public slots: public slots:
void sendSens();
void setSens(Set data); void setSens(Set data);
void setState(Set data); void setState(Set data);
void reDraw(); void reDraw();
private slots:
//void on_comboBoxIIN_currentIndexChanged(const QString &arg1);
void on_comboBoxIIN_currentIndexChanged(int index);
void on_comboBoxVCH_activated(int index);
void on_comboBoxNCH_activated(int index);
void on_comboBoxUNIT_currentIndexChanged(int index);
void on_comboBoxUNIT_activated(int index);
void on_comboBoxIIN_activated(int index);
void on_comboBoxOUT_activated(int index);
//void on_comboBoxUNIT_activated(const QString &arg1);
private: private:
Set thisData; //данные этой структуры Set thisData; //данные этой структуры
typeCHANNEL channel; typeCHANNEL channel;
Ui::windowChannel *ui; Ui::windowChannel *ui;
QStringList avalibleKuList(Set thisData);
}; };
#endif // WINDOWCHANNEL_H #endif // WINDOWCHANNEL_H

View File

@ -2887,175 +2887,7 @@
<string>ВЫХОД:</string> <string>ВЫХОД:</string>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="labelIIN"> <widget class="CustomLabel" name="labelSENS">
<property name="geometry">
<rect>
<x>90</x>
<y>36</y>
<width>61</width>
<height>31</height>
</rect>
</property>
<property name="palette">
<palette>
<active>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>212</red>
<green>174</green>
<blue>19</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>212</red>
<green>174</green>
<blue>19</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="font">
<font>
<family>Segoe UI</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>Здаряд</string>
</property>
</widget>
<widget class="QLabel" name="labelVCH">
<property name="geometry">
<rect>
<x>90</x>
<y>66</y>
<width>61</width>
<height>31</height>
</rect>
</property>
<property name="palette">
<palette>
<active>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>212</red>
<green>174</green>
<blue>19</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>212</red>
<green>174</green>
<blue>19</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="font">
<font>
<family>Segoe UI</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>77Гц</string>
</property>
</widget>
<widget class="QLabel" name="labelNCH">
<property name="geometry">
<rect>
<x>90</x>
<y>96</y>
<width>71</width>
<height>31</height>
</rect>
</property>
<property name="palette">
<palette>
<active>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>212</red>
<green>174</green>
<blue>19</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>212</red>
<green>174</green>
<blue>19</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="font">
<font>
<family>Segoe UI</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>77кГц</string>
</property>
</widget>
<widget class="QLabel" name="labelSENS">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>99</x> <x>99</x>
@ -3108,66 +2940,13 @@
</font> </font>
</property> </property>
<property name="text"> <property name="text">
<string>???.??</string> <string>0.0000</string>
</property>
</widget>
<widget class="QLabel" name="labelUNIT1">
<property name="geometry">
<rect>
<x>159</x>
<y>122</y>
<width>91</width>
<height>31</height>
</rect>
</property>
<property name="palette">
<palette>
<active>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>212</red>
<green>174</green>
<blue>19</blue>
</color>
</brush>
</colorrole>
</active>
<inactive>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>212</red>
<green>174</green>
<blue>19</blue>
</color>
</brush>
</colorrole>
</inactive>
<disabled>
<colorrole role="WindowText">
<brush brushstyle="SolidPattern">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</colorrole>
</disabled>
</palette>
</property>
<property name="font">
<font>
<family>Segoe UI</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="text">
<string>п?/м/с2</string>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="labelOUT"> <widget class="QLabel" name="labelOUT">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>100</x> <x>100</x>
@ -3236,21 +3015,114 @@
<string/> <string/>
</property> </property>
</widget> </widget>
<widget class="CustomComboBox" name="comboBoxIIN">
<property name="geometry">
<rect>
<x>80</x>
<y>37</y>
<width>81</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>Segoe UI</family>
<pointsize>14</pointsize>
</font>
</property>
</widget>
<widget class="CustomComboBox" name="comboBoxVCH">
<property name="geometry">
<rect>
<x>70</x>
<y>68</y>
<width>81</width>
<height>28</height>
</rect>
</property>
<property name="font">
<font>
<family>Segoe UI</family>
<pointsize>14</pointsize>
</font>
</property>
</widget>
<widget class="CustomComboBox" name="comboBoxNCH">
<property name="geometry">
<rect>
<x>70</x>
<y>96</y>
<width>91</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>Segoe UI</family>
<pointsize>14</pointsize>
</font>
</property>
</widget>
<widget class="CustomComboBox" name="comboBoxUNIT">
<property name="geometry">
<rect>
<x>160</x>
<y>121</y>
<width>101</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>Segoe UI</family>
<pointsize>14</pointsize>
</font>
</property>
</widget>
<widget class="CustomComboBox" name="comboBoxOUT">
<property name="geometry">
<rect>
<x>86</x>
<y>150</y>
<width>161</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>Segoe UI</family>
<pointsize>14</pointsize>
</font>
</property>
</widget>
<zorder>pushButton</zorder> <zorder>pushButton</zorder>
<zorder>label_34</zorder> <zorder>label_34</zorder>
<zorder>labelChanel</zorder> <zorder>labelChanel</zorder>
<zorder>labelIIN</zorder>
<zorder>labelVCH</zorder>
<zorder>labelNCH</zorder>
<zorder>labelSENS</zorder> <zorder>labelSENS</zorder>
<zorder>labelUNIT1</zorder>
<zorder>labelOUT</zorder> <zorder>labelOUT</zorder>
<zorder>label_6</zorder> <zorder>label_6</zorder>
<zorder>label_3</zorder> <zorder>label_3</zorder>
<zorder>label_4</zorder> <zorder>label_4</zorder>
<zorder>label_2</zorder> <zorder>label_2</zorder>
<zorder>label_5</zorder> <zorder>label_5</zorder>
<zorder>comboBoxIIN</zorder>
<zorder>comboBoxVCH</zorder>
<zorder>comboBoxNCH</zorder>
<zorder>comboBoxUNIT</zorder>
<zorder>comboBoxOUT</zorder>
</widget> </widget>
<customwidgets>
<customwidget>
<class>CustomLabel</class>
<extends>QLabel</extends>
<header>customlabel.h</header>
</customwidget>
<customwidget>
<class>CustomComboBox</class>
<extends>QComboBox</extends>
<header>customcombobox.h</header>
</customwidget>
</customwidgets>
<resources/> <resources/>
<connections/> <connections/>
</ui> </ui>