From 08b57b8ac0809e20b51e51ef9a23a1f8390ce507 Mon Sep 17 00:00:00 2001 From: dplimin Date: Thu, 30 Nov 2023 12:58:49 +0300 Subject: [PATCH] workingForRead --- A142_Desktop.pro | 15 +- enums.h | 148 +++ icon.ico | Bin 0 -> 2955 bytes mainwindow.cpp | 42 + mainwindow.h | 12 + mainwindow.ui | 162 ++- modbusoverudp.cpp | 192 ++- modbusoverudp.h | 73 + windowchannel.cpp | 513 +++++++ windowchannel.h | 40 + windowchannel.ui | 3256 +++++++++++++++++++++++++++++++++++++++++++++ 11 files changed, 4445 insertions(+), 8 deletions(-) create mode 100644 icon.ico create mode 100644 windowchannel.cpp create mode 100644 windowchannel.h create mode 100644 windowchannel.ui diff --git a/A142_Desktop.pro b/A142_Desktop.pro index 0086fd6..93ed2a4 100644 --- a/A142_Desktop.pro +++ b/A142_Desktop.pro @@ -1,4 +1,6 @@ QT += core gui +QT += network serialport serialbus + greaterThan(QT_MAJOR_VERSION, 4): QT += widgets @@ -17,13 +19,20 @@ DEFINES += QT_DEPRECATED_WARNINGS SOURCES += \ main.cpp \ - mainwindow.cpp + mainwindow.cpp \ + modbusoverudp.cpp \ + windowchannel.cpp HEADERS += \ - mainwindow.h + enums.h \ + mainwindow.h \ + modbusoverudp.h \ + windowchannel.h FORMS += \ - mainwindow.ui + mainwindow.ui \ + windowchannel.ui +win32:RC_FILE = icon.rc # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin diff --git a/enums.h b/enums.h index a357711..f9a91b1 100644 --- a/enums.h +++ b/enums.h @@ -1,4 +1,152 @@ #ifndef ENUMS_H #define ENUMS_H +#include + +//Привет. Меня зовут Дима и я пишу на КУТЭ 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 + + diff --git a/icon.ico b/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..25ee350751afc11a0d37b9dd45171a7c71968cef GIT binary patch literal 2955 zcmcImc{tQtA3wjDG1jpqx+JO_E!2IGFI(> zKBA8O@4h9i{QrdNZ5f4c@$=L^pE@m5jm=*>^)`SLMQ16@HQOMWf6`fn6Z4(o^LIdG zqqdJ}ui1KQzJAiM3&fDB3JCx4hLIc%f(kG|20*`107(D< zTLloSfCSfF_5SaUm^Uad=T{n_#mlcG6PzBN!+XML8T z$dd_-Gl4?|4NrQ~PQVCXiME@0-MSe(b!$cHSmLlL(YD^uT&ahE+{gd(VDX8bE>GWWrJ*O3=vL? zo*Dllh_S<~Pp#m@As(JAK^WlR4<%5Anm=>|V4y z3%lwk-+B_zib0@kzioSj01w;+yq$k;_0$4QB}=cS5t#A7FwH`1nTsLP7F*86r)@U` z_pZmV3>&mltigu{QRFhz&jZp)(L>bWGoX3fXuK-uEtej6`co52SWY=}xLtnh;Q*+A zS)^?j+bWC*#!4zxBORw?sey~)c7i0RCx~0)4H^ARI9*vbX+T@zwGLqeNs_uJVWBwdEp$v%s;!wmKtW{RYoU!1UDC$CEX%GT)AI=SiaN%HmA$pC_80w$Ors}AIr%23&-y=gpz=cDg z#u6y@dCC0+6#f7wMs)tx0_V_Cq!{ap691xZ6!qb2_z;@6KMs66dJOv8=Mf}K;hZ|Q z&Al&LQj7y4BN(1in17&9^6@^C9iR?1*PfQ%u!YR(HVJZ?`l}ehy#57zd{i&G>^)RvJooBtES~e6GRqGjm&vG27hxabPT0Z;x74Mq8%@?% zQb_FEv@n&M*eN;c0$TW99m$+Z4*o&ADMfK*EFmzibKMVWWrG?tA30bW2DpLsZv$9Y za7b-nVoX8GP*-06maplfU~E7_<~W0yoT#>dp?3=5&y?4T>kt?#&$0V%BTG=qAx?ngMjH@rfYafIN^_|$N(eMgB4!Db1WjJ#= z>R!p?P!~&r(S~I|?8wQg{T&o&O*z77##kPASFbzRRT^hK=omdOa;jZ3Gw?jd->Vu< zYiwOYHMA?)fKDCpYqfQ-c1;l0dlhbO>DQdHF*JZ-iroMnyxYxuj_Z}7UdD3kVFcRR zv5^N93R2vm?VJ0(XCW4=0mjiHE$MLAs@;&$;{)Cs0s}Vsz}nS7M(Idw^`h;9K3`_` zZrc@28^6f58qK?nh1G0AR9Wq+^M@TDCre31rZ8IRoPDF-T*a=VegIDSde!J!fz~Cq zGRZlkqryvf!)^haaS&1Z`#v;;{m<)9SYQerg8fB8wGyxZC3lR0EOYOGP-a;}W?(3jimlD}dS zpuDn+sH1;xA?iw(%bea=!F9H|FnndNh@wBJcD3l6l=roY+`L;8iU!krM*gae%Zuwg z6Kt!fB{aLb;hTm0+!eabwUYOJnz^H|8EvgmzE$rx6|wIwq%Xy1#wXwlg2$IEHWPKs z51W{&0MAo#D_N!~_}J4_1R)oL2ktD!=;52719gb zI~oJjVWc=NfSd77QG{pQJg^&auQ19P^=+24t|?lMV=1h6K6bVv5ewTXf+dSoU zws65q&5+_eH@;x|>52N~BVW{?-pGw~v5JfFaXVK0G27Q@Ry#o{aq%1~!S-E7Ts@#J zO0T$QU2Zhz-2Kv)#M65eQANx-dG1)woO_pj>e#_(9qpkRFcgvl7iZUQIxzF|5QEL` zX=Ag)Ik{}BNlX7jcPi1Z=BlL@rN# zPp6zczPXAh#F``!_G;d7EdG=xkgGkLS~=pKo24#xVDzO#dor?-Hkos5-Q+gb>W4;; zQ)(A$xa{TeHSKtg-fUjZ6XMwSOQBuNl!pm~+k{(;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() @@ -13,3 +43,15 @@ MainWindow::~MainWindow() 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; + } +} diff --git a/mainwindow.h b/mainwindow.h index 4643e32..d86b9a9 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -2,6 +2,9 @@ #define MAINWINDOW_H #include +#include "modbusoverudp.h" +#include "enums.h" +#include "QDebug" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } @@ -13,8 +16,17 @@ class MainWindow : public QMainWindow public: MainWindow(QWidget *parent = nullptr); + bool isConnected=0; + ModbusOverUdp* modbus; + ~MainWindow(); + + +private slots: + + void on_pushButtonConnect_clicked(); + private: Ui::MainWindow *ui; }; diff --git a/mainwindow.ui b/mainwindow.ui index b232854..fe43ae3 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -6,17 +6,171 @@ 0 0 - 800 - 600 + 539 + 474 MainWindow - - + + + + + 220 + 19 + 151 + 23 + + + + Подключится + + + + + + 53 + 20 + 81 + 20 + + + + 192.168.0.50 + + + + + + 170 + 21 + 41 + 20 + + + + 7000 + + + + + + 12 + 21 + 41 + 16 + + + + Адрес + + + + + + 140 + 23 + 29 + 16 + + + + Порт: + + + + + + 10 + 50 + 257 + 186 + + + + + + + 10 + 240 + 257 + 186 + + + + + + + 270 + 50 + 257 + 186 + + + + + + + 270 + 240 + 257 + 186 + + + + + + + 480 + 20 + 61 + 21 + + + + + 15 + + + + A142 + + + + + + 380 + 20 + 81 + 23 + + + + Настройка... + + + + + + + 0 + 0 + 539 + 21 + + + + + + windowChannel + QWidget +
windowchannel.h
+ 1 +
+
diff --git a/modbusoverudp.cpp b/modbusoverudp.cpp index 9f01bbc..0d4fa71 100644 --- a/modbusoverudp.cpp +++ b/modbusoverudp.cpp @@ -1,6 +1,196 @@ #include "modbusoverudp.h" ModbusOverUdp::ModbusOverUdp(QObject *parent) : QObject(parent) -{ +{timer= new QTimer(); + timer->setInterval(1000); + connect(timer,SIGNAL(timeout()),this,SLOT(timeout())); + timer->start(); + } + + +void ModbusOverUdp::timeout() +{ + if(isConnected){//запросы по всем фронтам + + for(quint16 i=1; i<=4; i++){ + req(i,SENS); + req(i,STATE); + } + + } + + +} + + + +uint16_t ModbusOverUdp::Crc16(uint16_t len, uint16_t iobuf[]) //CRC для сообщения такой то длинны /Len - начало контрольной сумимы +{ +uint16_t i; +uint16_t crc = 0xFFFF; + + for(i = 0; i < len; i++) { + crc = (crc >> 8) ^ Crc16Table[(crc & 0xFF) ^ (iobuf[i]& 0xFF)]; + } + return crc; +} + +uint16_t ModbusOverUdp::Crc16(uint16_t len, QByteArray iobuf) //CRC для сообщения такой то длинны /Len - начало контрольной сумимы +{ +uint16_t i; +uint16_t crc = 0xFFFF; + + for(i = 0; i < len; i++) { + crc = (crc >> 8) ^ Crc16Table[(crc & 0xFF) ^ (iobuf[i] & 0xFF)]; // ввел маску 0xFF, тк прилетает 0хFFFFFFxx + } + return crc; +} + + +void ModbusOverUdp::readPendingDatagrams() +{ + while (udpSocket->hasPendingDatagrams()) { + QNetworkDatagram datagram = udpSocket->receiveDatagram(); + processTheDatagram(datagram); + } +} + + +void ModbusOverUdp::processTheDatagram(QNetworkDatagram & datagram) +{ + + QByteArray recived = datagram.data(); // копируем датаграмку в аррэй для удобной работы + + Set toSend; //структура для отправки в другой компонент + sfloat res; //флоат для сборки из пакета модбас + toSend.channel=(typeCHANNEL)(recived[0]-1); //Ch1 = 0 - в енаме + + + switch (recived.size()){ // сужу о прибывшем по размеру пакета // ЭТО ПЛОХО!!! + case 9: + + res.ch[3]=recived[3]; // Собираю флоат + res.ch[2]=recived[4]; + res.ch[1]=recived[5]; + res.ch[0]=recived[6]; + //qDebug() <<"Чувствительность для модбас адреса"<writeDatagram(datagram); +} + + +void ModbusOverUdp::stateSend(Set setWithState) +{ +} + +void ModbusOverUdp::sensSend(Set setWithSens) +{ +} diff --git a/modbusoverudp.h b/modbusoverudp.h index 5d41b8a..77acc9f 100644 --- a/modbusoverudp.h +++ b/modbusoverudp.h @@ -2,15 +2,88 @@ #define MODBUSOVERUDP_H #include +#include "enums.h" +#include "QTimer" +#include "QDebug" +#include +#include + +#define LO(x) ((uint8_t) ((x) & 0xff)) +#define HI(x) ((uint8_t) (((x) >> 8) & 0xff)) class ModbusOverUdp : public QObject { Q_OBJECT 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); + 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: + 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 diff --git a/windowchannel.cpp b/windowchannel.cpp new file mode 100644 index 0000000..b59b530 --- /dev/null +++ b/windowchannel.cpp @@ -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]); +} + + diff --git a/windowchannel.h b/windowchannel.h new file mode 100644 index 0000000..03b609c --- /dev/null +++ b/windowchannel.h @@ -0,0 +1,40 @@ +#ifndef WINDOWCHANNEL_H +#define WINDOWCHANNEL_H + +#include +#include + +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 diff --git a/windowchannel.ui b/windowchannel.ui new file mode 100644 index 0000000..d0cea8f --- /dev/null +++ b/windowchannel.ui @@ -0,0 +1,3256 @@ + + + windowChannel + + + + 0 + 0 + 257 + 186 + + + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + + Form + + + + + 91 + 0 + 61 + 31 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + Segoe UI + 14 + + + + КАНАЛ + + + + + + 10 + 36 + 61 + 31 + + + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + Segoe UI + 14 + + + + + + + ВХОД: + + + + + + 161 + 0 + 121 + 31 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + Segoe UI + 14 + + + + ? + + + + + + 10 + 66 + 51 + 31 + + + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + Segoe UI + 14 + + + + + + + ФВЧ: + + + + + + 10 + 96 + 71 + 31 + + + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + Segoe UI + 14 + + + + + + + ФНЧ: + + + + + + 9 + 122 + 91 + 31 + + + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + Segoe UI + 14 + + + + + + + ДАТЧИК: + + + + + + 10 + 150 + 81 + 31 + + + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + 0 + 0 + 0 + + + + + + + + + Segoe UI + 14 + + + + + + + ВЫХОД: + + + + + + 90 + 36 + 61 + 31 + + + + + + + + + 212 + 174 + 19 + + + + + + + + + 212 + 174 + 19 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + Segoe UI + 14 + + + + Здаряд + + + + + + 90 + 66 + 61 + 31 + + + + + + + + + 212 + 174 + 19 + + + + + + + + + 212 + 174 + 19 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + Segoe UI + 14 + + + + 77Гц + + + + + + 90 + 96 + 71 + 31 + + + + + + + + + 212 + 174 + 19 + + + + + + + + + 212 + 174 + 19 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + Segoe UI + 14 + + + + 77кГц + + + + + + 99 + 122 + 71 + 31 + + + + + + + + + 212 + 174 + 19 + + + + + + + + + 212 + 174 + 19 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + Segoe UI + 14 + + + + ???.?? + + + + + + 159 + 122 + 91 + 31 + + + + + + + + + 212 + 174 + 19 + + + + + + + + + 212 + 174 + 19 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + Segoe UI + 14 + + + + п?/м/с2 + + + + + + 100 + 150 + 121 + 31 + + + + + + + + + 212 + 174 + 19 + + + + + + + + + 212 + 174 + 19 + + + + + + + + + 0 + 0 + 0 + + + + + + + + + Segoe UI + 14 + + + + ?.? + + + + + + -10 + -13 + 271 + 51 + + + + + + + pushButton + label_34 + labelChanel + labelIIN + labelVCH + labelNCH + labelSENS + labelUNIT1 + labelOUT + label_6 + label_3 + label_4 + label_2 + label_5 + + + +