Проблема с Stored |
Ответить |
Автор | |
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 25 Апрель 2006 Категория: Russian Federation Online Status: Offline Публикации: 116 |
Опубликовано: 25 Апрель 2006 09:49 |
Поясните, если кто сталкивался с подобной проблемой! Для сохранения настроек регулятора в область памяти под батарейкой и последующего востановления после перезагрузки контроллера ADAM5510 используется Stored.obj, написанный на С++. Переменные сохраняются и востанавливаются, но возникает проблема. если превысить количество сохраняемых переменных (примерно > 40 типа Float)(Хотя Stored.obj должен сохранять 1000 байт (250 пер. типа Float), то сразу после загрузки программы в контроллер, PLCNET OPC Server еще конфигурируется, но через некоторое время конфигурирование происходит с ошибками (имена сетевых переменных, их количество и т.д.). При этом, если успеть сконфигурировать PLCNET OPC Server, то в дальнейшем данные при работе OPC считываются без проблем. |
|
Vel
|
|
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 25 Апрель 2006 Категория: Russian Federation Online Status: Offline Публикации: 116 |
|
Для пояснения исходник Stored.obj на С #include <dos.h> // константы // внешние объявления // восстановление области STORED // начало блока данных // чтобы эта функция больше не вызывалась, записываем 0 в байт // сохранение области STORED // запись была выполнена хотя бы раз |
|
Vel
|
|
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 25 Апрель 2006 Категория: Russian Federation Online Status: Offline Публикации: 116 |
|
Проблема оказывается не в Stored.obj, а в компиляторе UL16. Если ставишь 80x86 C/CPP-compatible compiler, то тут и начинаются "чудеса". K10.map - 80x86 processors family compiler Start Stop Length Name Class 00000H 084DBH 084DCH SYSTEM CODE Program entry point at 0000:73EF K10.map - 80x86 C/CPP-compatible compiler Start Stop Length Name Class 00000H 04831H 04832H _TEXT CODE Program entry point at 0000:0000 (а точка входа - NILL) И размер у выходного ехе без срр на 2,5 килобайта меньше. Переделываю программу на чистом asm. Посже опубликую результат. |
|
Vel
|
|
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 25 Апрель 2006 Категория: Russian Federation Online Status: Offline Публикации: 116 |
|
Проблема решена! Расширил функциональность подпрограммы: теперь ведется контроль перекомпиляции проекта, для этого в проекте должна быть создана глобальная переменная Stored и ей присваевается значение по умолчанию (отличное от предыдущего проекта). При перекомпиляции сохраняемые переменные берут значения по умолчанию (раньше требовался код FBD для установки значений). Программа Restore автоматически останавливается и останавливает программу Save. Сохраняется 998 байт (проверено сохранением и востановлением 249 переменных Float). obj стал 552 байта вместо 838. Требования: 1) Должна быть создана глобальная переменная Stored и ей присваевается значение по умолчанию (отличное от предыдущего проекта). 2) Первой в проекте UL должена быть программа Restore "EXT" (статус - Start ( Auto Run ) с функцией RESTOREMEM. 3) Вторая программа Save "EXT" (статус - Stop) с функцией SAVEMEM. 4) Где нибудь в программе должен быть вызов GCALL программы Save (по времени или как хотите). 5) obj собирается командой \TASM.EXE storedn.asm 6) В папке проекта UL создается *.lnk файл с атрибутом "Только чтение" и содержанием: C:\K11\K11.OBJ+ 7) В проекте Ul, в опциях указать "80x86 processors family compiler", а не "80x86 C/CPP-compatible compiler". В итоге все прекрасно работает, *.exe файл на 2,5 Кб меньше. Вывод: не использовать "80x86 C/CPP-compatible compiler" и писать подпрограммы на asm. |
|
Vel
|
|
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 25 Апрель 2006 Категория: Russian Federation Online Status: Offline Публикации: 116 |
|
;г=========================================================================ї ; Объединить несколько сегментов в группу, ; =========================================================================== ; =========================================================================== push ax ; сохранить предыдущий ax в стек Metka_0: Metka_1: Metka_2: Metka_3: Exit: retn ; вернуться в основную программу ; --------------------------------------------------------------------------- public SAVEMEM push ax ; сохранить предыдущий ax в стек Metka_4: Metka_5: Metka_6: pop bx ; восстановить bx основной программы retn ; вернуться в основную программу SYSTEM ends
; =========================================================================== ; =========================================================================== end |
|
Vel
|
|
Новичок Присоединился: 07 Сентябрь 2005 Категория: Russian Federation Online Status: Offline Публикации: 35 |
|
Спасибо, примем к сведению.
Хотя у меня штатный stored.obj (на C++) работает нормально, может переменных не так много. Правда, на UL32. |
|
Новичок Присоединился: 12 Май 2006 Категория: Kazakhstan Online Status: Offline Публикации: 5 |
|
Я для управления програмой Restore при первом запуске использовал тумблер от NODE ID : mov dx,0138h ; Порт переключателей NODE ID Использование тумблера позволяет выбирать сохраняемые переменные берут значения по умолчанию или востанавливаются из энергонезависимой памяти
|
|
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 25 Апрель 2006 Категория: Russian Federation Online Status: Offline Публикации: 116 |
|
А если сетевой адресс контроллера задается DIP переключателем, то будут создаваться определенные "неудобства". В моей программе вы заранее определяете, взять зачения из энергонезависимой области (оставить старое значение Stored в проекте) или записать значения по умолчанию (записать новое значение Stored в проект). |
|
Vel
|
|
Новичок Присоединился: 12 Май 2006 Категория: Kazakhstan Online Status: Offline Публикации: 5 |
|
На счет неудобств согласен , но зато есть возможность перезапустить программу с установками по умолчанию в любой момент времени , что бывает иногда необходимо . |
|
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 25 Апрель 2006 Категория: Russian Federation Online Status: Offline Публикации: 116 |
|
В моей программе на ходу тоже можно установить значения по умолчанию. Для этого переменной Stored в проекте установите атрибуты "сохраняемая" и "сетевая". В дальнейшем можете по сети установить новое значение переменной Stored и перезагрузить (сбросить) контроллер. Все! |
|
Vel
|
|
Ответить |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |