Уважаемый Игорь Петров не понимает всей глубины незнания новичков. Поэтому я расскажу о своем опыте по определению - что можно, чего нельзя.
Действительно компилятор дает не слишком жесткие ограничения при создании внутренней (я других не пробовал) библиотеки.
У меня был проект - и со сконфигурированной областью ввода-вывода, и с кучей глобальных переменных. Я нагло (в учебных целях) предложил Кодесису сохранить все это в виде внутренней библиотеки. Система поругалась немного и скушала! Весь проект стал библиотекой.
Потом я взял тот же проект, включил в него новую библиотеку и пустил на компиляцию. По мере ругани компилятора я выбросил из такого (практически удвоенного) проекта все, что компилятору не нравилось. А не нравилось ему то, что все POU и глобальные переменные дублировалисьНо, заметьте, выбрасывать пришлось не из библиотеки, а из проекта, в который библиотеку включили. Ведь библиотека уже скомпилирована! В конце концов, от исходного проекта осталось что? Верно, только PLC_PRG. Так как при генерации библиотеки компилятор сам выбросил из нее этот POU.
Результат: работает! Но! Вот теперь, узнав, как далеко можно изгаляться над компиляторм, начинаем и понимать, что не стОит делать. Например, попали все мои глобальные переменные в библиотеку. Да, толерантный компилятор позволил это сделать. А вот как теперь при отладке посмотреть их значения? Ага... А, не дай Бог, добавить куда-нить еще глобальную переменную? Адреса сдвинутся и тогда неизвестно, к чему программа будет обращаться.
Вот откуда вытекает правило не пихать в библиотеки глобальные переменные. Никаких чудес и "гласов свыше". Просто будет неудобно.
То же и с областью ввода-вывода. Она, будучи спрятанной в библиотеку, работать-то будет, но ни посмотреть ее толком, ни редактировать нельзя. Точнее, нужно лезть в библиотеку и там редактировать.
Значит, говорю я себе, будем все же выделять для библиотек те модули, которые работают только с локальными переменными (да со своими входными-выходными). И тут же замечаю, как безобразно раскидал по всем POU обращения к огромному пулу глобальных переменных. А ведь говорят-пишут опытные люди, что чем 'уже интерфейс программных модулей, тем надежнее и проще в отладке программа. Оказывается, тем проще и выбрасывать модули в библиотеку.
Вот пока и все, что я понял из экспериментов. Если все верно - и хорошо. Если выводы где-то ошибочны - буду благодарен за поправку. А пока начну выделять модули, действительно пригодные для канонической библиотеки.
Напоминаю, что у меня задача создания библиотеки не имеет ни какого отношения к использованию ее другими людьми. Это делается только для того, чтобы некая (желательно, значительная) часть программы была "зафиксирована". На базе одного проекта я сам буду создавать кучу вариантов - при одном и том же ПЛК, но с несколько разным поведением программы. Чем большая часть защищена от изменений, тем проще поддерживать единство такого "многовариантного" проекта.
Где-то так.



Но, заметьте, выбрасывать пришлось не из библиотеки, а из проекта, в который библиотеку включили. Ведь библиотека уже скомпилирована! В конце концов, от исходного проекта осталось что? Верно, только PLC_PRG. Так как при генерации библиотеки компилятор сам выбросил из нее этот POU.
Ответить с цитированием
