Страница 1119 из 1177 ПерваяПервая ... 1196191019106911091117111811191120112111291169 ... ПоследняяПоследняя
Показано с 11,181 по 11,190 из 11764

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

  1. #11181

    По умолчанию

    Цитата Сообщение от Nitc Посмотреть сообщение
    в программе ПР есть уставка 1 (время реакции).
    ПР подружил с панелью оператора (мастер). Если уставку 1 привязать к "входной блок сетевой переменной", то при старте эта переменная равна нулю. Видимо до получения от мастера (панель оператора) переменной, ПР (slave) трактует как "0".
    Значение по умолчанию в ПР102 почему-то не дает поставить.

    Как сделать чтобы в памяти ПР102 было ненулевое значение?
    Вы пишите не в тот раздел, здесь ПЛК (среда CoDeSys V2.3), а вам нужно в Программируемые реле.
    По теме, сделайте инициализацию при включении, из энергонезависимой переменной. 1 Инициализация.jpg
    Последний раз редактировалось kondor3000; 25.01.2025 в 14:07.

  2. #11182

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    В Модбас мастере, есть адрес и ошибка, дайте им имя и получите ошибку ERR<>0, при обрыве связи Вложение 81574
    Если блоков несколько, адрес меняется вместе с ошибкой, если связь есть, то ошибка =0.
    Я правильно понял, что в моем случае, когда 4 ВУ, я должен в программе на каждом цикле анализировать эти переменны (Last address и Last error). Там постоянно (!) меняются адреса внешних устройств и ошибки по этим адресам? И ничего там не сохраняется на долго. Значения меняются с частотой опроса внешних устройств? Я нашел всего два кода ошибок для RS-485 интерфейса: 0 (ошибки нет) или 81 (превышен таймаут ожидания ответа).

  3. #11183

    По умолчанию

    Цитата Сообщение от vsa Посмотреть сообщение
    Я правильно понял, что в моем случае, когда 4 ВУ, я должен в программе на каждом цикле анализировать эти переменны (Last address и Last error). Там постоянно (!) меняются адреса внешних устройств и ошибки по этим адресам? И ничего там не сохраняется на долго. Значения меняются с частотой опроса внешних устройств? Я нашел всего два кода ошибок для RS-485 интерфейса: 0 (ошибки нет) или 81 (превышен таймаут ожидания ответа).
    Что там анализировать то? Любая ошибка, проблема со связью.
    Код:
    IF Last_Adres=16 AND Last_Error<>0 THEN
      Avar1:=TRUE; ELSE Avar1:=FALSE;
    END_IF

  4. #11184

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Что там анализировать то? Любая ошибка, проблема со связью.
    Код:
    IF Last_Adres=16 AND Last_Error<>0 THEN
      Avar1:=TRUE; ELSE Avar1:=FALSE;
    END_IF
    Если у меня 4 ВУ, то я должен по каждому устройству отработать Ваш фрагмент программы. Например:

    Код:
    IF Last_Adres=3 AND Last_Error<>0 THEN
      Avar1:=TRUE; ELSE Avar1:=FALSE;
    END_IF
    
    IF Last_Adres=4 AND Last_Error<>0 THEN
      Avar2:=TRUE; ELSE Avar2:=FALSE;
    END_IF
    
    IF Last_Adres=5 AND Last_Error<>0 THEN
      Avar3:=TRUE; ELSE Avar3:=FALSE;
    END_IF
    
    IF Last_Adres=6 AND Last_Error<>0 THEN
      Avar4:=TRUE; ELSE Avar4:=FALSE;
    END_IF
    Так?

  5. #11185

    По умолчанию

    Цитата Сообщение от vsa Посмотреть сообщение
    Если у меня 4 ВУ, то я должен по каждому устройству отработать Ваш фрагмент программы. Например:

    Код:
    IF Last_Adres=3 AND Last_Error<>0 THEN
      Avar1:=TRUE; ELSE Avar1:=FALSE;
    END_IF
    
    IF Last_Adres=4 AND Last_Error<>0 THEN
      Avar2:=TRUE; ELSE Avar2:=FALSE;
    END_IF
    
    IF Last_Adres=5 AND Last_Error<>0 THEN
      Avar3:=TRUE; ELSE Avar3:=FALSE;
    END_IF
    
    IF Last_Adres=6 AND Last_Error<>0 THEN
      Avar4:=TRUE; ELSE Avar4:=FALSE;
    END_IF
    Так?
    Можно так:
    Код:
    CASE Last_Adres OF
    1: Err1 := LastErr;
    2: Err2 := LastErr;
    3: Err3 := LastErr;
    4: Err4 := LastErr;
    5: Err4 := LastErr;
    6: Err4 := LastErr;
    END_CASE;

  6. #11186

    По умолчанию

    В моем проекте требуется на ВУ по RS-485(Modbus) в три регистра передать значения. Но передавать необходимо строго в определенной последовательности. Как я могу просто проверять корректность передачи данных по Modbus? Или придется после каждой записи данных в регистр опять читать этот регистр и смотреть, что записалось?

  7. #11187

    По умолчанию

    Но передавать необходимо строго в определенной последовательности.
    ну так записывайте в эти переменные СТРОГО В ОПРЕДЕЛЁННОЙ последовательности, и сами в программе своей контролируйте эту запись
    в чём проблема прикрутить дополнительное условие для записи переменной?

  8. #11188

    По умолчанию

    Цитата Сообщение от vsa Посмотреть сообщение
    Если у меня 4 ВУ, то я должен по каждому устройству отработать Ваш фрагмент программы. Например:

    Так?
    Можно упростить код. Только надо понимать, что так аварии будут постоянно мигать (работа в динамике)
    Код:
    Avar3:=Last_Adres=3 AND Last_Error<>0 ;
    Avar4:=Last_Adres=4 AND Last_Error<>0 ;
    Avar5:=Last_Adres=5 AND Last_Error<>0 ;
    Avar6:=Last_Adres=6 AND Last_Error<>0 ;
    Если же надо включить аварию, лучше использовать вариант 1exan с CASE. В шагах можно дописать включение других переменных.
    Код:
    CASE Last_Adres OF
    3: Err3 := Last_Error<>0;
    4: Err4 := Last_Error<>0;
    5: Err5 := Last_Error<>0;
    6: Err6 := Last_Error<>0;
    END_CASE;
    Последний раз редактировалось kondor3000; 26.01.2025 в 12:21.

  9. #11189

    По умолчанию

    Наверно я не корректно поставил задачу. Представьте, необходимо записать по Modbus под адресом 3 в регистр 101, например, значение 100. После это, в регистр 103 значение 127 и только после этого в регистр 107 значение 3.
    Хотите сказать, что если я запишу :
    ...
    Reg101 := 100;
    Reg103 := 127;
    Reg107 := 3;
    ...
    Это все пройдет корректно? Если да, то это отлично!

    Просто, я раньше много лет работал с контроллерами Шнайдерэлектрик M221, то там нужно дождаться пока пройдет первая пересылка данных, а уж потом заталкиваем следующие данные. И там постоянно контролирую передачю данных.

  10. #11190

    По умолчанию

    Цитата Сообщение от vsa Посмотреть сообщение
    Хотите сказать, что если я запишу :
    ...
    Reg101 := 100;
    Reg103 := 127;
    Reg107 := 3;
    ...
    Это все пройдет корректно? Если да, то это отлично!
    ну формально, строки обрабатываются по порядку
    и присвоение значения переменной идёт по порядку строк в программе
    поэтому всё это будет работать "как есть"
    если же вам необходимо Reg103 присвоить 127 только после записи числа 100 в слейв 3 и вы без этого спать не сможете спокойно, то добавьте Условие к присвоению Reg103
    прочтите из слейва состояние регистра 101, и если он равен ранее введённому числу 100, то Reg103:=127
    если нет, то другое действие или значение какое необходимо
    то же самое делаете для Reg107

Страница 1119 из 1177 ПерваяПервая ... 1196191019106911091117111811191120112111291169 ... ПоследняяПоследняя

Метки этой темы

Ваши права

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