Jan 31, 2010 08:36
Для входов/выходов блоков FB можно задавать аттрибуты, которые помогут генерировать теги для WinCC (S7_m_c := 'true', S7_stringX = '<надпись для состояния Х входа>'). При создании экземпляра DB, свзянного с FB, аттрибуты копируются, т.е. DB получает свой собственный (независимый от FB) набор аттрибутов. При AS-OS компиляции, по наблюденям, происходит следующее:
1) компилятор просматривает все DB, и проверяет для экземпляра значение аттрибута "Control and Monitoring". Создает список блоков с установленным аттрибутом.
2) из списка выбираются InstanceDB и SharedDB в отдельные списки.
3) Проходит по списку SharedDB, для каждого блока извлекается символьное имя.
3.1) Открывает блок, проходит по всем переменным с установленным аттрибутом S7_m_c, составляет список переменных {имя переменной, тип данных, адрес: номер блока, смещение}.
3.2) По составленному списку в WinCC создает переменные с именами получаемые объединением <имя соединения>/<символьное имя блока>.<имя переменной>.
4) Проходит по списку InstanceDB, для каждого блока извлекается символьное имя DB и номер FB.
4.1) Открывает FB и для входов\выходов составляет список переменных с установленным аттрибутом S7_m_c {имя переменной, тип данных, адрес: номер блока, смещение}.
4.2) В WinCC создает структуру с именем <символьное имя блока FB>, и полями по списку переменных.
4.3) Открывает DB и проходит по всем переменным с установленным аттрибутом S7_m_c, составляет список переменных {имя переменной, тип данных, адрес: номер блока, смещение}.
4.4) И (блять!) сравнивает списоки составленные в пп.4.1 и 4.3, если списки не совпадают - уходит в аут, т.е. тупо останавливает работу и выводит сообщение с ошибкой.
Если списки таки одинаковые, создает в WinCC структурный тег, с именем <символьное имя блока DB>.
5) Переносит (компирует) список сообщений для функций класса ALARM*
Косяк - в обработке ситуации в п4.3. Нахрена это делать??? Если же изменен интерфейс FB, то это и так будет известно по разным датам в поле для блоков FB/DB.
А так любое изменение аттрибутов S7_m_c в блоке FB вынуждает заново создавать все InstanceDB. Оптимальный способ это сделать: открыть LAD-editor, File->Generate Source.. -> выбрать все DB -> Generate, далее, открыть сгенерированный исходник и компилить.
Епт, Вирта нет на авторов хреновины под названием AS-OS compiler.
simatic