Страница 3 из 7 ПерваяПервая 12345 ... ПоследняяПоследняя
Показано с 21 по 30 из 68

Тема: Как создать библиотеку?

  1. #21
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    За Ваше сообщение №18 - мерси! А рассуждения о таинственном поведении КДС как-то настораживают.

    Цитата Сообщение от Николаев Андрей Посмотреть сообщение
    запретить не могем, но вероятность, что не заработает большая
    Я попробую сформулировать несколько положений, поправьте, в чем ошибаюсь.

    Имеется проект. К нему подключили некую внутреннюю библиотеку.

    1) Внутренняя библиотека (ВБ) - это всего лишь POU, созданные ранее и названные ВБ. Будучи подключенной к проекту, эти POU добавлены в список модулей для компиляции и, соответственно, компилируютсяе КДС при работе с нашим проектом.
    2) Как POU из списка для компиляции, эти библиотечные модули никак не отличаются от остальных POU, входящих в проект.
    3) Если в библиотечном POU есть обращение к глобальным переменным проекта - компилятор не обидится. Это вопрос исключительно вкуса программиста (как и вообще широта использования глобальных переменных). Да, может быть неудобство - если эта ВБ предназначена для широкого использования. Но это не ошибка.
    4) Аналогично не есть ошибкой синтаксиса обращение из библиотечных POU к конфигурационным переменным - это же, по сути, тоже глобальные переменные.
    5) Если в составе ВБ есть глобальные переменные и-или конфигурационные данные, то они просто добавляются к проекту и учитываются при компиляции (этот постулат сдается мне сомнительным, но неохота же все проверять ручками - жду ответов от прошедших путь).

    Таким образом, во внутренних библиотеках есть мало чего библиотечного. Это "куски" программы, написанные ранее и приклеиваемые к текущему проекту. Можно так считать?

    В противоположность, попробую предположить, что внешние библиотеки компилируются до включения в проект и этим похожи на взрослые библиотеки. Так?

    Еще раз оговорюсь: я не рассматриваю сейчас культуру программирования. Прекрасно понимаю опасность широкого использования глобальных переменных, важность заужения интерфейса модулей, вопросы портирования (часто здесь переоцениваемые) и прочая, и прочая... Речь сегодня о ФОРМАЛЬНЫХ ПРАВИЛАХ работы с ВБ.

    Спасибо!

  2. #22

    По умолчанию

    Как приятно работать с человеком, который фундаментально подходит к изучению процесса. Не иронизирую.
    1. А на языках высокого уровня библиотека - это не часть кода? Библиотека - это всегда шаблонные куски кода. Будь она внешней или внутренней - вопрос только в методе реализации.
    2. Дальше по культуре программирования, а именно почему не стоит включать глобальные и конфигурационные переменные:
    • Мы разобрались, что библиотека - это описание алгоритма работы устройства, а не реализация управления конкретным устройством? Думаю здесь вопросов не возникает.
    • Использовать глобальные переменные в подпрограммах - мовитон (мое ИМХО), так как теряется основной плюс использования библиотек: переносимость и масштабируемость. Не могу придумать задачу, где в нескольких экземплярах одного блока требуется использовать глобальную переменную (сквозную для всего проекта).
    • Использовать конфигурационные переменные точно не стоит. Если Вы будете использовать данные блоки только с одним контроллером - зачем Вам библиотека? Если с разными контроллерами, то какие шансы, что совпадут адреса первого дискретного входа в ПЛК100, первого дискретного входа в ПЛК63 и первого дискретного входа у Wago750...
      То есть Вы сделали библиотеку для одного, конкретного контроллера. Зачем??? В пользу ежеминутной лени? Ну не знаю.


    Даст ли компилятор сделать библиотеку, включающую ссылки к глобальным и конфигурационным переменным??? Думаю даст, но я не пробовал и пробовать не собираюсь. Чего и остальным желаю

    Надеюсь я ответил на Ваши вопросы.
    Последний раз редактировалось Николаев Андрей; 23.03.2011 в 12:19.

  3. #23
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Спасибо, будем считать, что мои вопросы сейчас исчерпаны.
    Могу ответить на Ваш неявно заданный вопрос:
    Цитата Сообщение от Николаев Андрей Посмотреть сообщение
    Не могу придумать задачу, где в нескольких экземплярах одного блока требуется использовать глобальную переменную (сквозную для всего проекта).
    ...
    То есть Вы сделали библиотеку для одного, конкретного контроллера. Зачем??? В пользу ежеминутной лени? Ну не знаю.
    Вот моя задача: один контроллер, много РОДСТВЕННЫХ применений. То есть общая структура программы, большая часть (или даже все) глобальные переменные, конфигурационные переменные - абсолютно все совпадает. Но! есть модификации оборудования, различающиеся многими деталями в одном или нескольких модулях. И этот "уникальный" модуль или несколько модулей (у меня это SFC-программа и иже с ней) - совсем не ДЕЦКИЙ. Он большой, он варьируется, он и определяет поведение контроллера в РОДСТВЕННЫХ устройствах. Его написание, отладка, развитие, клонирование - основная работа на следующие год-два. Таких РОДСТВЕННЫХ устройств выпускается около 3-х десятков.

    А вот именно вся фигня, которую я уже написал до сегодня - это "обслуживающие" модули. Это весь комплект работы с ИП-320, это (пока) штатный конфигуратор для работы с внешним АЦП по Модбасу, это хранение, контроль и редактирование конфигурационных параметров во ФЛЕШ-памяти ПЛК и во ФРАМ-памяти АЦП... Это нехилый кусок работы, который ОЧЕНЬ-ОЧЕНь связан и с глобальными переменными, и с переменными ввода-вывода. Но эта вся часть - абсолютно одинаковая во всех вариантах РОДСТВЕННЫХ устройств. Это как ЛИЦО, это интерфейс оператора, АЦП и энергонезависимой памяти. И что? Нельзя его скинуть в специальное место и хранить там в виде внутренней библиотеки? Слава Богу, что можно!

    Надеюсь, достаточно ясно показал пример библиотеки, широко простирающей руки свои в дела глобальные и конфигурационные И не парит меня, что В ДРУГИХ СЛУЧАЯХ это не культурно. В моем случае это есть добро.

    Аналогия: все знают, что пойнтер - вещь острая. Но понимающие люди могут его использовать грамотно - и с большой выгодой. Так и с библиотеками. Лучше не делать их с глобальными переменными. Но "блатным" можно

  4. #24

    По умолчанию

    Блатным как известно все можно. Мы же в России, ну и в Украине
    Но как Вы сами подтвердили мои слова - задача одна и та же, под практически один и тот же ПЛК.

    Так что считаю тему раскрытой.

  5. #25
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,248

    По умолчанию

    Разве на представленной мною картинке не глобальная переменная из сторонней библиотеки?
    Последний раз редактировалось capzap; 05.11.2011 в 21:49.

  6. #26
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Разве на представленной мною картинке не глобальная переменная из сторонней библиотеки?
    Похоже. Это подтверждает мое предположение, что "блатным все можно". Или, говоря строже, что компилятору пофиг, если в подключаемой библиотеке есть обращения к глобальным переменным (а может быть и к прямоадресуемым данным).

    Что еще раз подтверждает желательность более точного и подробного описания КДС. Было бы, например, прямое указание на то, что библиотеками можно объявить любой набор POU, в котором нет (а может и есть?) PLC_PRG, что единственным отличием внутренней библиотеки от функций проекта есть то, что ее POU не редактируются, что компилятор допускает обращение в библиотечных функциях к глобальным переменным и так далее... Нам бы не приходилось самим проверять "границы дозволенного".

    Кстати, я не знаю, является ли ComService.lib внешней или внутренней. Что такое "сторонняя библиотека"?

  7. #27
    Пользователь
    Регистрация
    21.03.2011
    Адрес
    Киров
    Сообщений
    176

    По умолчанию

    Доброе время суток. Подскажите правильную последовательность действий при создании и использовании библиотеки, а то у меня не получается. Вроде делаю как описано, при компиляции нет ошибок и предупреждений, а при сохранении выдает предупреждение: Access variables and variable configurations are not save in a library. А в новом проекте как я понимаю нужно воспользоватся менеджером библиотек для подключения своей библиотеки?

  8. #28

    По умолчанию

    Это видимо случай "блатных"...
    Я к ним не отношусь. И если интересно мое мнение - смотрите правила создания выше. Судя по всему на конфигурационные переменные он и ругается...

  9. #29

    По умолчанию

    Не надо отдельно сохранять проект для внутренней бибки. Файл с расширением .lib можно открыть всегда. Если это внутренняя бибка, то вы увидите все потроха. Для примера, попробуйте открыть Util.lib. Все получиться.

    Вы можете ввести права доступа и поставить пароль на внутреннюю бибку чтобы никто не лазил. Это бесплатно. Вышеупомянутый платный инструмент – Менеджер лицензирования библиотек нужен только для организации их продажи (генерация ключей, создание демо и т.п.), если вдруг возникнет желание таким бизнесом заняться.

    Внешние бибки так называются поскольку их код создан внешними инструментами и встроен в рантайм ПЛК. Это опция для изготовителей ПЛК. Если открыть внешнюю бибку в CoDeSys, то будут видны только объявления POU. Реализация будет пустой. Так можно их отличить.

    В документации я не представляю как для каждого чиха исхитриться выдумать все варианты и каждый разрешить. Что нельзя - написано, остальное можно.

    Как правило, если делается бибка, то предполагается ее давать другим людям. Тут вырастают разумные правила, которые Андрей детально пояснил. Для себя своя рука хозяйка.

    nestor Вы все правильно делаете. Предупреждение просто информирует, типа надписи на заборе

  10. #30
    Пользователь
    Регистрация
    21.03.2011
    Адрес
    Киров
    Сообщений
    176

    По умолчанию

    Цитата Сообщение от Игорь Петров Посмотреть сообщение
    nestor Вы все правильно делаете. Предупреждение просто информирует, типа надписи на заборе
    Но вопрос то остается как мне воспользоваться моей библиотекой? Может я неправильно подключаю? Я думал, что после того как я добавлю её в менеджере библиотек, то она должна появится в Ассистенте ввода (F2), но там её нет. Кроме того, в менеджере библиотек в правой части есть описание переменных и рисунок, а в моей - пусто. И в информации о библиотеке тоже пусто.
    Изображения Изображения

Страница 3 из 7 ПерваяПервая 12345 ... ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •