const short SZ = 32, Base = 1, rtAddr = 0x1B, /*27*/ rtSubAddr = 0x1E; /*30*/int back[64], OutputMas[64], //awBuf InputMas[64]; //bcBackint KS, OS, i, tmbNum, ErrorInt;QString OutputStr, // строка для принятия сообщения InputStr, // строка для отправки сообщения MilName; // имя манчестераTTmkEventData tmkEvD;TTmkConfigData tmkCfg;QByteArray str;int Mysize = 2 * SZ;MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); if (TmkOpen()) { ui->StatusLB->addItem("Манчестер НЕ готов к работе"); } else { ui->StatusLB->addItem("Манчестер готов к работе"); }}MainWindow::~MainWindow(){ delete ui;}void MainWindow::on_pushButton_clicked() //отправить{ InputStr = ui->MessageLine->text(); for (i = 0; i < InputStr.size(); i++) { InputMas[i] = InputStr[i].digitValue(); } for (register int i = 0; i < Mysize; i++) { back[i] = OutputMas[i] = 0; } if(ui->radioButton->isChecked()) { //Подготовить устройство 0 в режиме КК if(tmkconfig(0) != 0) { ui->StatusLB->addItem("tmkconfig() выполнить не удалось! Плата занята или отсутствует\n"); TmkClose(); } tmkselect(0); tmkgetinfo(&tmkCfg); ui ->StatusLB->addItem("Имя платы: " + QString::fromLatin1(tmkCfg.szName)); bcreset(); bcdefbase(Base); // Функция настраивает выбранный КК и драйвер на дальнейшую работу с ДОЗУ в указанной базе. // Подготовить плату 1 в режиме ОУ. if (tmkconfig(1)) { ui->StatusLB->addItem("Ошибка конфигурации mil-1553\n"); } rtreset(); //Функция производит инициализацию выбранного устройства с переводом его в режим ОУ. rtdefaddress(rtAddr); #if USE_MODE==YES int rtMode = rtgetmode(); if (rtdefmode(rtMode #if FLAG_MODE==YES | RT_FLAG_MODE #endif | RT_HBIT_MODE)) std::cout << "\nThere is an error with rtdefmode.\n"; rtMode = rtgetmode(); #endif rtdefsubaddr(RT_TRANSMIT, rtSubAddr); rtclrflag(); rtdefsubaddr(RT_RECEIVE, rtSubAddr); rtclrflag(); //{-> Подготовка сообщения. tmkselect(0); KS = CW(rtAddr, RT_RECEIVE, rtSubAddr, InputStr.size()); bcputw(0, KS); for (i = 0; i<InputStr.size(); i++) bcputw(i + 1, InputMas[i]); delay(2); //{-> Отправка сообщения. bcstartx(Base, DATA_BC_RT | CX_CONT | CX_BUS_A | CX_NOSIG); // CX_BUS_A - канал 1 delay(2); if (ErrorInt != 0) { bcstartx(Base, DATA_BC_RT | CX_CONT | CX_BUS_B | CX_NOSIG); } // то переходим на резервный канал CX_BUS_A tmkgetevd(&tmkEvD); //<-} ui->StatusLB->addItem("Успешно отправлено: " + InputStr); }}void MainWindow::on_pushButton_2_clicked() // считать{ if(ui->radioButton->isChecked()) { tmkselect(1); for (i = 0; i < InputStr.size(); i++) { back[i] = rtgetw(i); delay(2); } std::cout<< ""<<std::endl; for (i = 0; i < Mysize; i++) { std::cout<< back[i]<<std::endl;} // до сюда вроде норм rtdefsubaddr(RT_TRANSMIT, rtSubAddr); std::cout<< "" <<std::endl; for (i = 0; i < InputStr.size(); i++) rtputw(i, back[i]); delay(2); //Функция записывает слово back[i] в текущий подадрес ДОЗУ выбранного ОУ по адресу i. //{-> Запрос подготовленного сообщения из ОУ tmkselect(0); KS = CW(rtAddr, RT_TRANSMIT, rtSubAddr, InputStr.size());delay(2); bcputw(0, KS); delay(2); bcstartx(Base, DATA_RT_BC | CX_STOP | CX_BUS_A | CX_NOSIG); delay(2); // if () //<-} for (i = 0; i < InputStr.size(); i++) { OutputMas[i] = bcgetw(i + 2); delay(2); std::cout<< OutputMas[i]<<std::endl; } if (OutputMas == NULL) { ui->StatusLB->addItem("Данные НЕ были считаны с платы!"); } else { for (i = 0; i < InputStr.size(); i++) { OutputStr += QString::number(OutputMas[i]); } } //считывает правильно с платы, но выводит неправильно // Вывод результата на экран ui->StatusLB->addItem("Принято: " + OutputStr + " - успешно!"); if (QString::compare(InputStr,OutputStr) != 0) { ui->StatusLB->addItem("Данные считаны НЕ верно: " + InputStr + " != " + OutputStr + " : ОШИБКА!"); } else { ui->StatusLB->addItem("Данные считаны верно! " + InputStr + " = " + OutputStr + " : УСПЕШНО!"); } rtreset(); TmkClose(); if (TmkOpen()) { ui->StatusLB->addItem("Манчестер не завершил работу!"); } ui->StatusLB->addItem("Манчестер завершил работу!"); }}
for (i = 0; i < InputStr.size(); i++) rtputw(i, back[i]); delay(2); //Функция записывает слово back[i] //в текущий подадрес ДОЗУ