commit 1c10abd24be5ea410aad4b6b45e38bee4d8f9f63 Author: anovikova Date: Wed Jul 23 12:34:16 2025 +0300 first version. 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