Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 26

Тема: вопросы начинающего

  1. #1
    Пользователь Аватар для Flomaster
    Регистрация
    03.05.2007
    Адрес
    Khabarovsk
    Сообщений
    278

    По умолчанию вопросы начинающего

    доброго времени суток всем!
    некоторое время назад появилась необходимость программирования контроллера плк-150. сам я программист, но в программировании контроллеров - новичок, поэтому хочу вкратце обрисовать задачу и задать пару вопросов.
    задача заключается в том, что необходимо при помощи контроллера запускать какое-либо оборудование. к дискретным входам контроллера подключены выключатели. и оборудование должно запускаться при определенной комбинации положений переключателей.

    вопрос №1. как отследить изменение сигнала(статуса) дискретного входа (т.е. определить, что на каком-то входе выключатель был включен или выключен), чтобы потом выполнить проверку положения всех переключателей и при необходимости запустить оборудование? пытался разобраться с триггерами дискретных входов, но при добавлении двух и более триггеров вылетает ошибка 3454 при компиляции проекта.

    вопрос №2. т.к. количество подключаемого оборудования может изменяться, для удобства адаптации программы к количеству оборудования возникла идея создать массив структур. каждый элемент массива будет соответствовать одной единице оборудования и описываться структурой. вот собственно вопрос: можно ли добавить в эту структуру поле, которое было бы привязано, например, к определнному дискретному выходу контроллера? т.е. при необходимости я мог бы обратиться к дискретному выходу контроллера через это поле структуры и подать на дискретный выход какой-либо сигнал?

    вопрос №3. посоветуйте, пожалуйста, как вести лог-файл действий, выполняемх программой? может об этом можно где-то почитать?

  2. #2

    По умолчанию

    1. Анализируя изменения значений байта дискретных входов (сравнение с сохр. значением)

    2. Посмотрите синтаксические элемент AT. ели не поможет, то выход, если создать функцию/функц. блок, к-й бы анализировал номер выхода и значение из структуры, а затем переключал бы его.

    3. Библиотека SysLibTime, создаёте файл и ведёте в нем лог, как и на любой др. платформе с файловой системой.

    P.S. Рекомендую до начала экспериментов прошиться самой свежей прошивкой, установить таргеты и нов. версию среды разработки - многие вопросы отпадут сами

  3. #3

    По умолчанию

    По поводу п.2 делал такое следующим образом:
    Создавал функциональный блок отвечающий за управление одним устройством. Те переменные которые должны соответствовать входам\выходам объявляются как конфигурационные или "шаблонные" т.е. объявление типа
    VAR
    xMyVar %I*: BOOL;
    END_VAR
    далее создаем массив экземпляров функциональных блоков (размер массива соответствует числу подключенных устройств).
    Далее находим на вкладке Resources список глобальных переменных Variable_Configuration или создаем его если его нет (любое имя, тип переменных VAR_CONFIG END_VAR). Там определяем какая переменная какого ФБ к какому входу выходу должна быть привязана по схеме
    Имя_программы.имя_экземпляра_ФБ.имя_переменной AT %IX0.0: BOOL;

    Теперь при изменении количества устройств необходимо только изменить размер массива и доопределить конфигурационные переменные.
    Вот и все.

    Удачи.

  4. #4
    Пользователь Аватар для Flomaster
    Регистрация
    03.05.2007
    Адрес
    Khabarovsk
    Сообщений
    278

    По умолчанию

    to Nekit: спасибо, попробую сделать аналогично.

    to Филоненко Владислав: по вопросу 3 буду разбираться и экспериментировать. Теперь по вопросу 1. Изначально была следующая мысль. Например основная программа разрабатывается на языке POU SFC и представляет собой цикл. Тогда в одном из блоков нужно считывать состояние дискретного входа и сравнивать его с предыдущим. Ну, а дальше уже дело техники. Я так понял, что Вы в своем ответе на мой вопрос имели в виду именно такую схему?

  5. #5

    По умолчанию

    По вопросу № 3 - поправка не SysLibTime а SysLibFile.
    SFC - это машина состояний. Чем то напоминает сеть Петри.
    В любой момент времени одно (или несколько при использовании параллельных разветвителей) состояний активны. После активного состояния идет переход. Если он выполняется (условие истинно), следущее состояние становится активным. Для каждого состояния можно задать действия выполняемые при определенных условиях (например вход в состояние, выход, пока активно).

  6. #6

    По умолчанию

    Цитата Сообщение от xScar2003 Посмотреть сообщение
    to Nekit: спасибо, попробую сделать аналогично.

    to Филоненко Владислав: по вопросу 3 буду разбираться и экспериментировать. Теперь по вопросу 1. Изначально была следующая мысль. Например основная программа разрабатывается на языке POU SFC и представляет собой цикл. Тогда в одном из блоков нужно считывать состояние дискретного входа и сравнивать его с предыдущим. Ну, а дальше уже дело техники. Я так понял, что Вы в своем ответе на мой вопрос имели в виду именно такую схему?
    п3. Только заметил, библиотека не SysLibTime, а SysLibFile
    п1. Именно эту.

  7. #7

    По умолчанию

    По поводу п.1 в PLCConfiguration можно добавить подмодуль Триггер. Он связывается с каким либо входом настраивается фронт срабатывания (передний, задний, или что необходимо в нашем случае оба фронта) и все дальше обявляем переменную по адресу выхода триггера и контролируем ее если 1 то произошло переключение, если 0 то нет. мне кажется так логичнее, да и код уменьшается. При использовании триггеров из standart.lib тоже самое только придется R и F триггеры придется включать параллельно для фиксирования обоих фронтов, а в конфигураторе все удобно и просто (в очередной раз спасибо программерам ОВЕН за заботу).


    Удачи.

  8. #8
    Пользователь Аватар для Flomaster
    Регистрация
    03.05.2007
    Адрес
    Khabarovsk
    Сообщений
    278

    По умолчанию

    Спасибо всем за ответы! Процесс пошел. Пока не очень быстро, как хотелось бы, но начал вникать в процесс работыс контроллером:-)
    Только вот непонятно, почему не удается создать больше одного триггера? Компилятор начинает ругаться и выдавать ошибку 3454 :-(((
    В принципе, можно обойтись и без триггера, только при этом придется анализировать значение на нужном входа. А используя триггер сразу будет известно, менялось значение или нет. Вообще изначально я считал, что в CoDeSys есть так обработчики событий - как в визуальных средах типа Builder или Visual Studio (например, событие нажатия на кнопку). Думалось, что и здесь есть нечто аналогичное: изменилось значение на дискретном входе - вызвалось событие. А в обработчеке собятия уже можно всё, что угодно сделать.

  9. #9

    По умолчанию

    уберите галочку контроля, которая обозначена на вложенной картинке
    Изображения Изображения
    • Тип файла: jpg 1234.JPG (66.0 Кб, Просмотров: 181)

  10. #10

    По умолчанию

    Цитата Сообщение от xScar2003 Посмотреть сообщение
    ...я считал, что в CoDeSys есть так обработчики событий...изменилось значение на дискретном входе - вызвалось событие.
    При желании так можно. Нужно использовать конфигуратор задач.
    1) Сделать циклическую задачу и не забыть в нее вставить PLC_PRG
    2) Наделать задач, вызываемых по событиям (Triggered by event) и связать с ними соотв-е программы, событие – любая глобальная логическая переменная.

    Однако:
    1) Это не есть общепринятый метод программирования на языках МЭК.
    2) Выигрыша по скорости нет.
    3) Можно запутаться в последовательности событий.

    Я бы оставил с опросом по триггерам. Здесь все понятно и проще будет потом поправить, когда уже глухо забудется что к чему было приделано.

Страница 1 из 3 123 ПоследняяПоследняя

Ваши права

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