HELLA
Forum Haunter / Завсегдатай форума
Участник № / Member № 104
отправлено / posted
Возникла проблема: среди стандартных FBD-блоков отсутствует блок программного задатчика. Может быть кто-то создавал его из стандартных модулей или на С++ создал свой блок и поделится опытом. Вообще-то это серьезный пробел в библиотеке, программное регулирование температуры,например, очень часто требуется!
Сообщения / Posts 139 | Из / From: РОССИЯ
| IP / IP: IP адрес / IP address |
отправлено / posted
Нет - штатного блока нет, но его можно легко на С++ написать. Если хотите - можем помочь. Давайте Ваш алгоритм задатчика.
Сообщения / Posts 17301 | Из / From: Россия
| IP / IP: IP адрес / IP address |
HELLA
Forum Haunter / Завсегдатай форума
Участник № / Member № 104
отправлено / posted
Добрый день! Высылаем Вам алгоритм работы программного задатчика: Программный задатчик формирует кусочно-линейную функцию времени(в сек ,0-86399), состоящую из нескольких (до 12) отрезков. Для каждого отрезка задается его продолжительность во времени (в сек ,0-86399), и конечная ордината. Предусмотрена возможность пускать, останавливать и сбрасывать программу. В состоянии сброса сигнал на выходе алгоритма имеет начальное значение Х=Хо,показания таймера обнуляются(Nуч=0,Тост=0). Алгоритм переводится в состояние “пуск”, “стоп”, “сброс” с помощью дискретных сигналов соответственно Сп, Сст и Ссбр, поступающих на вход алгоритмаПосле пуска сигнал X начинает изменяться в соответствии с заданной программой (от Х0). Параметры Хi и Тi на настроечных входах задают соответственно конечные ординаты и продолжительность отдельных участков программы.Nуч=номер текущего участка,Тост=время до конца участка(таймер на убывание). Алгоритм переводится в состояние “пуск”, “стоп”, “сброс” с помощью дискретных сигналов соответственно Сп, Сст и Ссбр, поступающих на вход алгоритма. При этом команды “пуск” и “стоп” действуют по переднему фронту (т.е. при переходе сигнала из состояния лог. 0 в лог. 1). Сигнал "стоп" вызывает останов работы таймера (но не обнуление),выход задатчика замораживается.После снятия сигнала "стоп" отсчет времени продолжается, сигнал задатчика продолжает изменяться согласно программе с того значения,на котором был "заморожен". Сигнал “сброс” является приоритетным, то есть при наличии лог. 1 на входе “сброс” алгоритм переходит в состояние “сброс” и не может быть переведен в другие состояния с помощью дискретных команд на входе алгоритма. Если команды “пуск” и “стоп” пришли на вход алгоритма одновременно, то выполняется команда “стоп”. После выполнения последнего участка программа переходит в состояние “конец программы” , при этом выходной сигнал Х замораживается.
Выходы алгоритма имеют следующее назначение: Nуч текущий номер участка; Тост время, оставшееся до окончания текущего участка; Dп, Dст, Dсбр дискретные сигналы, индицирующие текущее состояние программы (соответственно “пуск”, “стоп”, “сброс”). Dкп конец программы. Если входной сигнал Сп =1 и снимается сигнал сброса (т.е. Ссбр переходит из состояния Ссбр =1 в состояние Ссбр =0), то алгоритм пускается (т.е. эта ситуация рассматривается как приход переднего фронта сигнала Сп). Если Сп =1 и снимается сигнал останова (т.е. Сст переходит из состояния Сст =1 в Сст =0) алгоритм остается в состоянии “стоп”. Допустимы приемлемые упрощения алгоритма, связанные с особенностями программирования.
Сообщения / Posts 139 | Из / From: РОССИЯ
| IP / IP: IP адрес / IP address |
отправлено / posted
Особенность FBD-блока в том, что его максимальное количество входов никак не может удовлетворить потребностям Вашего алгоритма - их всего реально может быть не больше 11 (без входа RUN). Остается только FBD+Глобальные переменные типа W, для реализации этого алгоритма.
Сообщения / Posts 17301 | Из / From: Россия
| IP / IP: IP адрес / IP address |
HELLA
Forum Haunter / Завсегдатай форума
Участник № / Member № 104
отправлено / posted
Возможно ли считывать значения величин время- значение в конечной точке в табличном виде в текстовом формате.Если нет ,то количество программных участков сделать максимально возможным. Нельзя ли предусмотреть в этом случае включение последовательно нескольких FBD-блоков?
Сообщения / Posts 139 | Из / From: РОССИЯ
| IP / IP: IP адрес / IP address |
отправлено / posted
Как вариант - возможно в текстовом файле задавать таблицу, если этот вариант устроит, то можно попробовать...
Сообщения / Posts 17301 | Из / From: Россия
| IP / IP: IP адрес / IP address |
HELLA
Forum Haunter / Завсегдатай форума
Участник № / Member № 104
// Структура описывающая FBD-модуль typedef struct { int q_in; // Количество входов int q_out; // Количество выходов int q_int; // Зарезервировано int type; // Номер в списке функциональных разделов. // Должно быть равно 17 char name[8]; // Короткое имя для вывода на экран char fname[8]; // Полное имя } DO_DEFAULT;
// Тело FBD-модуля int FBD_DLL( float *in, // Указатель на массив входов float *out, // Указатель на массив выходов int *l, int *rl ) // Зарезервировано { if(c_step==-1){ out[0]=in[0]; c_step=0; c_call=0; } if ((in[1]==1)&&(in[2]!=1)){ if (c_step==0){ out[0]=in[0]+c_call*(value[c_step]-in[0])/time[c_step]; out[1]=time[c_step]-c_call; if(c_call==time[c_step]){ c_step++; c_call=0; } c_call++; } else{ out[0]=value[c_step-1]+c_call*(value[c_step]-value[c_step-1])/time[c_step]; out[1]=time[c_step]-c_call; if(c_call==time[c_step]){ if(c_step==v_count){ c_step=-1; c_call=0; } else{ c_step++; c_call=0; } } c_call++; } out[2]=c_step; } else{ if (c_step==0){ out[0]=in[0]+c_call*(value[c_step]-in[0])/time[c_step]; out[1]=time[c_step]-c_call; } else{ out[0]=value[c_step-1]+c_call*(value[c_step]-value[c_step-1])/time[c_step]; out[1]=time[c_step]-c_call; } out[2]=c_step; } if(in[3]==1){ c_call=0; c_step=-1; out[0]=in[0]; } return 0; }
// Формирует указатель на описание FBD-модуля void zFBD_DLL_info( void *buf ) { DO_DEFAULT *dd; dd=(DO_DEFAULT *)buf;
HELLA
Forum Haunter / Завсегдатай форума
Участник № / Member № 104
отправлено / posted
Большое спасибо Бузинову Роману Анатольевичу и группе технической поддержки за проект программного регулятора. Изучим и сообщим свое мнение.
Сообщения / Posts 139 | Из / From: РОССИЯ
| IP / IP: IP адрес / IP address |
HELLA
Forum Haunter / Завсегдатай форума
Участник № / Member № 104
отправлено / posted
К сожалению,модуль fbd0.dll оказался неработоспособным в среде ТМ5.09. РБК модуль не видит,а в проекте присланном Вами он предстает блочком с одним входом (тип-конст.) и одним выходом (out). В то же время имеющийся у нас собственный модуль fbd0.dll работает нормально. Если не трудно ,вышлите fbd0.dll в неупакованном виде по почте.
Сообщения / Posts 139 | Из / From: РОССИЯ
| IP / IP: IP адрес / IP address |
отправлено / posted
Скорее всего он не нашел файл table.cfg при загрузке РБК. Выложите этот файл в корневую директорию Инстрменталки, а также в директорию проекта (это уже для МРВ и Профайлера).
Сообщения / Posts 17301 | Из / From: Россия
| IP / IP: IP адрес / IP address |
HELLA
Forum Haunter / Завсегдатай форума
Участник № / Member № 104
HELLA
Forum Haunter / Завсегдатай форума
Участник № / Member № 104
отправлено / posted
Проверили работу программного задатчика на Вашем проекте и во вновь созданном проекте.1.Наблюдается неприятный эффект при работе в РПД и в профайлере: при остановке пересчета базы каналов (нажатии на кнопку с иконкой в виде бегущего человечка в каждом втором случае выскакивает сообщение Dr Watson :Ошибка в приложении DrawServ.exe без номера.Далее повторно пересчет кнопкой не запускается,нужно перезапускать РПД или профайлер. 2.Пожелания на будущее: хорошо бы представить табличные значения точек работы прогр.задатчика в виде ActiveX-приложения-таблицы значений температур и временных интервалов - графического элемента РПД с возможностью ввода значений при работающем МРВ. При отработке значительных временных интервалов оператор должен иметь возможность по ходу процесса менять параметры НЕОТРАБОТАННЫХ участков процесса.
Сообщения / Posts 139 | Из / From: РОССИЯ
| IP / IP: IP адрес / IP address |
отправлено / posted
1) У нас этот эффект не воспроизводится. Вы его на своем проекте наблюдаете или на том, что я Вам выслал?
2) Ну, с ActiveX я уже врядли Вам помогу (своей квалификации не хватит, а отвлекать программиста я не смогу), а вот как отдельное приложение для этих целей сделать - это можно.
Сообщения / Posts 17301 | Из / From: Россия
| IP / IP: IP адрес / IP address |
HELLA
Forum Haunter / Завсегдатай форума
Участник № / Member № 104
отправлено / posted
Эффект наблюдается и на Вашем проекте и на заново созданном Нашем проекте.
Сообщения / Posts 139 | Из / From: РОССИЯ
| IP / IP: IP адрес / IP address |
HELLA
Forum Haunter / Завсегдатай форума
Участник № / Member № 104
отправлено / posted
На работу проекта мистическим образом влияет наличие файла table.cfg в директории проекта: если таблица отсутствует,то старт-пуск проекта по кнопке с иконкой бегущего человечка выполняется нормально и многократно (естественно прогр.задатчик не формирует временную последовательность). Стоит записать таблицу в директорию проекта - он запускается нормально один раз,работает циклически (без останова по окончание последнего участка) но повторный запуск нормально не проходит.
Сообщения / Posts 139 | Из / From: РОССИЯ
| IP / IP: IP адрес / IP address |
отправлено / posted
Я сделал новый Программный задатчик как внешний компонент к системе. Скачать можно здесь: http://www.adastra.ru/sequencer.rar Он позволяет подключаться к МРВ и управлять любым его каналом по созданной Вами программе. Алгоритм программы этого задатчика может включать неограниченное количество точек и быть сохранен в отдельный файл в формате XML. То есть, Вы можете создавать собственные базы алгоритмов, а затем в процессе работы в реальном времени загружать их, или модифицировать.
Думаю, что этот элемент будет удобнее, чем FBD-блок на С++.
Только одно "НО" - этот компонент написан на С# и для его работы требуется установить в ОС MS Windows компонент MS .Net Framework, иначе он не запуститься.
HELLA
Forum Haunter / Завсегдатай форума
Участник № / Member № 104
отправлено / posted
СПАСИБО за новый вариант задатчика! Красиво и удобно. Пожелание - кнопку STOP переименовать в RESET а кнопку PAUSE в STOP.Так логичнее по функциональ- ному значению. Кроме того,было бы неплохо иметь счетчик циклов выполнения программы,т.к. программа выполняется циклически а количество циклов в технологии важно;причем показания счетчика (начиная с 1)посылать в канал МРВ аналогично выходу программного задатчика.
Сообщения / Posts 139 | Из / From: РОССИЯ
| IP / IP: IP адрес / IP address |
Добавлено: - тренд кривой задания - задание каналов ТМ для приема №-цикла и оставшегося времени до конца текущего шага - переименованы кнопки управления
Сообщения / Posts 17301 | Из / From: Россия
| IP / IP: IP адрес / IP address |
HELLA
Forum Haunter / Завсегдатай форума
Участник № / Member № 104
HELLA
Forum Haunter / Завсегдатай форума
Участник № / Member № 104
отправлено / posted
Добрый день! В процессе исследования работы графической оболочки Sequence Control возникли некоторые соображения по улучшению с точки зрения технологов: 1.В окне trend сделать видимым начальный участок от Initial value до первой табличной координаты, т.к. этот участок приходится припасовывать умозрительно. 2.Сделать доступным кроме номера цикла Cycle# также номер текущего шага в цикле. Заранее благодарны!
Сообщения / Posts 139 | Из / From: РОССИЯ
| IP / IP: IP адрес / IP address |
HELLA
Forum Haunter / Завсегдатай форума
Участник № / Member № 104
отправлено / posted
Время до конца шага и номер цикла действительно нужны и они нормально работают в предыдующей версии. Номер же текущего шага в текущем цикле - как дополнение в список каналов,доступных МРВ. Если же мало места для вкладки этого параметра, то можно его и не включать.
Сообщения / Posts 139 | Из / From: РОССИЯ
| IP / IP: IP адрес / IP address |