Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
algreen
Зарегистрирован: 05.05.2008 Сообщения: 20
|
Добавлено: Пн Май 05, 2008 2:45 pm Заголовок сообщения: Проблема с PG5 |
|
|
При Builde кода программы в PG5 выдается сообщение: Fatal Error 368: Dynamic space overflow for type: F.
Кто что думает? Подскажите пожалуйста! |
|
Вернуться к началу |
|
 |
Arnold

Зарегистрирован: 25.04.2008 Сообщения: 91
|
Добавлено: Пн Май 05, 2008 5:36 pm Заголовок сообщения: Переполнена память флаговых переменных |
|
|
Эта ошибка указывает на переполнение динамической памяти флаговых переменных. Происходит чаще при написании больших программ. (Кстати, переменные могут быть не вашими, а из библиотек, которые вы используете). По умолчанию под них выделяется область от 7500 до 8191. Верхняя граница фиксирована, а вот нижнюю можно подвинуть.
В ProgramManager-e в установках контроллера Settings выберите Software, в диалоге - вкладку Flags, в графе Non-Volatile Flags установите нижнюю границу 7000, или даже 6000. Эта ошибка скорее всего пропадет.
Правда могут появиться следующие...  |
|
Вернуться к началу |
|
 |
algreen
Зарегистрирован: 05.05.2008 Сообщения: 20
|
Добавлено: Пн Май 05, 2008 5:59 pm Заголовок сообщения: Re: Переполнена память флаговых переменных |
|
|
Эта ошибка указывает на переполнение динамической памяти флаговых переменных. Происходит чаще при написании больших программ. (Кстати, переменные могут быть не вашими, а из библиотек, которые вы используете). По умолчанию под них выделяется область от 7500 до 8191. Верхняя граница фиксирована, а вот нижнюю можно подвинуть.
В ProgramManager-e в установках контроллера Settings выберите Software, в диалоге - вкладку Flags, в графе Non-Volatile Flags установите нижнюю границу 7000, или даже 6000. Эта ошибка скорее всего пропадет.
Правда могут появиться следующие...
Арнольд, я Вам очень благодарен за консультацию и быстрый ответ. С Saia у меня первый объект... Наверное поэтому такие казусы. Попробую сделать то, что вы рекомендовали.  |
|
Вернуться к началу |
|
 |
Arnold

Зарегистрирован: 25.04.2008 Сообщения: 91
|
Добавлено: Вт Май 06, 2008 6:23 am Заголовок сообщения: Флаги, таймеры и прочее.. |
|
|
Рад был помочь.
Программа у вас слишком большая для первого опыта. Около тысячи переменных, LON, EIB...
В принципе, c PG5 идет достаточно полная документация. Program Files/Saia-Burgess/PG5 1_4/Manuals/
Если у вас нет, можете скачать у нас, в разделе техподдержки. Обратите внимание на раздел 5 (Структура программы) мануала по PG5. Кроме обычных COB (cyclic organization block) блоков, PB и FB (program/function block), имеются еще и прерывания XOB (eXception block), которые позволяют использовать аппаратные прерывания, прерывания по телеграммам S-bus, обрабатывать ошибки и еще много чего интересного. |
|
Вернуться к началу |
|
 |
algreen
Зарегистрирован: 05.05.2008 Сообщения: 20
|
Добавлено: Вт Май 06, 2008 9:51 am Заголовок сообщения: Re: Флаги, таймеры и прочее.. |
|
|
Рад был помочь.
Программа у вас слишком большая для первого опыта. Около тысячи переменных, LON, EIB...
В принципе, c PG5 идет достаточно полная документация. Program Files/Saia-Burgess/PG5 1_4/Manuals/
Если у вас нет, можете скачать у нас, в разделе техподдержки. Обратите внимание на раздел 5 (Структура программы) мануала по PG5. Кроме обычных COB (cyclic organization block) блоков, PB и FB (program/function block), имеются еще и прерывания XOB (eXception block), которые позволяют использовать аппаратные прерывания, прерывания по телеграммам S-bus, обрабатывать ошибки и еще много чего интересного.
Арнольд, я слил все файлы в один, сделал в нем один драйвер EIB, деактивировал все страницы в этом файле...
Подключено два файла:лоновский и основной со всеми страницами в состоянии disabled.
Теперь таже ошибка (368) только переполнение для типа T.
Если отключены все страницы данного файла, значит память не используется ? Но если это бы было так, тогда бы линкирование было бы успешным ведь лоновский файл (когда только он один подключен к проекту) нормально компилируется. Как дальше пытаться отладить?
Может если не хватает памяти нужно будет установить доп модуль в контроллер? |
|
Вернуться к началу |
|
 |
Arnold

Зарегистрирован: 25.04.2008 Сообщения: 91
|
Добавлено: Вт Май 06, 2008 11:20 am Заголовок сообщения: Сколько таймеров? |
|
|
Это переполнение по таймерам.
В том же окне, где и флаги выберите закладку Timers/Counters, установите Last Timer = 60, или 100 если 60-и не достаточно, в поле Dynamic Space поставте для таймеров Last Address = 100.
Это решение "в лоб".
А вообще я бы порекомендовал вам уменьшить число таймеров. В вашей программе переменная (выдаваемая после компаратора, к примеру Vozd_Cool19) поступает на Таймер OnOffDelay. Для чего? Что бы не выдавать переменную в сеть слишком часто? У вас стоит T0=1800 (180c, т.е. 3 мин.), а T1=100, т.е. 10 сек.
Но в блоке EIB Send Value есть параметры MinimumTimeInterval и MaximumTimeInterval, которые задают в минутах минимальный и максимальный интервалы передачи информации. Поставьте их = 3 и 30 соответственно, и таймер будет не нужен.
В лоне есть точно такой же модуль LON SendBinaryAuto. Управление им полностью идентично EIB. Используйте его вместо SendBinary, и уберите все таймеры.[/img] |
|
Вернуться к началу |
|
 |
algreen
Зарегистрирован: 05.05.2008 Сообщения: 20
|
Добавлено: Вт Май 06, 2008 12:19 pm Заголовок сообщения: Re: Сколько таймеров? |
|
|
Это переполнение по таймерам.
В том же окне, где и флаги выберите закладку Timers/Counters, установите Last Timer = 60, или 100 если 60-и не достаточно, в поле Dynamic Space поставте для таймеров Last Address = 100.
Это решение "в лоб".
А вообще я бы порекомендовал вам уменьшить число таймеров. В вашей программе переменная (выдаваемая после компаратора, к примеру Vozd_Cool19) поступает на Таймер OnOffDelay. Для чего? Что бы не выдавать переменную в сеть слишком часто? У вас стоит T0=1800 (180c, т.е. 3 мин.), а T1=100, т.е. 10 сек.
Но в блоке EIB Send Value есть параметры MinimumTimeInterval и MaximumTimeInterval, которые задают в минутах минимальный и максимальный интервалы передачи информации. Поставьте их = 3 и 30 соответственно, и таймер будет не нужен.
В лоне есть точно такой же модуль LON SendBinaryAuto. Управление им полностью идентично EIB. Используйте его вместо SendBinary, и уберите все таймеры.[/img]
Таймер OnOffDelay делает задержку на выключение и включение внутреннего блока кондиционера VRV системы (переменная Vozd_Cool). Т.к обнаружилось что кондиционеры трехскоростные, таймер наверное уберется и будет какое-то пид.
Увеличил начальный адрес таймеров, стало нехватать флагов. Понизил начальный адрес флагов до 6000 и о чудо, программа откомпилировалась.
Огромное Вам СПАСИБО!!! ВЫРУЧИЛИ! 
Последний раз редактировалось: algreen (Вт Май 06, 2008 12:29 pm), всего редактировалось 3 раз(а) |
|
Вернуться к началу |
|
 |
Arnold

Зарегистрирован: 25.04.2008 Сообщения: 91
|
Добавлено: Вт Май 06, 2008 12:26 pm Заголовок сообщения: Ok |
|
|
Успехов  |
|
Вернуться к началу |
|
 |
algreen
Зарегистрирован: 05.05.2008 Сообщения: 20
|
Добавлено: Пн Май 12, 2008 10:46 am Заголовок сообщения: Re: Ok |
|
|
Успехов
Арнольд! Еще проблема!
Теперь программа не загружается в контроллер!
Выдает сообщение: Code segment too small. Has 24K, needs 49K.
Насколько я понимаю, это не хватает памяти у PCD1.M135?
Если это так, то, как я понимаю нужно добавить ее. У Вас есть в наличии эти микросхемы? |
|
Вернуться к началу |
|
 |
Arnold

Зарегистрирован: 25.04.2008 Сообщения: 91
|
Добавлено: Пн Май 12, 2008 2:11 pm Заголовок сообщения: Сегмент кода |
|
|
Ну и программка у вас получилась!
Действительно, максимально у 135 может быть 32 К слов кода (128К).
Но прежде, чем докупать память, я бы посоветовал попробовать оптимизировать программу.
Пришлите, посмотрю что можно сделать. |
|
Вернуться к началу |
|
 |
Arnold

Зарегистрирован: 25.04.2008 Сообщения: 91
|
Добавлено: Вт Май 13, 2008 6:57 am Заголовок сообщения: Оптимизация |
|
|
1) У вас при приеме переменных EIB идет деление каждой переменной на 100. Правильно, в EIB переменные с фиксированной точкой передаются в виде *100, но вам нет никакой необходимости приводить к нормальному виду. Просто уставку увеличте в 100 раз, вы сэкономите больше 200 операций деления - это довольно много.
2) Везде, где идет прием переменных EIB вместо отдельных блоков поставьте один на 10 переменных. В параметрах прописываете групповые адреса, соответствующие переменной, и все. Опять же экономия - в 10 раз.
3) У вас используется почти 80 ПИ регуляторов - это безумная трата ресурсов. Разберитесь с этим повнимательнее - наверня в фан-койлах Daikin стоят свои регуляторы. Но это уже вопрос технологии, а не программирования...
4) Непонятно, зачем идет вывод в EIB значения 255 при перепаде переменной Vozd_Cool_xxx - если нет передачи другого значения. Но тут опять же вопрос алгоритма. |
|
Вернуться к началу |
|
 |
algreen
Зарегистрирован: 05.05.2008 Сообщения: 20
|
Добавлено: Вт Май 13, 2008 4:34 pm Заголовок сообщения: Re: Оптимизация |
|
|
1) У вас при приеме переменных EIB идет деление каждой переменной на 100. Правильно, в EIB переменные с фиксированной точкой передаются в виде *100, но вам нет никакой необходимости приводить к нормальному виду. Просто уставку увеличте в 100 раз, вы сэкономите больше 200 операций деления - это довольно много.
2) Везде, где идет прием переменных EIB вместо отдельных блоков поставьте один на 10 переменных. В параметрах прописываете групповые адреса, соответствующие переменной, и все. Опять же экономия - в 10 раз.
3) У вас используется почти 80 ПИ регуляторов - это безумная трата ресурсов. Разберитесь с этим повнимательнее - наверня в фан-койлах Daikin стоят свои регуляторы. Но это уже вопрос технологии, а не программирования...
4) Непонятно, зачем идет вывод в EIB значения 255 при перепаде переменной Vozd_Cool_xxx - если нет передачи другого значения. Но тут опять же вопрос алгоритма.
Арнольд, cпасибо за информацию, я понял, в каком направлении рыть.
Но похоже памяти все равно не хватит. У вас есть память в наличии и сколько стоит она (если она решит вопрос). Мне удалось сжать программу до 28к. Может и еще что-нибудь выкину из-нее... |
|
Вернуться к началу |
|
 |
Arnold

Зарегистрирован: 25.04.2008 Сообщения: 91
|
Добавлено: Ср Май 14, 2008 4:19 am Заголовок сообщения: Память |
|
|
В принципе 28 К уже влезет. В Settings/Hardware выберите вкладку Memory, отметьте Manual Memory Allocation, и выставьте Code = 30, Text/DB = 8, или другую комбинацию, главное, что бы внизу в Totals было не больше 128 К. Здесь Code задается в K Lines, 1 линия = 4 байта, т.е. 30 KLines = 120 Kbyte. А Text/DB в Kb.
Памяти у меня нет в наличии, а стоит она -
RAM 128К - 15,19 Euro, RAM 512K - 33,75 Euro.
Если закажете, будет к началу июня. Но я думаю, уложитесь... |
|
Вернуться к началу |
|
 |
algreen
Зарегистрирован: 05.05.2008 Сообщения: 20
|
Добавлено: Ср Май 14, 2008 2:30 pm Заголовок сообщения: Re: Память |
|
|
В принципе 28 К уже влезет. В Settings/Hardware выберите вкладку Memory, отметьте Manual Memory Allocation, и выставьте Code = 30, Text/DB = 8, или другую комбинацию, главное, что бы внизу в Totals было не больше 128 К. Здесь Code задается в K Lines, 1 линия = 4 байта, т.е. 30 KLines = 120 Kbyte. А Text/DB в Kb.
Памяти у меня нет в наличии, а стоит она -
RAM 128К - 15,19 Euro, RAM 512K - 33,75 Euro.
Если закажете, будет к началу июня. Но я думаю, уложитесь...
Вроде уложился, но заказчик теперь хочет усложнить алгоритм...
Так что возможно потребуется приобрести память.
Еще раз спасибо за советы и ликбез! |
|
Вернуться к началу |
|
 |
algreen
Зарегистрирован: 05.05.2008 Сообщения: 20
|
Добавлено: Пн Июн 16, 2008 7:54 pm Заголовок сообщения: Re: Память |
|
|
В принципе 28 К уже влезет. В Settings/Hardware выберите вкладку Memory, отметьте Manual Memory Allocation, и выставьте Code = 30, Text/DB = 8, или другую комбинацию, главное, что бы внизу в Totals было не больше 128 К. Здесь Code задается в K Lines, 1 линия = 4 байта, т.е. 30 KLines = 120 Kbyte. А Text/DB в Kb.
Памяти у меня нет в наличии, а стоит она -
RAM 128К - 15,19 Euro, RAM 512K - 33,75 Euro.
Если закажете, будет к началу июня. Но я думаю, уложитесь...
Вроде уложился, но заказчик теперь хочет усложнить алгоритм...
Так что возможно потребуется приобрести память.
Еще раз спасибо за советы и ликбез!
Здравствуйте Арнольд!
Вынужден еще раз к Вам обратиться!
Память приобрели установили, все загружается, алгоритм уже более 128 страниц...
Но дело не в объеме. При общении с EIB возникают проблемы в драйвере EIB - RCV touts Touts, collision (warning). Драйвер читает адреcа EIB, которых нет в проекте...
Система EIB состоит и устройств типа TRITON с которых читается информация о текущих температурах в комнате и уставке температуры в данной комнате. Бывают ситуации, когда, в текущая температура считывается, а уставки не читаются или имеют значение 0 или неверные значения.
Программа уменьшена для тестирования на одной комнате-объемы информации минимальны, поэтому не понятно- в чем может быть проблема-тритоны или Saia или PG5 или драйвер EIB или еще что-нибудь? Экпериментировал с драйвером (ставил EIB EXT и изменял его настройки), для опроса данных с тритона применял и POL fbox b RCV fbox. Арнольд, Вы сталкивались с этим? |
|
Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|