Показано с 1 по 10 из 10

Тема: непонятки с типом Bool

  1. #1

    По умолчанию непонятки с типом Bool

    Доброго времени суток!

    Я только начинаю знакомсво с CoDeSys и пишу программу, связанную с диагностикой электронного блока. Работа программы заключается в подаче управляющих сигналов с ПЛК и приеме большого количества дискретных сигналов с проверкой соответвия с таблицей истинности. Получается, что при различных значениях выходных сигналов ПЛК, надо принять и проверить различные комбинации входных сигналов. Причем проверка должна проходить последовательно. При не соответсвии она прекращается, а при устранении неполадки должна возобнавиться с того же места, на котором остановилась.
    Проблема заключается в следующем:
    Входные каналы связаны с перемнными типа BOOL. Формально в программе я прописываю нужные таблицы истинности для этих каналов. Но получается так, что одни и те же переменные в разных местах программы на разных этапах проверки принимают противоположные значения, т.е, например, в начале x1_44=false, а где-то в середине x1_44=true и т.д. Это зацикливает программу, т.е когда проверка доходит до совпадения с определенной переменной, то происходит возврат в самое начало и опять тоже самое до первого совпадения переменных.
    Я пробовал обнулять переменные перед каждым шагом проверки, но это тоже не помогает. Подскажите плиииз как мне выкрутиться из такой ситуации.
    Алгоритм и проект прилагаю 1.rar

  2. #2
    Пользователь Аватар для rovki
    Регистрация
    03.01.2010
    Адрес
    Чехов
    Сообщений
    12,113

    По умолчанию

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

  3. #3

    По умолчанию

    входных сигналов где-то 75, а выходных - 25. ограничения на скорость диагностики нету.

  4. #4

    По умолчанию

    и еще, какой плк используете?

  5. #5

    По умолчанию

    Буду использовать либо Овен ПЛК 110-60, либо другой контроллер с CoDeSys.
    До конца ещё не определился. Но инструментальная среда по сути одинакова для обоих вариантов. Различия только в меню конфигурации, что на данный момент не особо важно.
    Последний раз редактировалось Николаев Андрей; 13.04.2010 в 23:19.

  6. #6

    По умолчанию

    машину состояний с состояниями для шагов и ошибок в каждом шаге (отдельные состояния ошибки).
    на каждом шаге сравнение с массивом корректного состояния.
    и никаких циклов не будет.

    случайно не систему самодиагностики для чего-то летающе-стреляющего делаете?

  7. #7

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    жуткая запись.поиск ошибок в ней просто пипец.
    вы уверены на 100% что нет косяков ?
    нельзя ли как-то на пальцах суть проверки пояснить ?
    джипег плохо читаемый.
    На первом шаге проверки косяков нет точно. Они начинаются со второго и последующих шагов

    Суть проверки: на входы блока я подаю диагнотические сигналы, а с выходов снимаю ответные сигналы и сравниваю их с таблицей истинности, составленной согласно принципиальной схеме.

    Суть проблемы:
    На первом шаге используются практически сразу все выходные каналы блока (соответственно входные каналы ПЛК). Тут все нормально. Отладку делал ни один раз.
    На последующих шагах используются те же каналы, только не все сразу, а часть. Их состояния соответственно должны измениться. И вот тут все сводится к тому, что возникает что-то типа "несоответствия состояния переменных", описывающих состояния входов ПЛК (выходов блока). Переменные одни и те же, а состояния у них разные на каждом шаге проверки в пределах одной программы. Вобщем как писал ранее: на первом шаге переменная типа bool x1_41=false. А вот на втором шаге эта же переменная x1_41=true, как только это условие выполнилось действие перескакивает на первый шаг и сообщение, что на первом шаге канал x1_41 неисправен, т.к он должен быть false... Вобщем замкнутый круг получается...
    Было дело, писал что-то подобное на ассемблере для микроконтроллеров - там таких проблем не возникло. А в данной ситуации, честно говоря, как в тупике

    Выкладываю оригинальный компасовский файл с частью алгоритма
    Вложения Вложения

  8. #8

    По умолчанию

    Цитата Сообщение от филоненко владислав Посмотреть сообщение
    машину состояний с состояниями для шагов и ошибок в каждом шаге (отдельные состояния ошибки).
    на каждом шаге сравнение с массивом корректного состояния.
    и никаких циклов не будет.

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

    на счет летающе-стреляющего почти в точку

  9. #9

    По умолчанию

    Уважаемый freak!

    Предлагаю переделать программу чуть более чем полностью.

    1) Ввести массив из 3х измерений - номер шага, входы (подаваемые на плату), выходы(получаемые при правильной работе с платы).
    2) Создать ФБ получающий входы и № шага и выставляющий выходы в соответсивии с таблицей + индикация ошибок.
    3) Создать тестовый ФБ производящий обратные действия
    4) Создать программу для тестирования тестового блока.
    5) Создать реальную программу с учетом задержек включения реальных контактов (т.е. проверка не сразу после изменения шага, а позже)

    Писать как написана программа нельзя - это практически не отлаживаемый код и тем более не читаемый!
    Часто задаваемые вопросы по кодесис
    1) Почему программа не работает - Следует выполнить "Онлайн ->Старт"
    2) Где скачать CoDeSys, таргеты, прошивки, библиотеки - http://www.owen.ru/catalog/codesys_v3/opisanie

  10. #10

    По умолчанию

    Цитата Сообщение от Малышев Олег Посмотреть сообщение
    Уважаемый freak!

    Предлагаю переделать программу чуть более чем полностью.

    1) Ввести массив из 3х измерений - номер шага, входы (подаваемые на плату), выходы(получаемые при правильной работе с платы).
    2) Создать ФБ получающий входы и № шага и выставляющий выходы в соответсивии с таблицей + индикация ошибок.
    3) Создать тестовый ФБ производящий обратные действия
    4) Создать программу для тестирования тестового блока.
    5) Создать реальную программу с учетом задержек включения реальных контактов (т.е. проверка не сразу после изменения шага, а позже)

    Писать как написана программа нельзя - это практически не отлаживаемый код и тем более не читаемый!
    Согласен с Вами, что код плохо отлаживаемый. Спасибо за идею.
    Но вот как это реализовать - для меня на данный момент это "темный лес" Поэтому прошу, как-нибудь по подробнее пояснить реализацию 1 и 2 пунктов. Заранее благодарен

Ваши права

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