CoDeSys |
Ответить | Страница 123> |
Автор | ||||
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
Опубликовано: 25 Сентябрь 2006 20:34 |
|||
Ну, хорошо ! А как присоединить кусочек сотворенный на СИ или АСМе к проекту в CoDeSys под WinNT ? То ли это OBJ COFF файл, или в каком другом виде, да и возможно ли это в полной мере, чтобы все об'явления, были видны во всех модулях, как при компоновке "нормальных" программ ?! С уважением, SAN. |
||||
Действительный член Присоединился: 29 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 293 |
||||
1) А зачем? Пишите прямо в CoDeSys на ST получите аналогичный результат. 2) См. описание внешних библиотек. Подробнее в документе C_in_CoDeSys_e.pdf. Для каждой аппаратной платформы есть свои тонкости. Для WinNT они описаны в документе C_IN_386_E.pdf. Маловероятно что это будет всем интересно, поэтому давайте в личку. Документы вышлем по e-mail.
|
||||
Igor Petrov
|
||||
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
||||
Строгая типизация - разумная идеология, но - не единственная существующая. Бывает надо наоборот, иметь полный свободный доступ к каждому атому "железа", и уж особенно в промышленных контроллерах. Само собой - ошибки и run-time недоразумения - полностью на совести кодера. Буду премного благодарен за писание СИ_для_CoDeSys под Win NT. ЕМЕЛ: sanwork@gmail.com
|
||||
Действительный член Присоединился: 29 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 293 |
||||
В прямоадресуемой памяти входов, выходов и маркируемой можно объявлять любое число переменных любого типа на один адрес. С этой памятью можно делать все что угодно, но системная память обязана быть защищена. Прямой физический доступ к аппаратуре параллельно с работой драйверов вызывает сильные сомнения. Про "уж особенно в промышленных контроллерах" не согласен. 'Защита от дурака' в ПЛК важна как нигде. Увы, мне приходилось сталкиваться с контроллерами (малоизвестной фирмы) в которых из прикладной программы можно стереть системное ПО под ноль! Напротив, в весьма уважаемых фирменных системах программирования ПЛК (Сименс, Шнайдер и др.) есть только весьма ограниченный набор необходимых команд. После длительной работы в C мне это казалось полной деградацией. Но когда в любой ситуации, вместо того чтобы просто загнуться, контроллер давал четкую диагностику проблемы и выходил в безопасное состояние, это вызывало восторг и уважение! Для программистов микроконтроллеров (чипов) доступ всюду нужен и неизбежен. Для промышленных контроллеров он крайне вреден и опасен. Изготовитель контроллера должен делать ПО так, чтобы его нельзя было сбить из прикладной программы. Если для прикладного программирования ПЛК предлагается использовать язык C, то это не ПЛК а конструктор для радиогубителей.
Угу. (В CoDeSys есть указатели и оператор ADR на случай "свободного доступа").
Ушло. |
||||
Igor Petrov
|
||||
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
||||
SIEMENS так хорош (на пользовательском уровне) наверно как раз потому, что на системном уровне был полный доступ ко всем местам ... CoDeSys, точнее - SP RTE, имеет замечательную возможность исполнять программу на уровне ядра Windows NT. Доступ к памяти и портам происходит корректно, во время действия драйвера 3SRTE.sys. RTE можно использовать даже "не по назначению". Какую нибудь прикладную программу, работающую с портами, можно поставить через CoDeSys на циклическую задачу, и как на тележке кататься по ядру Windows, на правах драйвера 0-го кольца, с гарантией от конфликтов. Кстати по SP RTE. Можете ли подсказать как на этой платформе работать с RETAIN - переменными ? На SP PLCWinNT есть функции SaveRetain, RestoreRetain сохраняющие и загружающие RETAIN - переменные, в SP RTE они не поддерживаются. С уважением, SAN |
||||
Действительный член Присоединился: 29 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 293 |
||||
См. вкладку Ext. Config в настройках SP RTE (нужно щелкнуть мышкой по иконке и выбрать System…) Раздел Retain: Если активны обе опции Do not allocate retainmemory in RAM и Retainmemory on physical address, то все переменные, имеющие флаг “RETAIN” в CoDeSys, будут сохраняться непосредственно в статическом ОЗУ. Для этого в PC должна быть установлена SRAM на фиксированном адресе шины.
|
||||
Igor Petrov
|
||||
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
||||
Все предложенные способы требуют какого нибудь внешнего события, а RETAIN надо сохранять из программы. Правда есть внутренние команды - INTERN SaveRetain / LoadRetain, которые действуют из консоли PLC Browser. Но вопрос - как можно их использовать в тексте программы ? С уважением, SAN |
||||
Действительный член Присоединился: 29 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 293 |
||||
Не понял, какого внешнего события? Например, если мы постоянно держим эти переменные в статическом батарейном ОЗУ, то их значения автоматически сохраняются при выключенном питании. Ни каких внешних событий нет. Команда сохранения в этом случае вообще бессмысленна, поскольку данные и так всегда хранятся в энергонезависимой памяти. Если используем сохранение в файл, то оно происходит автоматом при завершении программы. При рестарте, значения переменных восстанавливаются.
В МЭК программе я должен только объявить RETAIN и все. Так сделано во всех типах ПЛК с CoDeSys. Зачем вообще нужно сохранять RETAIN переменные некими командами из программы? Т.е. зачем брать на себя функцию, которую обязана выполнять система исполнения? Так можно дойти и до взвода сторожевого таймера из прикладной программы и т.п. Если реально нужно управлять сохранением и восстановлением значений определенных данных, то не проще ли их просто явно записывать в файл в нужное время, без всяких RETAIN? Команды в PLC Browser предназначены для тестовых целей. Вызывать их из программы пока ни у кого необходимости не было.
|
||||
Igor Petrov
|
||||
Действительный член Присоединился: 08 Март 2006 Категория: Russian Federation Online Status: Offline Публикации: 440 |
||||
Надо сохранить переменные, скажем, на диске, а не в статическом ОЗУ. (зачем добывать экзотическую плату, когда диск пустует ). Но при об'явлении переменных в RETAIN области они, собственно говоря - почему то не сохраняются .. ?! И потом, возникает вопрос : если сохранение данных доверено машине, то когда , собственно, она решит их сохранить ? При выключении или пропаже питания ? но при этом нужен UPS, то есть опять же некое специальное устройство (или внешнее событие типа NMI). Есть очень простой способ развязать эти проблемы - сохранять переменные в нужный момент: например , при изменении значения какой нибудь величины просто тут же сохранить ее ! Но для этого надо иметь в распоряжении сами эти команды, которые пока что то не доступны. Подскажите ! С уважением, SAN
|
||||
Действительный член Присоединился: 29 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 293 |
||||
Работа с диском происходит не в реальном времени. Т.е. после каждого изменения значений переменных на диск писать не реально. Плата легко решает эту проблему. Прежде чем записывать образ значений переменных на диск нужно остановить контроллер, дабы они не менялись во время записи. Т.е. делать это нужно при завершении работы SP RTE: остановить прикладную программу, сохраниться и закрыться. Чтобы всегда корректно завершиться, нужен UPS.
Загрузите самую свежую версию SP RTE и установите опции, как описано выше, должно работать.
При корректном завершении работы приложения. Ограничений на размер RETAIN памяти нет. Т.е. по сигналу авария питания PC нельзя было бы гарантировать, что соответствующий файл будет успешно записан. UPS даже самый дешевый позволяет корректно закрыться. Без него можно так вырубить компьютер, что он и загружаться перестанет.
Пока файл будет писаться на диск эта переменная может измениться раз 10. Т.е. такой метод мог быть приемлемым в PLC WinNT, где контроллер допустимо тормознуть на момент записи, для SP RTE так делать нельзя. |
||||
Igor Petrov
|
||||
Ответить | Страница 123> |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |