From 1c10abd24be5ea410aad4b6b45e38bee4d8f9f63 Mon Sep 17 00:00:00 2001 From: anovikova Date: Wed, 23 Jul 2025 12:34:16 +0300 Subject: [PATCH] first version. --- .gitignore | 35 +++++ cmdwrd.cpp | 61 +++++++++ cmdwrd.h | 26 ++++ declaration.h | 21 +++ descript.pro | 16 +++ main.cpp | 11 ++ mainwindow.cpp | 344 +++++++++++++++++++++++++++++++++++++++++++++++++ mainwindow.h | 41 ++++++ reswrd.cpp | 104 +++++++++++++++ reswrd.h | 38 ++++++ 10 files changed, 697 insertions(+) create mode 100644 .gitignore create mode 100644 cmdwrd.cpp create mode 100644 cmdwrd.h create mode 100644 declaration.h create mode 100644 descript.pro create mode 100644 main.cpp create mode 100644 mainwindow.cpp create mode 100644 mainwindow.h create mode 100644 reswrd.cpp create mode 100644 reswrd.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ee6f957 --- /dev/null +++ b/.gitignore @@ -0,0 +1,35 @@ +*.a +*.o +*.md +*.exe +*.user +*.Debug +*.Release +*.stash +MakeFile +*.bin +*.m +*.txt +*.mpd +*.sens +*.kna +*.djvu +resource/ +*.qrc +resource.h +*.png +*.jpeg +*.mp3 +*.wav +*.db +*.dll +data/ +debug/ +platforms/ +release/ +compiler/ +src_build/ +html/ +log/ +doc/ +QtXml/ \ No newline at end of file diff --git a/cmdwrd.cpp b/cmdwrd.cpp new file mode 100644 index 0000000..a16eddc --- /dev/null +++ b/cmdwrd.cpp @@ -0,0 +1,61 @@ +#include "mainwindow.h" +#include "cmdwrd.h" + +extern unsigned char HexBinFlag; + +CommandWord::CommandWord() +{ + DeviceAddress = 0; + K = 0; + SubAdd_CtrlMode = 0; + NumData_CmdCode = 0; +} + +unsigned char CommandWord::AddressFind(int cmdw) +{ + return (cmdw & 0x0000F800) >> 11; +} + +unsigned char CommandWord::ResTranFind(int cmdw) +{ + return (cmdw >> 10) & 1; +} + +unsigned char CommandWord::SubadContrlModeFind(int cmdw) +{ + return (cmdw & 0x000003E0) >> 5; +} + +unsigned char CommandWord::NumDataWCodeCCFind(int cmdw) +{ + return (cmdw & 0x0000001F) >> 0; +} + +void CommandWord::description(QString CmdW) +{ + int cmdw; + bool result; + + if(HexBinFlag) + cmdw = CmdW.toInt(&result, 16); + else + cmdw = CmdW.toInt(&result, 2); + + if(result == false) + QMessageBox::warning(0, "Ошибка", "Недопустимое значение КС"); + else if((HexBinFlag == 0) && (CmdW.length() != 16)) + QMessageBox::warning(0, "Ошибка", "Недопустимое значение КС"); + else if((HexBinFlag == 1) && (CmdW.length() != 4)) + QMessageBox::warning(0, "Ошибка", "Недопустимое значение КС"); + else + { + DeviceAddress = AddressFind(cmdw); + K = ResTranFind(cmdw); + SubAdd_CtrlMode = SubadContrlModeFind(cmdw); + NumData_CmdCode = NumDataWCodeCCFind(cmdw); + } +} + +CommandWord::~CommandWord() +{ +} diff --git a/cmdwrd.h b/cmdwrd.h new file mode 100644 index 0000000..7523ae4 --- /dev/null +++ b/cmdwrd.h @@ -0,0 +1,26 @@ +#ifndef CMDWRD_H +#define CMDWRD_H + +#include "declaration.h" + +class CommandWord:public QObject +{ + Q_OBJECT +public: + + unsigned char DeviceAddress; + unsigned char K; + unsigned char SubAdd_CtrlMode; + unsigned char NumData_CmdCode; + + void description(QString CmdW); + unsigned char AddressFind(int cmdw); + unsigned char ResTranFind(int cmdw); + unsigned char SubadContrlModeFind(int cmdw); + unsigned char NumDataWCodeCCFind(int cmdw); + + CommandWord(); + ~CommandWord(); +}; + +#endif // CMDWRD_H diff --git a/declaration.h b/declaration.h new file mode 100644 index 0000000..f9c2516 --- /dev/null +++ b/declaration.h @@ -0,0 +1,21 @@ +#ifndef DECLARATION_H +#define DECLARATION_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif // DECLARATION_H diff --git a/descript.pro b/descript.pro new file mode 100644 index 0000000..6ed83f6 --- /dev/null +++ b/descript.pro @@ -0,0 +1,16 @@ +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +SOURCES += \ + cmdwrd.cpp \ + main.cpp \ + mainwindow.cpp \ + reswrd.cpp + +HEADERS += \ + cmdwrd.h \ + declaration.h \ + mainwindow.h \ + reswrd.h + diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..fd3e533 --- /dev/null +++ b/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" + +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + return a.exec(); +} diff --git a/mainwindow.cpp b/mainwindow.cpp new file mode 100644 index 0000000..77d40a6 --- /dev/null +++ b/mainwindow.cpp @@ -0,0 +1,344 @@ +#include "mainwindow.h" +#include "cmdwrd.h" +#include "reswrd.h" + +unsigned char HexBinFlag = 1; //1 - hex, 0 - bin + +MainWindow::MainWindow() +{ + init_mainwindowobj(); + init_table(); + init_table_res(); + init_connections(); +} + +void MainWindow::init_mainwindowobj() +{ + qDebug() << "Startyem"; + + Window_1 = new QWidget; + Window_2 = new QWidget; + + HexBinButton = new QPushButton("Hex/Bin"); + HexBinLabel = new QLabel("Hex"); + + CmdWordLabel = new QLabel("Enter the command word:"); + CmdWordLineEdit = new QLineEdit; + EnterCmdWordButton = new QPushButton("Enter the cmd word"); + + ResWordLabel = new QLabel("Enter the response word:"); + ResWordLineEdit = new QLineEdit; + EnterResWordButton = new QPushButton("Enter the res word"); + + DataTable = new QTableWidget; + DataTableRes = new QTableWidget; + + QGridLayout *layout_g = new QGridLayout(Window_2); + layout_g->addWidget(HexBinButton, 0, 1); + layout_g->addWidget(HexBinLabel, 0, 0); + layout_g->addWidget(CmdWordLabel, 1, 0); // Row 0, Column 0 + layout_g->addWidget(CmdWordLineEdit, 2, 0); + layout_g->addWidget(EnterCmdWordButton, 3, 0); + layout_g->addWidget(ResWordLabel, 1, 1); + layout_g->addWidget(ResWordLineEdit, 2, 1); + layout_g->addWidget(EnterResWordButton, 3, 1); + + Window_2->setLayout(layout_g); + setCentralWidget(Window_2); + + QVBoxLayout *layout = new QVBoxLayout(Window_1); + layout->addWidget(Window_2); + layout->addWidget(DataTable); + layout->addWidget(DataTableRes); + + Window_1->setLayout(layout); + setCentralWidget(Window_1); +} + +void MainWindow::init_connections() +{ + connect(EnterCmdWordButton, + SIGNAL(clicked()), + this, + SLOT(getlineedit())); + connect(EnterResWordButton, + SIGNAL(clicked()), + this, + SLOT(getlineeditres())); + connect(HexBinButton, + SIGNAL(clicked()), + this, + SLOT(HexBinChange())); +} + +QString intToBinaryString(int number) +{ + return QString::number(number,2); +} + +QString intToDecString(int number) +{ + return QString::number(number,10); +} + +void MainWindow::getlineedit() +{ + qDebug() << "Entered the button command word"; + QString CmdW = CmdWordLineEdit->text(); + qDebug() << CmdW; + + QScopedPointer NewCmdWord(new CommandWord()); + NewCmdWord->description(CmdW); + + set_item(DataTable, 0, 0, "Адрес устройства", false); + set_item(DataTable, 0, 1, intToBinaryString(NewCmdWord->DeviceAddress), false); + set_item(DataTable, 0, 2, intToDecString(NewCmdWord->DeviceAddress), false); + + if(NewCmdWord->K) + { + set_item(DataTable, 1, 0, "Передача", false); + set_item(DataTable, 1, 1, intToBinaryString(NewCmdWord->K), false); + set_item(DataTable, 1, 2, intToDecString(NewCmdWord->K), false); + } + else + { + set_item(DataTable, 1, 0, "Прием", false); + set_item(DataTable, 1, 1, intToBinaryString(NewCmdWord->K), false); + set_item(DataTable, 1, 2, intToDecString(NewCmdWord->K), false); + } + + if((NewCmdWord->SubAdd_CtrlMode == 0) || (NewCmdWord->SubAdd_CtrlMode == 31)) + { + set_item(DataTable, 2, 0, "Режим управления", false); + set_item(DataTable, 2, 1, intToBinaryString(NewCmdWord->SubAdd_CtrlMode), false); + set_item(DataTable, 2, 2, intToDecString(NewCmdWord->SubAdd_CtrlMode), false); + } + else + { + set_item(DataTable, 2, 0, "Подадрес", false); + set_item(DataTable, 2, 1, intToBinaryString(NewCmdWord->SubAdd_CtrlMode), false); + set_item(DataTable, 2, 2, intToDecString(NewCmdWord->SubAdd_CtrlMode), false); + } + + if((NewCmdWord->SubAdd_CtrlMode == 0) || (NewCmdWord->SubAdd_CtrlMode == 31)) + { + set_item(DataTable, 3, 0, "Код КУ", false); + set_item(DataTable, 3, 1, intToBinaryString(NewCmdWord->NumData_CmdCode), false); + set_item(DataTable, 3, 2, intToDecString(NewCmdWord->NumData_CmdCode), false); + } + else + { + if(NewCmdWord->NumData_CmdCode == 0) + { + set_item(DataTable, 3, 0, "Число СД", false); + set_item(DataTable, 3, 1, intToBinaryString(32), false); + set_item(DataTable, 3, 2, intToDecString(32), false); + } + else + { + set_item(DataTable, 3, 0, "Число СД", false); + set_item(DataTable, 3, 1, intToBinaryString(NewCmdWord->NumData_CmdCode), false); + set_item(DataTable, 3, 2, intToDecString(NewCmdWord->NumData_CmdCode), false); + } + } +} + +void MainWindow::getlineeditres() +{ + qDebug() << "Entered the button response word"; + QString ResW = ResWordLineEdit->text(); + qDebug() << ResW; + + QScopedPointer NewResWord(new ResponseWord()); + NewResWord->description(ResW); + + set_item(DataTableRes, 0, 0, "Адрес устройства", false); + set_item(DataTableRes, 0, 1, intToBinaryString(NewResWord->DeviceAddressR), false); + set_item(DataTableRes, 0, 2, intToDecString(NewResWord->DeviceAddressR), false); + + if(NewResWord->ErrorInMsg) + { + set_item(DataTableRes, 1, 0, "Достоверная инф-я", false); + set_item(DataTableRes, 1, 1, intToBinaryString(NewResWord->ErrorInMsg), false); + set_item(DataTableRes, 1, 2, intToDecString(NewResWord->ErrorInMsg), false); + } + else + { + set_item(DataTableRes, 1, 0, "Недостоверная инф-я", false); + set_item(DataTableRes, 1, 1, intToBinaryString(NewResWord->ErrorInMsg), false); + set_item(DataTableRes, 1, 2, intToDecString(NewResWord->ErrorInMsg), false); + } + + set_item(DataTableRes, 2, 0, "Передача ОС (всегда 0)", false); + set_item(DataTableRes, 2, 1, intToBinaryString(NewResWord->TransResW), false); + set_item(DataTableRes, 2, 2, intToDecString(NewResWord->TransResW), false); + + if(NewResWord->SerReq) + { + set_item(DataTableRes, 3, 0, "Запрос на обслуживание", false); + set_item(DataTableRes, 3, 1, intToBinaryString(NewResWord->SerReq), false); + set_item(DataTableRes, 3, 2, intToDecString(NewResWord->SerReq), false); + } + else + { + set_item(DataTableRes, 3, 0, "Нет запроса на обсл-е", false); + set_item(DataTableRes, 3, 1, intToBinaryString(NewResWord->SerReq), false); + set_item(DataTableRes, 3, 2, intToDecString(NewResWord->SerReq), false); + } + + set_item(DataTableRes, 4, 0, "Резерв", false); + set_item(DataTableRes, 4, 1, intToBinaryString(NewResWord->Reserve), false); + set_item(DataTableRes, 4, 2, intToDecString(NewResWord->Reserve), false); + + if(NewResWord->GroupCmd) + { + set_item(DataTableRes, 5, 0, "Достоверная гр. команда", false); + set_item(DataTableRes, 5, 1, intToBinaryString(NewResWord->GroupCmd), false); + set_item(DataTableRes, 5, 2, intToDecString(NewResWord->GroupCmd), false); + } + else + { + set_item(DataTableRes, 5, 0, "Недостоверная гр. команда", false); + set_item(DataTableRes, 5, 1, intToBinaryString(NewResWord->GroupCmd), false); + set_item(DataTableRes, 5, 2, intToDecString(NewResWord->GroupCmd), false); + } + + if(NewResWord->SubBusy) + { + set_item(DataTableRes, 6, 0, "Абонент занят", false); + set_item(DataTableRes, 6, 1, intToBinaryString(NewResWord->SubBusy), false); + set_item(DataTableRes, 6, 2, intToDecString(NewResWord->SubBusy), false); + } + else + { + set_item(DataTableRes, 6, 0, "Абонент не занят", false); + set_item(DataTableRes, 6, 1, intToBinaryString(NewResWord->SubBusy), false); + set_item(DataTableRes, 6, 2, intToDecString(NewResWord->SubBusy), false); + } + + if(NewResWord->SubFailure) + { + set_item(DataTableRes, 7, 0, "Неисправность абонента", false); + set_item(DataTableRes, 7, 1, intToBinaryString(NewResWord->SubFailure), false); + set_item(DataTableRes, 7, 2, intToDecString(NewResWord->SubFailure), false); + } + else + { + set_item(DataTableRes, 7, 0, "Абонент функционирует", false); + set_item(DataTableRes, 7, 1, intToBinaryString(NewResWord->SubFailure), false); + set_item(DataTableRes, 7, 2, intToDecString(NewResWord->SubFailure), false); + } + + if(NewResWord->IntCtrlAccepted) + { + set_item(DataTableRes, 8, 0, "Принято упр-е интерфейсом", false); + set_item(DataTableRes, 8, 1, intToBinaryString(NewResWord->IntCtrlAccepted), false); + set_item(DataTableRes, 8, 2, intToDecString(NewResWord->IntCtrlAccepted), false); + } + else + { + set_item(DataTableRes, 8, 0, "Не принято упр-е интерфейсом", false); + set_item(DataTableRes, 8, 1, intToBinaryString(NewResWord->IntCtrlAccepted), false); + set_item(DataTableRes, 8, 2, intToDecString(NewResWord->IntCtrlAccepted), false); + } + + if(NewResWord->DeviceFailure) + { + set_item(DataTableRes, 9, 0, "Неправильное функ-е ОУ", false); + set_item(DataTableRes, 9, 1, intToBinaryString(NewResWord->DeviceFailure), false); + set_item(DataTableRes, 9, 2, intToDecString(NewResWord->DeviceFailure), false); + } + else + { + set_item(DataTableRes, 9, 0, "Правильное функ-е ОУ", false); + set_item(DataTableRes, 9, 1, intToBinaryString(NewResWord->DeviceFailure), false); + set_item(DataTableRes, 9, 2, intToDecString(NewResWord->DeviceFailure), false); + } +} + +void MainWindow::HexBinChange() +{ + switch(HexBinFlag) + { + case 0: //было bin + HexBinLabel->setText("Hex"); + HexBinFlag = 1; + break; + + case 1: //было hex + HexBinLabel->setText("Bin"); + HexBinFlag = 0; + break; + } +} + +void MainWindow::init_table() +{ + int ColCount = 3; + int RowCount = 4; + QStringList header; + header << "Биты КС" << "Бинарное представление" << "Десятичное представление"; + + DataTable->setColumnCount(ColCount); + DataTable->setRowCount(RowCount); + DataTable->setHorizontalHeaderLabels(header); + DataTable->verticalHeader()->setVisible(true); + + DataTable->setColumnWidth(0,160); + DataTable->setColumnWidth(1,160); + DataTable->setColumnWidth(2,160); + + for(int i = 0; i < RowCount; i++) + { + DataTable->setRowHeight(i,20); + for(int j = 0; j < ColCount; j++) + set_item(DataTable, i, j, "%", false); + } +} + +void MainWindow::init_table_res() +{ + int ColCount = 3; + int RowCount = 10; + QStringList header; + header << "Биты ОС" << "Бинарное представление" << "Десятичное представление"; + + DataTableRes->setColumnCount(ColCount); + DataTableRes->setRowCount(RowCount); + DataTableRes->setHorizontalHeaderLabels(header); + DataTableRes->verticalHeader()->setVisible(true); + + DataTableRes->setColumnWidth(0,180); + DataTableRes->setColumnWidth(1,160); + DataTableRes->setColumnWidth(2,160); + + for(int i = 0; i < RowCount; i++) + { + DataTableRes->setRowHeight(i,20); + for(int j = 0; j < ColCount; j++) + set_item(DataTableRes, i, j, "%", false); + } +} + +void MainWindow::set_item(QTableWidget *pTable, int indRow, + int indCol, QString data, bool editFlag) +{ + QColor color; + color.black(); + QTableWidgetItem *itm = + new QTableWidgetItem(data); + pTable->setItem(indRow,indCol,itm); + + if (editFlag) {} + else + { + pTable->item(indRow, indCol)->setFlags(Qt::ItemIsSelectable| + Qt::ItemIsDragEnabled| + Qt::ItemIsUserCheckable); + } + pTable->item(indRow, indCol)->setTextColor(color); +} + +MainWindow::~MainWindow() +{ +} diff --git a/mainwindow.h b/mainwindow.h new file mode 100644 index 0000000..a8d924d --- /dev/null +++ b/mainwindow.h @@ -0,0 +1,41 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include "declaration.h" + +class MainWindow:public QMainWindow +{ + Q_OBJECT +public: + void init_mainwindowobj(); //the function of this class + void init_connections(); + explicit MainWindow(); //constructor + ~MainWindow(); //destructor + +private: + void init_table(); + void init_table_res(); + void set_item(QTableWidget *pTable, int indRow, + int indCol, QString data, bool editFlag); + +public slots: + void getlineedit(); + void getlineeditres(); + void HexBinChange(); + +private: + QWidget *Window_1 = new QWidget; + QWidget *Window_2 = new QWidget; + QLabel *HexBinLabel; + QPushButton *HexBinButton; + QLabel *CmdWordLabel; + QLineEdit *CmdWordLineEdit; + QPushButton *EnterCmdWordButton; + QLabel *ResWordLabel; + QLineEdit *ResWordLineEdit; + QPushButton *EnterResWordButton; + QTableWidget *DataTable; + QTableWidget *DataTableRes; +}; + +#endif // MAINWINDOW_H diff --git a/reswrd.cpp b/reswrd.cpp new file mode 100644 index 0000000..b465ded --- /dev/null +++ b/reswrd.cpp @@ -0,0 +1,104 @@ +#include "mainwindow.h" +#include "reswrd.h" + +extern unsigned char HexBinFlag; + +ResponseWord::ResponseWord() +{ + DeviceAddressR = 0; + ErrorInMsg = 0; + TransResW = 0; + SerReq = 0; + Reserve = 0; + GroupCmd = 0; + SubBusy = 0; + SubFailure = 0; + IntCtrlAccepted = 0; + DeviceFailure = 0; +} + +unsigned char ResponseWord::DeviceAddressRFind(int resw) +{ + return (resw & 0x0000F800) >> 11; +} + +unsigned char ResponseWord::ErrorInMsgFind(int resw) +{ + return (resw >> 10) & 1; +} + +unsigned char ResponseWord::TransResWFind(int resw) +{ + return (resw >> 9) & 1; +} + +unsigned char ResponseWord::SerReqFind(int resw) +{ + return (resw >> 8) & 1; +} + +unsigned char ResponseWord::ReserveFind(int resw) +{ + return (resw & 0x000000E0) >> 5; +} + +unsigned char ResponseWord::GroupCmdFind(int resw) +{ + return (resw >> 4) & 1; +} + +unsigned char ResponseWord::SubBusyFind(int resw) +{ + return (resw >> 3) & 1; +} + +unsigned char ResponseWord::SubFailureFind(int resw) +{ + return (resw >> 2) & 1; +} + +unsigned char ResponseWord::IntCtrlAcceptedFind(int resw) +{ + return (resw >> 1) & 1; +} + +unsigned char ResponseWord::DeviceFailureFind(int resw) +{ + return (resw >> 0) & 1; +} + +void ResponseWord::description(QString ResW) +{ + int resw; + bool result; + + if(HexBinFlag) + resw = ResW.toInt(&result, 16); + else + resw = ResW.toInt(&result, 2); + + if(result == false) + QMessageBox::warning(0, "Ошибка", "Недопустимое значение ОС"); + else if((HexBinFlag == 0) && (ResW.length() != 16)) + QMessageBox::warning(0, "Ошибка", "Недопустимое значение ОС"); + else if((HexBinFlag == 1) && (ResW.length() != 4)) + QMessageBox::warning(0, "Ошибка", "Недопустимое значение ОС"); + else + { + DeviceAddressR = DeviceAddressRFind(resw); + ErrorInMsg = ErrorInMsgFind(resw); + TransResW = TransResWFind(resw); + SerReq = SerReqFind(resw); + Reserve = ReserveFind(resw); + GroupCmd = GroupCmdFind(resw); + SubBusy = SubBusyFind(resw); + SubFailure = SubFailureFind(resw); + IntCtrlAccepted = IntCtrlAcceptedFind(resw); + DeviceFailure = DeviceFailureFind(resw); + } +} + +ResponseWord::~ResponseWord() +{ + +} diff --git a/reswrd.h b/reswrd.h new file mode 100644 index 0000000..8f9342b --- /dev/null +++ b/reswrd.h @@ -0,0 +1,38 @@ +#ifndef RESWRD_H +#define RESWRD_H + +#include "declaration.h" + +class ResponseWord:public QObject +{ + Q_OBJECT +public: + + unsigned char DeviceAddressR; + unsigned char ErrorInMsg; + unsigned char TransResW; + unsigned char SerReq; + unsigned char Reserve; + unsigned char GroupCmd; + unsigned char SubBusy; + unsigned char SubFailure; + unsigned char IntCtrlAccepted; + unsigned char DeviceFailure; + + void description(QString ResW); + unsigned char DeviceAddressRFind(int resw); + unsigned char ErrorInMsgFind(int resw); + unsigned char TransResWFind(int resw); + unsigned char SerReqFind(int resw); + unsigned char ReserveFind(int resw); + unsigned char GroupCmdFind(int resw); + unsigned char SubBusyFind(int resw); + unsigned char SubFailureFind(int resw); + unsigned char IntCtrlAcceptedFind(int resw); + unsigned char DeviceFailureFind(int resw); + + ResponseWord(); + ~ResponseWord(); +}; + +#endif // RESWRD_H