Сафронов
Forum Haunter / Завсегдатай форума
Участник № / Member № 408
отправлено / posted
Сораняются ли значения выходов пользовательских функциональных блоков, написанных на Си, между двумя вызовами программы ? Локальные переменные для сохранения данных использовать не получается, т.к. функциональные блоки используются в нескольких FBD, а входы все заняты. Или подскажите другой способ сохранения данных от вызова к вызову.
Сообщения / Posts 136 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
А что мешает использовать static переменные в самом коде FBD-блока? Здесь на форуме совсем недавно даже исходный код на Си++ приводился ( здесь), который реализовывал очень большую задержку значения. Так вот в нем его внутренний массив значений как раз как static обозначался, чтобы не потерять данные от вызова к вызову блока.
Сообщения / Posts 17322 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Сафронов
Forum Haunter / Завсегдатай форума
Участник № / Member № 408
отправлено / posted
Мещает то, что функциональные блоки используются в нескольких FBD, и переменные static будут общими для всех FBD, что в данном случае недопустимо (данные должны сохраняться для каждой FBD отдельно).
Сообщения / Posts 136 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
В этом случае без внутреннего разделения этих ресурсов никак нельзя. Это потребует дополнительного входа у блока.
Сообщения / Posts 17322 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Сафронов
Forum Haunter / Завсегдатай форума
Участник № / Member № 408
отправлено / posted
Подскажите, пожалуйста, как инициализировать static переменные нулями при первом включении функционального блока.
Сообщения / Posts 136 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Есть три варианта по мере усложнения: 1) Обнулить его при объявлении, например так: static int MyArray[800]={0}; 2) Обнулить его в функции DllMain - вызывается при первом вызове DLL. 3) Создать простенький класс и обнулять массив через конструктор класса при его инициализации.
Сообщения / Posts 17322 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Сафронов
Forum Haunter / Завсегдатай форума
Участник № / Member № 408
отправлено / posted
При обнулении при объявлении данных МикроМРВ прекращает работу на первом цикле с выводом на терминал сообщения: run-time error M6101:MATH -floating-point error:invalid. Объявление static переменных делалось в двух вариантах: 1)в теле процедуры ФБ; 2)вне его. Инициализация внутри main результата не дала. При первом подключении ФБ данные не равны 0. Что мы делаем не так ? Запускался МикроМРВ релизов 5.11 и 5.12.
Сообщения / Posts 136 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Трудно сказать, что Вы делаете не так, ведь код блока на С++ Вы писали, а не мы...
Сообщения / Posts 17322 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Сафронов
Forum Haunter / Завсегдатай форума
Участник № / Member № 408
отправлено / posted
Если в текст ФБ, помещенный в справке, вставить инициализацию при объявлении данных static float, то МикроМРВ прекращает работу на первом цикле так же, как и в случае применения ФБ, написанного нами.
Сообщения / Posts 136 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Я привел Вам пример на 800 элементов просто как пример, наверняка у Вас не хватает стэка, чтобы разместить в нем данные Вашего массива - вот система ДОС и "вылетает"... На сколько элементов у Вас массив и какая его размерность?
Сообщения / Posts 17322 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
И еще - обязательно в настройках компилятора должно стоять, что "SS!=DS, DS loaded on function entry"!
Сообщения / Posts 17322 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Сафронов
Forum Haunter / Завсегдатай форума
Участник № / Member № 408
отправлено / posted
Массив данных состоит из 5 элементов типа float. Требования приведенные в справке к написанию ФБ мы соблоюдаем.
Сообщения / Posts 136 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Пришлите, пожалуйста, на адрес hotline@adastra.ru Ваш вариант модификации нашего примера FBD-блока для анализа.
Сообщения / Posts 17322 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Сафронов
Forum Haunter / Завсегдатай форума
Участник № / Member № 408