Программа для работы со стендом ТРД-2, Среда Builder C++ 6.0

 
1 2 3

TEvg

аксакал

админ. бан
kirya> :-) Да, вопрос не для меня. Я все делаю в лоб. Рисую например так:
Image->Canvas->Pen->>Width = 1;
Image->Canvas->>MoveTo(os4-h_shtrih/2,os2-step_y*i);
Image->Canvas->>LineTo(os4+h_shtrih/2,os2-step_y*i);
kirya> Искал как лучше рисовать, в итоге только так научился.

Мне ваш график понравился. :) Похож на мой. В свое время искал чем рисовать, попадалась куча всего, а нужного не было. Пришлось писать самому таким же макаром. И оказалось что это разумнее всего.
 3.6.133.6.13

Mishka

модератор
★★★
TEvg> А ещё пугают страшным словом goto. На самом деле нет ничего неправильного. Нужно писать так чтобы был понятен свой собственный код.

Женя, не свисти. Человек уже пользуется ассинхронным вводом-выводом с ожиданием по событию. И делает это, по видимому, из разных ниток. С глобальными переменными, если их не защищать, можно поиметь очень интересный цимес в этом случае.
 6.06.0

Mishka

модератор
★★★
kirya> Я так и сделал, только не 30 сек нужно ставить, а то получится что после приема последнего байта нужно ждать 30сек чтобы проверить... Я поставил 1000мсек.

Ты должен придумать модель общения с устройством. Если ты считаешь, что отсутствие данных в течении 1 секунды это признак окончания, то хорошо.

В принципе, если ты общаешься целыми сообщениями, а не потоками, то реализуется процесс, который понимает структуру такого сообщения. Он читает данные и собирает сообщения. А другие ф-ции или процессы спрашивают только у него. Скажем, есть ли сообщение? А он отвечает, что сообщение есть и его выдаёт, или нет и выдаёт пустой буфер. Сам процесс при этом постоянно стоит на событии и ждёт данные, считает байтики, кладёт их в буфер. Он может прерываться почаще, может реализовать таймауты. Если общение потоком, то процессы более высого уровня разбирают какая часть потока нужна сейчас, а какая потом.
 6.06.0

kirya

втянувшийся

Mishka> Ты должен придумать модель общения с устройством. Если ты считаешь, что отсутствие данных в течении 1 секунды это признак окончания, то хорошо.

Да, в моем случае это признак.

Mishka> В принципе, если ты общаешься целыми сообщениями, а не потоками, то реализуется процесс

Да, видимо сообщениями. Компьютер посылкает устройству команду на чтение или запись, а устройство выдает пакет данный или принимает данные для записи.
С процессом подумаю как это делается. По крайней мере поучусь как это делать нужно, а не как я делаю обычно. Идея ваша ясна, но пока я не знаю как от теории к практике перейти. Буду разбираться, спасибо.
www.kirov-rockets.ru  

kirya

втянувшийся

Подскажите мне еще.
if(signal == WAIT_TIMEOUT && counter>1 )
{
MessageBox(NULL,"Данные прочитаны","Успех",MB_OK);
counter=0;
}
по этому условию я определяю что все данные считаны. При этом я имею большой массив данных, около 10кБ. Т.О внутри этого условия я могу сохранить принятые данные в файл, обработать их и построить график.
Правильно ли я думаю как это сделать
if(signal == WAIT_TIMEOUT && counter>1 )
{
MessageBox(NULL,"Данные прочитаны","Успех",MB_OK);
Save_file();
Build_graph();
counter=0;
}
т.е. просто реализую 2 функции и вызываю их из этого условия. Или сейчас делается как-то иначе?
www.kirov-rockets.ru  

kirya

втянувшийся

Когда я сохраняю новые опции в прибор, то предварительно проверяю их на правильность. У меня 7 опций, условия для них разные, при этом проверка у меня выглядит так: проверяется первая опция, если все нормально проверяется вротая и т.д. Т.е. условия вложены друг в друга
if()
{
опция1 не верна
}
else
{
опция1 верна
if()
{
опция2 не верна
}
else
{
опция2 верна
и так далее
}
}
Правильно ли я делаю или в этом случае принято применять другие способы анализа?
www.kirov-rockets.ru  

TEvg

аксакал

админ. бан
kirya> Правильно ли я делаю или в этом случае принято применять другие способы анализа?

Отчего же нет? Не запутайтесь только в порядке - что куда вложено и где надо ставить закрывающие скобки }.

Ещё можно перечислить все условия после одного оператора if через логическое И - && или через логическое ИЛИ - ||

if (условие1 || условие2 || условие3 || условие4 || условие5 || условие6 || условие7)
{хотя бы одно условие неверное}
else
{все условия верны}

Где условия надо писать так же как вы делали раньше - чтобы получалась истина, в случае ошибочных данных.
Ваша лесенка из if могла расчесать набор данных и выявить сколько ошибок и где они. Мой пример позволяет просто определить есть ошибка или нет.
 

Mishka

модератор
★★★
kirya> if(signal == WAIT_TIMEOUT && counter>1 )
kirya> {
kirya> MessageBox(NULL,"Данные прочитаны","Успех",MB_OK);
kirya> counter=0;
kirya> }

У тебя команды устройству всегда имеют структуру. А ответы от устрийства? Сообщения обычно имеют структуру. Инигда они фиксированной длины, иногда нет. В последнем случае есть несколько вариантов:
1. сообщения начинаются и заканчиваются специальными символами, котрые внутри тела сообщения не могут встретится (они специально кодируются другим образом или в принципе не могит встретиться).
2. сообщение начинается специальным символом, может заканчиваться специалным символом, но имеет фиксированныи заголовок, где, в частности, есть длина переменной части.

Можно допустить, что передача данных идет потоком по байту (или по 16 битному слову, или по 32 битному, или по 16 байтов, ...) пока не закончится и молчание устройства говорит об окончании данных, но я отношу такой протокол к плохому дизайну.

Так вот, если есть признаки начала и окончания сообщения, то таймаут нужен только для определения ошибки (если заложено), а проверять надо на соответствие струцтуре сообщения и выдавать готовность чтения только после получения всего сообщения и проверки его на соответствие протоколу.

kirya> по этому условию я определяю что все данные считаны. При этом я имею большой массив данных, около 10кБ. Т.О внутри этого условия я могу сохранить принятые данные в файл, обработать их и построить график.

Да, можешь.Если таймаут единственный признак окончания сообщения.
 

kirya

втянувшийся

Ну кажется одолел. Теперь начинаю процесс проверок. Как это делать? Точнее у меня стоит XP, больше никаких оп.систем нет. Теперь мне что нужно искать кого-то с другими оп.системами и проверять там?
www.kirov-rockets.ru  

Mishka

модератор
★★★
kirya> Ну кажется одолел. Теперь начинаю процесс проверок. Как это делать? Точнее у меня стоит XP, больше никаких оп.систем нет. Теперь мне что нужно искать кого-то с другими оп.системами и проверять там?

Вариантов несколько:
1. Искать другую машину с портом и другой операционкой.
2. Попробовать поиграться с виртуалками (если есть охота) и поставить другие ОС. Тут из подводных камней будет то, что драйвер нужен (может быть) специальный.
3. Взять другой жёсткий диск, на него поставить другую ОС.
 6.06.0
1 2 3

в начало страницы | новое
 
Поиск
Поддержка
Поддержи форум!
ЯндексЯндекс. ДеньгиХочу такую же кнопку
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru