first version.

This commit is contained in:
2025-07-23 12:34:16 +03:00
commit 1c10abd24b
10 changed files with 697 additions and 0 deletions

35
.gitignore vendored Normal file
View File

@@ -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/

61
cmdwrd.cpp Normal file
View File

@@ -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()
{
}

26
cmdwrd.h Normal file
View File

@@ -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

21
declaration.h Normal file
View File

@@ -0,0 +1,21 @@
#ifndef DECLARATION_H
#define DECLARATION_H
#include <QMainWindow>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QHeaderView>
#include <QLabel>
#include <QComboBox>
#include <QPushButton>
#include <QTextEdit>
#include <QDebug>
#include <QMessageBox>
#include <QTextCodec>
#include <QLineEdit>
#include <QString>
#include <QScopedPointer>
#endif // DECLARATION_H

16
descript.pro Normal file
View File

@@ -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

11
main.cpp Normal file
View File

@@ -0,0 +1,11 @@
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}

344
mainwindow.cpp Normal file
View File

@@ -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<CommandWord> 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<ResponseWord> 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()
{
}

41
mainwindow.h Normal file
View File

@@ -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

104
reswrd.cpp Normal file
View File

@@ -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()
{
}

38
reswrd.h Normal file
View File

@@ -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