Установка IDE Momentics была произведена на инструментальную машину под Windows. Установка ОС QNX была произведена на тот же компьютер на виртуальную машину.
3.1.2 Развертывание связи между инструментальной и целевой платформами
Настройка связи
1. В QNX VMware Workstation
Edit ->Virtual Network Editor
Рис. 3 Настройка связи в виртуальной машине
2. В QNX
Configure->Network->появляется окно TCP/IP Configuration
На вкладке Devices делаем такие настройки:
Рис. 4 Настройка связи в QNX
На вкладке Network делаем такие настройки:
Рис. 5 Настройка связи в QNX
Проверяем в QNX соединение:
Видим, что отправляются пакеты
Рис. 6 Проверка связи в QNX
Проверяем в Windows соединение:
Рис. 7 Проверка связи в Windows
В IDE Momentics:
Добавляем окно Target Navigator
Рис. 8 Настройка IDE Momentics
Подключаем QNX:
Щёлкаем по окну Target Navigator правой кнопкой, появляется окно. На рисунке показаны настройки.
Рис. 9 Настройка IDE Momentics
При правильном подключении в окне Target Navigator будут отображаться процессы, запущенные в QNX.
Рис. 10 Вид окна Target Navigator
4.1 Выбрать алгоритм интерполяции, экстраполяции или аппроксимации для гипотетической системы управления.
Интерполяция — в вычислительной математике способ нахождения промежуточных значений величины по имеющемуся дискретному набору известных значений.
Ступенчатая интерполяция заключается в сохранении величины выборки в пределах шага дискретизации .
4.2 Программно реализовать выбранный алгоритм.
Выбранный алгоритм был реализован функцией interpolate(…), к которой в клиент-серверном приложении будет обращаться сервер для обработки данных, присланных клиентом.
// функция интерполяции
void interpolate
(
int p_numb, // Количество исходных точек
int i_numb, // Требуемое количество точек после интерполяции
float* data, // Буфер исходных данных
float* result // Буфер результата
)
{
float time[50]; // Абсциссы исходных точек
float value[50]; // Ординаты исходных точек
float maxt,mint,step; // Промежуточные переменные
float cur_time, count_time;
int cur_time_ind;
int i,j,k;
// Получение временных границ
maxt=data[0];
mint=data[0];
// Выделение данных
for (i=0; i<p_numb; i++)
{
time[i]=data[2*i];
value[i]=data[2*i+1];
if (time[i]>maxt) maxt=time[i];
if (time[i]<mint) mint=time[i];
}
// Получение шага интерполяции
step=(maxt-mint)/(i_numb-1);
// Расчёт значений интерполянта в искомых точках
for (k=0; k<i_numb; k++)
{
// Расчёт абсциссы точки
result[2*k]=mint+step*k;
//Расчет ординаты точки
count_time=mint+step*k;
cur_time_ind=0;
cur_time=time[0];
for (j=0; j<p_numb; j++) {
if (time[j]>cur_time && time[j]<=count_time) {
cur_time_ind=j;
cur_time=time[j];
}
}
result[2*k+1]=value[cur_time_ind];
}
return;
}
4.3. Разработка клиент-серверного приложения.
Клиент (interp_client.c) считывает информацию о доступных точках (количество, абсциссы и ординаты), а также требуемое количество точек из файла и пересылает эту информацию серверу.
Сервер обрабатывает точки в соответствии с алгоритмом и посылает клиенту ответ – рассчитанные точки (абсциссы и ординаты) в требуемом количестве.
Клиент, получив ответ, записывает данные в выходной файл.
Текст interp_client.c.
#include <stdio.h>
#include <errno.h>
#include <sys/iofunc.h>
#include <sys/dispatch.h>
#include <unistd.h>
int main( int argc, char **argv)
{
int p_numb, i_numb; // Количества исходных и требуемых точек
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.