Программа для управления прибором РСТ-430 1. Краткое описание 4.1 Назначение Программа предназначена для управления радиокоммуникационным сервисным тестером РСТ-430 Программа позволяет настроить прибор, снять измерения и записать их в отчет Excel. 4.2 Технические характеристики 4.2.1 Скорость снятия с прибора любого измерения 1 измерение в секунду. 4.2.2 Программа позволяет снимать измерения: частоту, мощность, девиацию/модуляцию, КНИ, частоту НЧ из прибора в режиме измерения параметров передатчика и СИНАД, напряжение и частоту НЧ из прибора в режиме измерения параметров приемника. 4.2.3 Программа позволяет устанавливать: напряжение модуляции, частоту модуляции, выход модуляции (AFOUT, EXT3, EXT4) прибора в режиме измерения параметров передатчика и частоту ВЧ, мощность, частоту модуляции, частоту НЧ прибора в режиме измерения параметров приемника. 4.2.4 Так же позволяет отключать или включать модуляцию, менять вход измерений (AFIN,EXT1, EXT2) прибора в режиме измерения параметров приемника и менять вид модуляции (АМ, ЧМ) для обоих режимов. 4.2.5 Все виды измерений можно сохранить в отчет Excel. 4.3 Общие сведения о программе 4.3.1 Назначение кнопок Внешний вид программы представлен на Рис.1 Рис. 1 Красная кнопка- включение/выключение программы. Сам прибор кнопки не выключается. по нажатию этой Кнопка с ? – вызов окна-помощника показывающего текущий режим программы, назначения действующих кнопок на клавиатуре программы и режимы в которые можно перейти. Она предназначена для более понятной и комфортной работы с программой. Кнопка с «Х»- закрытие программы. Если отчет Excel не был сохранен, программа предложит его сохранить. Панель статуса – внизу экрана программы отображает возможность сохранить в отчет в Excel( когда измерение удачное и не отображаются символы «--.--» или «----.--»), при не отключенном приборе- сообщает что прибор отключен как на Рис.1. Кроме окна-помощника также при наведении указателя мыши на каждой кнопке всплывает всплывающие подсказки с информации о назначении кнопки в текущем режиме. На тех кнопках , которые не участвуют в текущем режиме подсказка не всплывет. 4.3.1.1 Назначение кнопок клавиатуры программы в режиме измерения параметров передатчика. В этот режим программа попадает разу после нажатия красной кнопки. F1 –перевод прибора в режим измерения частоты ВЧ F2 – перевод прибора в режим измерения мощности F3 – перевод прибора в режим измерения девиации в режиме ЧМ (модуляции в режиме АМ) F4 - перевод прибора в режим измерения КНИ F5 - перевод прибора в режим измерения частоты НЧ ESC- переход программы в режим установок прибора в режиме измерения параметров передатчика. В этот режим переходит только программа, прибор же остается в том режим в котором он находится в данный момент. Start-переход программы в режим изменения опций прибора. В этот режим переходит только программа, прибор же остается в том режиме, в котором он находится в данный момент. Tab- перевод программы в режим измерения параметров приемника. В этот режим переходит только программа, прибор же остается в том режиме, в котором он находится в данный момент. Перейдя в этот режим, программа не будет считывать измерения с прибора. Для этого необходимо будет выбрать кнопками F1,F2,F5 необходимый вид измерений. 4.3.1.2 Назначение кнопок клавиатуры программы в режиме измерения параметров приемника. F1 –перевод прибора в режим измерения частоты СИНАД F2 – перевод прибора в режим измерения напряжения F3 – перевод прибора в режим изменения входа измерений F4 – отключение/включение модуляции F5 - перевод прибора в режим измерения частоты НЧ ESC- переход программы в режим установок прибора в режиме измерения параметров приемника. В этот режим переходит только программа, прибор же остается в том режиме, в котором он находится в данный момент. Start-переход программы в режим изменения опций прибора. В этот режим переходит только программа, прибор же остается в том режиме, в котором он находится в данный момент. Tab- перевод программы в режим измерения параметров приемника. В этот режим переходит только программа, прибор же остается в том режиме, в котором он находится в данный момент. Перейдя в этот режим программа не будет считывать измерения с прибора. Для этого необходимо будет выбрать кнопками F1,F2,F5 необходимый вид измерений. 4.3.1.3 Назначение кнопок клавиатуры программы в режиме изменения установок прибора в режиме измерения параметров передатчика F1 – переход в режим редактирования напряжения модуляции F2 – переход в режим редактирования частоты модуляции F3 – переход в режим установки выхода модуляции ESC – Выход из установок 4.3.1.4 Назначение кнопок клавиатуры программы в режиме изменения установок прибора в режиме измерения параметров приемника F1 – переход в режим редактирования частоты F2 – переход в режим редактирования мощности на выходе F3 – переход в режим редактирования модуляции F4 – переход в режим редактирования частоты НЧ ESC – Выход из установок 4.3.1.5 Назначение кнопок клавиатуры программы в режиме редактирования любой установок выбранных в пунктах 4.3.1.3 и 4.3.1.4. 0-9, , - клавиши набора нового значения редактируемого параметра Space – удаление введенного числа Enter – подтверждение введенного параметра. После нажатия этой кнопки в прибор будет сохранено новое значение параметра, если оно попадает в допустимые значения. Допустимые значения отображаются в окне-помощнике в режиме редактирования параметра. При допустимом значении прибор перейдет в установки и отобразит все установки, в том числе и новое установленное. Esc – отмена редактирования параметра в установках 4.3.1.6 Назначение кнопок клавиатуры программы в режиме установки выхода модуляции F1 – установка выходом модуляции AFOUT F2 – установка выходом модуляции EXT3 F3 – установка выходом модуляции EXT4 4.3.1.7 Назначение кнопок клавиатуры программы в режиме установки входа измерений. F1 – установка выходом модуляции AFIN F2 – установка выходом модуляции EXT1 F3 – установка выходом модуляции EXT2 4.3.1.7 Назначение кнопок клавиатуры программы в опции прибора. F1 – смена вида модуляции ESC – Выход из опции 4.3.2 Назначение кнопок клавиатуры компьютера при активной форме программы Enter – сохранение результата измерения в Excel. При первом нажатии загружает и показывает сформированный отчет с измеренным параметром, а в последующие нажатия просто добавляет измерения в отчет. Эта кнопка доступна только когда программа находится в режиме измерения какого-то параметра и измерение удачное (не отображаются символы «--.--» или «----.--»). В любом случае о доступности этой кнопки пишет панель статуса внизу экрана программы сообщением Сохранить результат измерения – Enter или Сохранить результат измерения - Enter Завершить протокол – Пробел при однократном нажатии на нее. Пробел – вызов меню сохранения отчета в папке Otschet. Доступна только после сохранения хотя бы одного параметра в отчет. В любом случае о доступности этой кнопки пишет панель статуса внизу экрана программы сообщением Сохранить результат измерения - Enter Завершить протокол – Пробел при однократном нажатии на нее. 4.3.3 Назначение кнопок в меню сохранения отчета. В меню доступен только ввод номера отчета, под которым он будет сохранен. Сохранить – сохранение отчета под выбранным номером. В случае совпадения с существующим отчетом программа предложит переписать или отменить сохранение Распечатать – отправка отчета на печать Отмена – отмена сохранения и выход из меню сохранения отчета. 4.4 Настройка программы 4.3.1 Настройка СОМ-порта. В начале после запуска программы, но не нажата красная кнопка необходимо настроить СОМ-порт. Для этого правой кнопкой мыши вызываем меню настройки номера СОМ-порта. Настройка СОМ-порта доступна только при выключенной красной кнопке. В меню настройки доступен только выбор номера порта, все остальные настройки сохранены в программе по умолчанию и не меняются. 4.3.1 Не интерфейсные настройки Кроме органов управления есть файл Options.ini с названиями параметров сохраняющиеся в файле отчета при записи параметра в отчет по Enter. Например ключ F1= Частота несущая передатчика соответствует параметру сохраняемому по Enter в режиме измерения частоты в положении передатчик. Таким образом, все эти названия сохраняющиеся по Enter можно изменять если в этом будет необходимость. Всего имеется девять ключей с F1 по F8. C F1 по F5 сохраняются названия измеренных параметров прибора в режиме измерения параметров передатчика. При этом при измерении девиации сохраняется название из ключа F3_CM, а при измерении модуляции сохраняется из ключа F3_AM. Для настройки отчетов сохраняющихся по Пробелу имеется файл шаблон Shablon.xls который так же можно подстраивать при необходимости: шаг, названия и т.д.., кроме перестановок названий. Все отчеты сохраняются в папке Otschet. 4.5 Работа с программой совместно с прибором Весь интерфейс позаимствован у прибора, но функционально его не повторяет. То есть все нажатия кнопок в точности не повторяют нажатия кнопок прибора, а только лишь позволяет установить новые установки и снять измерения При нажатии на красную кнопку программа перейдет в рабочий режим. В этом режиме программа сохранит в приборе установленные по умолчанию в программе установки всех установок в приборе. То есть установит напряжение модуляции 0.25 В, частоту модуляции 1 кГц, выход модуляции AFOUT в установке в режиме измерения параметров передатчика, частоту 173 МГц, выход 120 дБм, модуляцию 30 кГц, частоту НЧ 1 кГц в установках прибора в режиме измерения параметров приемника, кроме того, устанавливается ЧМ модуляция и включение модуляции. Установив настройки, программа переведет прибор в режим измерения несущей частоты передатчика. Перевод прибора в другие режимы осуществляется кнопками F1-F5 в режиме измерения параметров передатчика и F1,F2,F5 в режиме измерения параметров передатчика. В режиме измерения параметров передатчика кнопка F3- изменяет вход измерений, который запоминается в приборе только после нажатия кнопок F1-F3 выбирающий соответствующий вход F1 - AFIN1,F2 - EXT1 и F3 - EX2. В режиме измерения параметров передатчика кнопка F4 (включение/выключение модуляции) - сразу сохраняет в приборе при нажатии на нее. При нажатии на Esc при измерении любого параметра прибором программа переходит в режим установок прибора в режиме измерения параметров или приемника или передатчика. Прибор же остается в режиме измерения, не переходя никуда. В режиме установок в программе можно установить новые установки нажатием F1-F5 в режиме Приемник и F1-F3 в режиме Передатчик. Программа перейдет в режим редактирования выбранного параметра! Кнопками 0-9 и , выставляем параметр, кнопкой Space на клавиатуре программы удаляют введенные символы, а Esc отмена. После установки нового значения новое значение фиксируют кнопкой Enter на клавиатуре прибора. Прибор переходит в режим измерения параметров и отображает соответствующий раздел установок с новыми установленными параметрами. Для переходами обратно в режим измерения нажмите Esc и выберите измерение, которое нужно кнопками F1-F5! Прибор из установок перейдет в выбранный пункт измерения. Для смены вида модуляции АМ/ЧМ перейдите в опции нажатием кнопки Start и там кнопкой F1 можно сменить АМ/ЧМ модуляцию. Только после нажатия на F1 – установится модуляция в приборе. Возврат в режим измерение так же происходит по нажатию Esc и нажатия на соответствующий пункт измерения кнопками F1-F5. Описание функций управления прибором РСТ-430 для написания других программ (приводится для предоставления возможности подстройки данной программы под потребности пользователя) Функция управления прибором делится на две части: первая часть отправляет команду соответствующему установленному режиму. Вторая часть размещена в событии принятия пакета от СОМ-порта и обрабатывает ответ в соответствии установленному режиму. //Первая часть функции – это функция CommPortWrite(int N_reg,int pod_regim) параметрами которой задается режим установки соответствующего режима или считывания соответствующего измерения с прибора. int N_reg – номер режима в котором находится прибор int pod_regim – номер подрежима в котором находится прибор MyComm1->Write – запись в СОМ-порт команды int reg_comport; //режим в котором находится прибор при обработки ответа от прибора int podreg_comport; //подрежим, в котором находится прибор при обработки ответа от прибора Итак, рассмотрим все возможные случаи вызова функции а)CommPortWrite(0,0) - //устанавливаем установки прибора в режиме измерения параметров передатчика Установливаем новые значения напряжения модуляции, частоты модуляции и выход модуляции( может быть AFOUT, EXT3, EXT4) те что по Esc. б) CommPortWrite(0,2) - //устанавливаем установки прибора в режиме измерения параметров приемник.! Устанавливаем новые в) CommPortWrite(3,0) - //переводим прибор в режим измерения частоты передатчика г) CommPortWrite(3,1) - //переводим прибор в режим измерения мощности передатчика д) CommPortWrite(3,2) - //переводим прибор в режим измерения девиации или модуляции передатчика в зависимости от вида модуляции CM_AM == "ЧМ" – при АМ модуляции и CM_AM == "АМ" – при ЧМ модуляции. е) CommPortWrite(3,3) - //переводим прибор в режим измерения КНИ передатчика ж) CommPortWrite(3,4)- //переводим прибор в режим измерения частоты НЧ передатчика з) CommPortWrite(4,0) - //переводим прибор в режим измерения чувствительности методом "СИНАД" приемника и) CommPortWrite(4,1) - //переводим прибор в режим измерения выходного напряжения приемника к) CommPortWrite(4,2) - //переводим прибор в режим измерения частоты НЧ приемника к) CommPortWrite(5,0) - //устанавливаем вид модуляции прибора. String F_VCH_izm String U_BCH_izm String dev_mod передатчика String KNI_pered String f_nch String CINAD "СИНАД" приемника String U_veyh приемника String F_Nch ="$0007:Mtf,00@"; ="$0007:Mtp,00@"; ="$0007:Mtd,00@"; //команда измерения частоты ВЧ передатчика //команда измерения мощности передатчика //команда измерения девиации модуляции ="$0007:Mtk,00@"; //команда измерения КНИ передатчика ="$0007:MtF,00@"; //команда измерения частоты НЧ передатчика ="$0008:MrSs,00@"; //команда измерения чувствительности методом ="$0007:MrU,00@"; //команда измерения выходного напряжения ="$0007:MrF,00@"; //команда измерения частоты НЧ приемника void __fastcall TForm1::CommPortWrite(int N_reg,int pod_regim) { if(N_reg == 0 && pod_regim==0) // { Nastr_paket_pered(); //Формируем команду по установкам Sleep(1000); MyComm1->Write(Set_Nastr_pered.c_str(),Set_Nastr_pered.Length()); //устанавливаем настройки прибора в режиме измерения параметров передатчика reg_comport = 0; //выставляем флаги для второй функции podreg_comport = 1; //при получении ответа от прибора } if(N_reg == 0 && pod_regim==2) { Nastr_paket_priem(); Sleep(1000); MyComm1->Write(Set_Nast_priem.c_str(),Set_Nast_priem.Length()); //устанавливаем настройки прибора изм приемника reg_comport = 0; podreg_comport = 3; } if(N_reg == 3 && pod_regim==0) //измерение частоты ВЧ передатчика { podreg_comport = 1; reg_comport = 3; MyComm1->Write(F_VCH_izm.c_str(),F_VCH_izm.Length()); } if(N_reg == 3 && pod_regim==1) { podreg_comport = 2; //измеряют мощность reg_comport = 3; MyComm1->Write(U_BCH_izm.c_str(),U_BCH_izm.Length()); // } if(N_reg == 3 && pod_regim==2) { podreg_comport = 3; //измеряют девиацию или модуляцию reg_comport = 3; if(CM_AM == "ЧМ") dev_mod="$0007:Mtm,00@"; else dev_mod="$0007:Mtd,00@"; MyComm1->Write(dev_mod.c_str(),dev_mod.Length()); } if(N_reg == 3 && pod_regim==3) { podreg_comport = 4; //измеряют КНИ reg_comport = 3; MyComm1->Write(KNI_pered.c_str(),KNI_pered.Length()); } if(N_reg == 3 && pod_regim==4) { podreg_comport = 5; //измеряют частоту НЧ передатчика reg_comport = 3; MyComm1->Write(f_nch.c_str(),f_nch.Length()); } if(N_reg == 4 && pod_regim==0) { podreg_comport = 1; //Измерить чувствительность методом "СИНАД" reg_comport = 4; MyComm1->Write(CINAD.c_str(),CINAD.Length()); } if(N_reg == 4 && pod_regim==1) { podreg_comport = 2; //Измерить выходное напряжения приемника reg_comport = 4; MyComm1->Write(U_veyh.c_str(),U_veyh.Length()); } if(N_reg == 4 && pod_regim==2) { podreg_comport = 3; //Измерить частоту НЧ приемника reg_comport = 4; MyComm1->Write(F_Nch.c_str(),F_Nch.Length()); } if(N_reg == 5 && pod_regim==0) //устанавливаем новый вид модуляции { Nastr_paket_priem(); Sleep(1000); MyComm1->Write(Set_Nast_priem.c_str(),Set_Nast_priem.Length()); reg_comport = 5; podreg_comport = 1; } Timer5->Enabled = true; //запускаем таймер таймаута, если время его истечет, а прибор ничего не выдаст в ответ на команду то в нем будет говорить об отключении прибора } //подпрограмма формирует команду установки новых значений установок прибора в режиме измерения параметров передатчика и вид модуляции(АМ или ЧМ).. Входными параметрами являются глобальные переменные String U_mod_str; //напряжение модуляции String F_mod_str; //частота модуляции String Out_mod_str; //выход модуляции может быть AFOUT, EXT3, EXT4 В итоге получаем готовую команду установки новых установок прибора в режиме измерения параметров передатчика записанную в переменную Set_Nastr_pered String Paket_tmp; String __fastcall TForm1::Nastr_paket_pered() { Paket_tmp = ":"; podreg_comport = 1; if(CM_AM == "ЧМ") //флаг показывает в какой вид модуляции прибор можно перевести Paket_tmp = Paket_tmp+"StA,"; //т.е. если ЧМ – значит прибор в режиме АМ модуляции и можно его Else //перевести в ЧМ модуляцию и наоборот Paket_tmp = Paket_tmp+"StF,"; if(Out_mod_str == "AFOUT") Nch_Bx = "M1"; if(Out_mod_str == "EXT3") Nch_Bx = "M2"; if(Out_mod_str == "EXT4") Nch_Bx = "M3"; Paket_tmp = Paket_tmp+U_mod_str+','+F_mod_str+','+Nch_Bx+'@'; Set_Nastr_pered = "$"+paket_side_ras(Paket_tmp)+Paket_tmp; } //подпрограмма формирует команду установки новых значений установок прибора в режиме измерения параметров приемника, а также отключение или включение модуляции и вид модуляции(АМ или ЧМ). Входными параметрами являются глобальные переменные String F_VH_str; String U_VH_str; String Dev_VH_str; String F_NH_str; String Vhod_izm; String Vkl_mod; //частота ВЧ в режиме измерения пар-в приемника //напряжение ВЧ в режиме измерения пар-в приемника //девиация в режиме измерения пар-в приемника //частота НЧ в режиме измерения пар-в приемника //вход измерения может быть AFIN, EXT1, EXT2 //включение или откючение модуляции В итоге получаем готовую команду установки новых установок прибора в режиме измерения параметров приемника записанную в переменную Set_Nast_priem String Paket_tmp; String __fastcall TForm1::Nastr_paket_priem() { Paket_tmp = ":"; if(Vhod_izm == "AFIN") Izm_Bx_str = "IN4"; if(Vhod_izm == "EXT1") Izm_Bx_str = "IN2"; if(Vhod_izm == "EXT2") Izm_Bx_str = "IN3"; if(Vkl_mod == "ВКЛЮЧИТЬ МОД.") Mod_vkl = "M3"; else { if(CM_AM == "ЧМ") Mod_vkl = "M2"; else Mod_vkl = "M0"; } //Paket_tmp = Paket_tmp+"SrF,"; if(CM_AM == "ЧМ") //флаг показывает в какой вид модуляции прибор можно перевести Paket_tmp = Paket_tmp+"SrA,"; //т.е. если ЧМ – значит прибор в режиме АМ модуляции и можно его Else //перевести в ЧМ модуляцию и наоборот Paket_tmp = Paket_tmp+"SrF,"; Paket_tmp=Paket_tmp+F_VH_str+','+U_VH_str+','+Dev_VH_str+','+F_NH_str+','+Mod_vkl+','+Izm_Bx_s tr+'@'; Set_Nast_priem = "$"+paket_side_ras(Paket_tmp)+Paket_tmp; } Теперь вторая часть функции работы с прибором RST-432: Обработка ответа прибора на принятую команду! Функция находится в обработчике СОМ-порта при принятии ответа от прибора. String Tmp_comm; //текущий измеряемый параметр в приборе short Tmp_count; //ее размер в байтах //переменные измеренных параметров прибора в режиме измерения параметров приемника char F_BCH[10]; //измеренная частота ВЧ в режиме измерения пар-в приемника short F_BCH_count=0; //ее размер в байтах char u_BCH[10]; приемника short u_BCH_count=0; char mod_dev[10]; ; short mod_dev_count=0; char kni_pered[10]; short kni_pered_count=0; char Fnch_pered[10]; short Fnch_pered_count=0; char Fvch_priem[10]; short Fvch_priem_count=0; char Uvyeh_priem[10]; приемника short Uvyeh_priem_count=0; char Fnch_priem[10]; short Fnch_priem_count=0; short f_error=0; //измеренная напряжение ВЧ в режиме измерения пар-в //ее размер в байтах //измеренная девиация в режиме измерения пар-в приемника //ее размер в байтах //измеренная КНИ передатчика //ее размер в байтах //измеренная частота НЧ передатчика //ее размер в байтах //измеренная частота ВЧ в режиме измерения пар-в приемника //ее размер в байтах //измеренное напряжение ВЧ в режиме измерения пар-в //ее размер в байтах //измеренная частота НЧ в режиме измерения пар-в приемника //ее размер в байтах //1-ошибка 0-ошибок нет //переменные сом порта при приеме байтов String Com_paket_full; //весь пакет short f_fist_paket=1; //заголовок short f_com_full=0; //пришли все части пакета char paket_full_tmp[100]; short ukaz_paket_tmp=0; //при приходе ответа от прибора срабатывает эта функция void __fastcall TForm1::MyComm1RxChar(TObject *Sender, DWORD Count) { unsigned char *Tmp; //временный пакет куда сбрасываются принятый ответ от прибора Tmp = new char[Count]; char *Byte; MyComm1->Read(Tmp,Count); //читаем с СОМ-порта пришедший с прибора пакет f_error=0; //считаем что пока ошибок нет Timer5->Enabled = false; //выключаем таймер таймаута обрыва связи f_priboroff=0; //ответ пришел значит прибор активен if(f_com_full==0) //так как ответ от прибора приходит частями, то { for(int i=0;i<Count;i++) //просто склеиваем части в один пакет { Com_paket_full = Com_paket_full + (char)Tmp[i]; paket_full_tmp[ukaz_paket_tmp] = Tmp[i]; ukaz_paket_tmp++; } if(Tmp[Count-1]=='@') //признаком того что пришла последняя часть пакета – символ конца @ { f_com_full=1; //говорим что пакет пришел полностью ukaz_paket_tmp=0; } } if(paket_full_tmp[6]=='n' && paket_full_tmp[7]=='a' && paket_full_tmp[8]=='k' && f_com_full==1) //в случае прихода команды ошибки выставляем флаг ошибки f_error=1; if(paket_full_tmp[6]=='S' && paket_full_tmp[7]=='T' && paket_full_tmp[8]=='A' && paket_full_tmp[9]=='T' && paket_full_tmp[10]=='E' && f_com_full==1) //в случае прихода команды ошибки выставляем флаг ошибки f_error=1; if(reg_comport == 0 && podreg_comport == 1 && f_com_full==1) //установили настройки новые передатчика { if( !Pered_nastr(Com_paket_full.c_str()) && f_error==0) //анализируем команду ответа { U_mod_str = U_mod_str_pre; //если анализируемая команда не верна F_mod_str = F_mod_str_pre; //восстанавливаем старые установки обратно Out_mod_str = Out_mod_str_pre; } } if(reg_comport == 0 && podreg_comport == 3 && f_com_full==1) //установили новые установки приемника { if( !Priem_nastr(Com_paket_full.c_str()) && f_error==0) //анализируем команду ответа { F_VH_str = F_VH_str_pre; //если анализируемая команда не верна U_VH_str = U_VH_str_pre; ; //восстанавливаем старые установки обратно Dev_VH_str = Dev_VH_str_pre; F_NH_str = F_NH_str_pre; Vkl_mod = Vkl_mod_pre; Vhod_izm = Vhod_izm_pre; } } //------------------------------измеренные параметры передатчика----------------------------------------------// if(reg_comport == 3 && podreg_comport == 1 && f_com_full==1) //пришел ответ с измеренной частотой ВЧ кнопка F1 { if(f_error==0) //если не пришла команда с ошибкой в приборе { ukaz_paket=10; F_BCH_count = Command_iz_paket(Com_paket_full.c_str(),F_BCH);//считываем величину измерения Tmp_comm = Char_To_Str(F_BCH,F_BCH_count); //переводим ее в String if(Tmp_comm.AnsiPos('.')==0) //удостоверяемся что это число Tmp_comm = "- - - -.- -"; //вместо измерения пишем штрихи else { //данные правильные} } Else //если ошибка то тоже пишем штрихи Tmp_comm = "- - - -.- -"; } if(reg_comport == 3 && podreg_comport == 2 && f_com_full==1) //пришел ответ с измеренной напряжением ВЧ кнопка F2 { if(f_error==0) //если не пришла команда с ошибкой в приборе { ukaz_paket=10; u_BCH_count = Command_iz_paket(Com_paket_full.c_str(),u_BCH);//считываем величину измерения Tmp_comm = Char_To_Str(u_BCH,u_BCH_count); //переводим ее в String if(Tmp_comm.AnsiPos('.')==0) //удостоверяемся что это число Tmp_comm = "- -.- -"; //вместо измерения пишем штрихи else { //данные правильные} } Else Tmp_comm //если ошибка то тоже пишем штрихи = "- -.- -"; } if(reg_comport == 3 && podreg_comport == 3 && f_com_full==1) //пришел ответ с измеренной девиацией или модуляцией кнопка F3 в зависимости от вида модуляции { if(f_error==0) //если не пришла команда с ошибкой в приборе { ukaz_paket=10; mod_dev_count = Command_iz_paket(Com_paket_full.c_str(),mod_dev); Tmp_comm = Char_To_Str(mod_dev,mod_dev_count); if(Tmp_comm.AnsiPos('.')==0) //удостоверяемся что это число Tmp_comm = "- -.- -"; else { //данные правильные} } Else //если ошибка то тоже пишем штрихи Tmp_comm = "- -.- -"; } if(reg_comport == 3 && podreg_comport == 4 && f_com_full==1) //пришел ответ с измеренной напряжением КНИ кнопка F4 { if(f_error==0) //если не пришла команда с ошибкой в приборе { ukaz_paket=10; kni_pered_count = Command_iz_paket(Com_paket_full.c_str(),kni_pered); Tmp_comm = Char_To_Str(kni_pered,kni_pered_count); if(Tmp_comm.AnsiPos('.')==0) //удостоверяемся что это число Tmp_comm = "- -.- -"; else { //данные правильные} } Else //если ошибка то тоже пишем штрихи Tmp_comm = "- -.- -"; } if(reg_comport == 3 && podreg_comport == 5 && f_com_full==1) //пришел ответ с измеренной частота НЧ кнопка F5 { if(f_error==0) //если не пришла команда с ошибкой в приборе { ukaz_paket=10; Fnch_pered_count = Command_iz_paket(Com_paket_full.c_str(),Fnch_pered); Tmp_comm = Char_To_Str(Fnch_pered,Fnch_pered_count); if(Tmp_comm.AnsiPos('.')==0) //удостоверяемся что это число Tmp_comm = "- - - -.- -"; else { //данные правильные} } Else //если ошибка то тоже пишем штрихи Tmp_comm = "- - - -.- -"; } //-------------------------------измеряемые параметры приемника-----------------------------------------------// if(reg_comport == 4 && podreg_comport == 1 && f_com_full==1) //пришел ответ с измеренной СИНАД кнопка F1 { if(f_error==0) //если не пришла команда с ошибкой в приборе { ukaz_paket=11; Fvch_priem_count = Command_iz_paket(Com_paket_full.c_str(),Fvch_priem); Tmp_comm = Char_To_Str(Fvch_priem,Fvch_priem_count); if(Tmp_comm.AnsiPos('.')==0) //удостоверяемся что это число Tmp_comm = "- -.- -"; else { //данные правильные} } Else Tmp_comm //если ошибка то тоже пишем штрихи = "- -.- -"; } if(reg_comport == 4 && podreg_comport == 2 && f_com_full==1) //пришел ответ с измеренным напряжением ВЧ кнопка F2 { if(f_error==0) //если не пришла команда с ошибкой в приборе { ukaz_paket=10; Uvyeh_priem_count = Command_iz_paket(Com_paket_full.c_str(),Uvyeh_priem); Tmp_comm = Char_To_Str(Uvyeh_priem,Uvyeh_priem_count); if(Tmp_comm.AnsiPos('.')==0) //удостоверяемся что это число Tmp_comm = "- -.- -"; else { //данные правильные} } Else //если ошибка то тоже пишем штрихи Tmp_comm = "- -.- -"; } if(reg_comport == 4 && podreg_comport == 3 && f_com_full==1) //пришел ответ с измеренной частотой НЧ кнопка F5 { if(f_error==0) //если не пришла команда с ошибкой в приборе { ukaz_paket=10; Fnch_priem_count = Command_iz_paket(Com_paket_full.c_str(),Fnch_priem); Tmp_comm = Char_To_Str(Fnch_priem,Fnch_priem_count); if(Tmp_comm.AnsiPos('.')==0) //удостоверяемся что это число Tmp_comm = "- - - -.- -"; else { //данные правильные} } Else //если ошибка то тоже пишем штрихи Tmp_comm = "- - - -.- -"; } if(reg_comport == 5 && podreg_comport == 1 && f_com_full==1) //выставили вид модуляции { if(f_error==0) //проверяем что модуляция установилась { if(Com_paket_full.AnsiPos("srA")==0 && Com_paket_full.AnsiPos("srF")==0)//проверяем что действительно не ответ с установленным видом модуляции if(CM_AM == "ЧМ") //если так то восстанавливаем обратно CM_AM = "АМ"; else CM_AM = "ЧМ"; Display_regim_view(5,1,false); } } delete Tmp; if(f_com_full==1) //пакет весь принят по частям и обработан восстанавливаем переменные { Com_paket_full = ""; f_com_full=0; } //Timer4->Enabled = true; } //Подпрограмма обработки ответа от прибора. Проверяем шапку на соответствие. Сохраняет все установленные установки установленные командой CommPortWrite(0,1) извлекая их из ответа прибора. char f_BCH[10]; //частота ВЧ в установках прибора в режиме измерения параметров передатчика F1 в установках. short f_BCH_count=0; //размер величины частоты ВЧ в равная числу байт например 10.0 будет 4 байта char U_BCH[10]; //напряжение ВЧ в установках прибора в режиме измерения параметров передатчика F2 в установках. short U_BCH_count=0; //размер величины напряжения ВЧ в равная числу байт char Mod_AM[10]; //модуляция в установках прибора в режиме измерения параметров передатчика F3 в установках. short Mod_AM_count=0;//размер величины модуляции в равная числу байт char Mod[10]; //частота НЧ в установках прибора в режиме измерения параметров передатчика F4 в установках. short Mod_count=0; //размер величины частоты НЧ в равная числу байт char Mod_Bx[10]; //включение или отключение модуляции прибора в режиме измерения параметров приемника F4 short Mod_Bx_count=0; //размер величины включение или отключение модуляции в равная числу байт char Izm_Bx[10]; //вход измерения прибора в режиме измерения параметров приемника F3 short Izm_Bx_count=0; //размер величины вход измерения модуляции в равная числу байт char U_nch[10]; //напряжение НЧ в установках прибора в режиме измерения параметров приемника F1 в установках. short U_nch_count=0; //размер величины напряжения НЧ модуляции в равная числу байт char F_nch[10]; //частота НЧ в установках прибора в режиме измерения параметров приемника F2 в установках. short F_nch_count=0; //размер величины частоты НЧ модуляции равная числу байт char Bx_Nch[10]; //выход модуляции НЧ в установках прибора в режиме измерения параметров приемника F3 в установках. short Bx_Nch_count=0; //размер величины выхода модуляции НЧ равная числу байт short ukaz_paket; //указатель в пакете ответа прибора //переменные установок в режиме измерения параметров приемника, отключении включении модуляции //F4, изменения вида модуляции, изменения входа измерения F3 String F_VH_str_pre; //сохраненное до изменения частота ВЧ String U_VH_str_pre; //сохраненное до изменения напряжение ВЧ String Dev_VH_str_pre; //сохраненное до изменения девиация String F_NH_str_pre; //сохраненное до изменения частота НЧ String Vkl_mod_pre; //включение или отключение модуляции до изменения String Vhod_izm_pre; //вход измерения может быть AFIN, EXT1, EXT2 до изменения String CM_AM; //выбор ЧМ или АМ если прибор в режиме АМ то переменная равна ЧМ //переменные установок в режиме измерения параметров передатчика String U_mod_str_pre; //сохраненное до изменения напряжение модуляции String F_mod_str_pre; //сохраненное до изменения частота модуляции String Out_mod_str_pre; //сохраненное до изменения выход модуляции bool __fastcall TForm1::Priem_nastr(char *kommanda) //команда обработки ответа в режиме приемника {//команда в ответ на команду чтения параметров передатчика и установки if(kommanda[6] == 's' && kommanda[7] == 'r') //заголовок верный { if(kommanda[8] == 'A' || kommanda[8] == 'F') //в режиме АМ или в режиме ЧМ { f_BCH_count = 0; U_BCH_count=0; Mod_AM_count=0; Mod_count=0; Mod_Bx_count=0; Izm_Bx_count=0; ukaz_paket=10; //ставим указатель на начало первого установленного параметра в ответе f_BCH_count = Command_iz_paket(kommanda,f_BCH); U_BCH_count = Command_iz_paket(kommanda,U_BCH); Mod_AM_count = Command_iz_paket(kommanda,Mod_AM); Mod_count = Command_iz_paket(kommanda,Mod); Mod_Bx_count = Command_iz_paket(kommanda,Mod_Bx); Izm_Bx_count = Command_iz_paket(kommanda,Izm_Bx); F_VH_str = Char_To_Str(f_BCH,f_BCH_count); F_VH_str_pre = F_VH_str; U_VH_str = Char_To_Str(U_BCH,U_BCH_count); U_VH_str_pre = U_VH_str; Dev_VH_str = Char_To_Str(Mod_AM,Mod_AM_count); Dev_VH_str_pre = Dev_VH_str; F_NH_str = Char_To_Str(Mod,Mod_count); F_NH_str_pre = F_NH_str; Mod_vkl = Char_To_Str(Mod_Bx,Mod_Bx_count); if(Mod_vkl == "M3") { Vkl_mod = "ВКЛЮЧИТЬ МОД."; f_vkl_mod=false; } if(Mod_vkl == "M0" || Mod_vkl == "M2") { Vkl_mod = "ОТКЛЮЧИТЬ МОД."; f_vkl_mod=true; } if(Mod_vkl == "M3" || Mod_vkl == "M0" || Mod_vkl == "M2") Vkl_mod_pre = Vkl_mod; Izm_Bx_str = Char_To_Str(Izm_Bx,Izm_Bx_count); if(Izm_Bx_str == "IN4") Vhod_izm = "AFIN"; if(Izm_Bx_str == "IN2") Vhod_izm = "EXT1"; if(Izm_Bx_str == "IN3") Vhod_izm = "EXT2"; if(Izm_Bx_str == "IN4" || Izm_Bx_str == "IN2" || Izm_Bx_str == "IN3") Vhod_izm_pre = Vhod_izm; } if(kommanda[8] == 'A') CM_AM = "ЧМ"; if(kommanda[8] == 'F') CM_AM = "АМ"; } //в режиме АМ //в режиме ЧМ } bool __fastcall TForm1::Pered_nastr(char *kommanda) //команда обработки ответа в режиме приемника { if(kommanda[6] == 's' && kommanda[7] == 't') //заголовок верный { if(kommanda[8] == 'A' || kommanda[8] == 'F') //в режиме АМ или в режиме ЧМ { U_nch_count=0; F_nch_count=0; Bx_Nch_count=0; ukaz_paket=10; U_nch_count = Command_iz_paket(kommanda,U_nch); F_nch_count = Command_iz_paket(kommanda,F_nch); Bx_Nch_count = Command_iz_paket(kommanda,Bx_Nch); U_mod_str = Char_To_Str(U_nch,U_nch_count); U_mod_str_pre= U_mod_str; F_mod_str = Char_To_Str(F_nch,F_nch_count); F_mod_str_pre= F_mod_str; Nch_Bx = Char_To_Str(Bx_Nch,Bx_Nch_count); if(Nch_Bx == "M1") Out_mod_str = "AFOUT"; if(Nch_Bx == "M2") Out_mod_str = "EXT3"; if(Nch_Bx == "M3") Out_mod_str = "EXT4"; if(Nch_Bx == "M1" || Nch_Bx == "M2" || Nch_Bx == "M3") Out_mod_str_pre = Out_mod_str; } } if(kommanda[8] == 'A') //в режиме АМ CM_AM = "ЧМ"; if(kommanda[8] == 'F') //в режиме ЧМ CM_AM = "АМ"; } //подпрограмма извлечения установок из команды возвращает ее размер short __fastcall TForm1::Command_iz_paket(char *paket_in,char *paket_out) { command_count = 0; char byte1[1]; for(short i=0;i<10;i++) { byte1[0] = paket_in[ukaz_paket]; if(byte1[0] != ',' && byte1[0] != '*') paket_out[command_count++]=paket_in[ukaz_paket++]; else { i=10; ukaz_paket++; } } return command_count; } //подпрограмма перевода тип char в тип String String __fastcall TForm1::Char_To_Str(char *paket_in,short count_char) { String Byte=""; for(int i=0;i<count_char;i++) Byte = Byte+(char)paket_in[i]; return Byte; }