- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
M340 и странное поведение READ_VAR
Модераторы: Глоб.модераторы, Специалисты SE
-
- здесь недавно
- Сообщения: 94
- Зарегистрирован: 21 дек 2019, 19:49
- Имя: Дмитрий
- Страна: Россия
- город/регион: Тамбов
- Благодарил (а): 7 раз
- Поблагодарили: 4 раза
M340 и странное поведение READ_VAR
Добрый день, уважаеммые коллеги!
Столкнулся с немного не понятной для меня проблемой, касаемой работы блока READ_VAR
Исходные данные:
Оборудование: 2 контроллера M340, 2 панели HMIGXU5512, АРМ с InTouch.
Так выклядит сеть всего этого добра. Проект в панелях абсолютно идентичный, разница только в IP адрессах. Панели тянут данные с обоих контроллеров и отображают данные. АРМ соответственно делает тоже самое. А вот контроллеры по сути независимы друг от друга, но на всякий случай в контроллере №1 предусмотрена переменная, которая разрешает запускать установку, управляемую контроллером №2. То есть контроллер №2 должен читать одну единственную переменную из контроллера №1.
Естественно самый простой и надежный способ - использовать стандартный ФБ READ_VAR. Запустили, все безупречно работает. Контроллер получает разрешение и все рады.
Дабы не расписывать абсолютно все, приложу скрин кода, как это реализовано.
Кусок кода: Примечание.На вход EN подаем выход таймера TON. А на вход IN таймера подается его НЕ выход, таким образом циклически раз в 1 секунду даем разрешение на выполнение блока и как следствие 1 раз в секунду происходит опрос контроллера.
Суть проблемы
В течение года все превосходно работало. Контроллеры общались между собой, панели показывали данных с обоих контроллеров, арм работал и было все замечательно, до определенного момента.
Свитч, к которому подключены контроллеры и АРМ (тот, что на картинке верхний) был отключен на 2-3 дня. Связь пропала и не восстановилась. После включения свитча, АРМ данные отображает, панели видят оба контроллера. То есть связь есть. А вот READ_VAR работать перестал.
После того, как на вход/выход GEST у блока READ_VAR дал другой адресс (было %MW2900:4, заменил на %MW3900:4)- все заработало. Возращаю обратно - не работает. Указываю опять новый и отключаю свитч - связи нет, включаю свитч - связь восстанавливатеся и все работает.
Собственно вопрос. Что это такое и как это лечить?
P.S. адрес %MW2900 и далее после него точно не задействованы, то есть массив %MW2900:4 не может быть перезаписан ни чем, кроме как самим блоком READ_VAR
Столкнулся с немного не понятной для меня проблемой, касаемой работы блока READ_VAR
Исходные данные:
Оборудование: 2 контроллера M340, 2 панели HMIGXU5512, АРМ с InTouch.
Так выклядит сеть всего этого добра. Проект в панелях абсолютно идентичный, разница только в IP адрессах. Панели тянут данные с обоих контроллеров и отображают данные. АРМ соответственно делает тоже самое. А вот контроллеры по сути независимы друг от друга, но на всякий случай в контроллере №1 предусмотрена переменная, которая разрешает запускать установку, управляемую контроллером №2. То есть контроллер №2 должен читать одну единственную переменную из контроллера №1.
Естественно самый простой и надежный способ - использовать стандартный ФБ READ_VAR. Запустили, все безупречно работает. Контроллер получает разрешение и все рады.
Дабы не расписывать абсолютно все, приложу скрин кода, как это реализовано.
Кусок кода: Примечание.На вход EN подаем выход таймера TON. А на вход IN таймера подается его НЕ выход, таким образом циклически раз в 1 секунду даем разрешение на выполнение блока и как следствие 1 раз в секунду происходит опрос контроллера.
Суть проблемы
В течение года все превосходно работало. Контроллеры общались между собой, панели показывали данных с обоих контроллеров, арм работал и было все замечательно, до определенного момента.
Свитч, к которому подключены контроллеры и АРМ (тот, что на картинке верхний) был отключен на 2-3 дня. Связь пропала и не восстановилась. После включения свитча, АРМ данные отображает, панели видят оба контроллера. То есть связь есть. А вот READ_VAR работать перестал.
После того, как на вход/выход GEST у блока READ_VAR дал другой адресс (было %MW2900:4, заменил на %MW3900:4)- все заработало. Возращаю обратно - не работает. Указываю опять новый и отключаю свитч - связи нет, включаю свитч - связь восстанавливатеся и все работает.
Собственно вопрос. Что это такое и как это лечить?
P.S. адрес %MW2900 и далее после него точно не задействованы, то есть массив %MW2900:4 не может быть перезаписан ни чем, кроме как самим блоком READ_VAR
У вас нет необходимых прав для просмотра вложений в этом сообщении.
________________________________________________
Не так страшны первые 90% ПНР, как вторые 90% ПНР
Не так страшны первые 90% ПНР, как вторые 90% ПНР
-
- знаток Eplan
- Сообщения: 1136
- Зарегистрирован: 21 сен 2012, 22:45
- Имя: aranea
- Благодарил (а): 30 раз
- Поблагодарили: 165 раз
M340 и странное поведение READ_VAR
dsai, обязательно нужно установить Timeout (GEST[3]) и использовать Activity bit (GEST[1].0) последовательно с выходом таймера по И на вход EN блока READ_VAR, чтобы если операция все еще активна не повторять запрос
-
- здесь недавно
- Сообщения: 94
- Зарегистрирован: 21 дек 2019, 19:49
- Имя: Дмитрий
- Страна: Россия
- город/регион: Тамбов
- Благодарил (а): 7 раз
- Поблагодарили: 4 раза
M340 и странное поведение READ_VAR
Судя по всему действительно в этом дело. GEST[1].0 равен единице, если запрос выполняется? Я правильно понял?
Таймаут выставлен, забыл про это сказать.
________________________________________________
Не так страшны первые 90% ПНР, как вторые 90% ПНР
Не так страшны первые 90% ПНР, как вторые 90% ПНР
-
- знаток Eplan
- Сообщения: 1136
- Зарегистрирован: 21 сен 2012, 22:45
- Имя: aranea
- Благодарил (а): 30 раз
- Поблагодарили: 165 раз
M340 и странное поведение READ_VAR
F1 писал(а):Activity Bit
This bit indicates the execution status of the communication function.
It is set to 1 when launched and returns to 0 when its execution is complete.
Timeout
Timeout determines the maximum waiting time for the response. The time base for this parameter is 100 ms (the value 0 corresponds to an infinite waiting value).
-
- здесь недавно
- Сообщения: 94
- Зарегистрирован: 21 дек 2019, 19:49
- Имя: Дмитрий
- Страна: Россия
- город/регион: Тамбов
- Благодарил (а): 7 раз
- Поблагодарили: 4 раза
M340 и странное поведение READ_VAR
Огромное спасибо, картинка сошлась.aranea писал(а): ↑18 сен 2020, 22:00F1 писал(а):Activity Bit
This bit indicates the execution status of the communication function.
It is set to 1 when launched and returns to 0 when its execution is complete.
Timeout
Timeout determines the maximum waiting time for the response. The time base for this parameter is 100 ms (the value 0 corresponds to an infinite waiting value).
изначально стоял 0 в таймауте (это уже сейчас он выставлен у меня), в итоге ответ ожидался с того момента, как связь пропала, соответственно новые запросы не выполнялись.
________________________________________________
Не так страшны первые 90% ПНР, как вторые 90% ПНР
Не так страшны первые 90% ПНР, как вторые 90% ПНР
-
- здесь недавно
- Сообщения: 30
- Зарегистрирован: 05 янв 2020, 00:14
- Имя: Искандер
- Страна: Россия
- Благодарил (а): 2 раза
-
- здесь недавно
- Сообщения: 94
- Зарегистрирован: 21 дек 2019, 19:49
- Имя: Дмитрий
- Страна: Россия
- город/регион: Тамбов
- Благодарил (а): 7 раз
- Поблагодарили: 4 раза
M340 и странное поведение READ_VAR
Снова появилась такая же проблема. При этом после Вашего комментария сделал, чтобы запрос не выполнялся, если бит активности показывает, что выполняется запрос и принудительно в начале каждого цикла программы в GEST[3] (таймаут) прописываю значение в 200мс (после выполнения блока в данный параметр записываются какие-то другие значения, поэтому принудительно сбрасываю). Блок снова впал в ступор и не производит опрос (при этом бит активности показывает, что опроса не выполняется). Пришлось использовать "костыль". Панель читает переменную с 1ого ПЛК и пишет ее во 2ой. Но вопрос остается открытым, так как аналогичный блок читает по 485 интерфейсу с УПП информацию и там наблюдается картинка абсолютно такая же.aranea писал(а): ↑18 сен 2020, 22:00F1 писал(а):Activity Bit
This bit indicates the execution status of the communication function.
It is set to 1 when launched and returns to 0 when its execution is complete.
Timeout
Timeout determines the maximum waiting time for the response. The time base for this parameter is 100 ms (the value 0 corresponds to an infinite waiting value).
Где я делаю что-то не правильно?
________________________________________________
Не так страшны первые 90% ПНР, как вторые 90% ПНР
Не так страшны первые 90% ПНР, как вторые 90% ПНР
-
- здесь недавно
- Сообщения: 30
- Зарегистрирован: 05 янв 2020, 00:14
- Имя: Искандер
- Страна: Россия
- Благодарил (а): 2 раза
M340 и странное поведение READ_VAR
Добрый день, есть вопрос касаемо массива, который нужно передать в Gest, почему в описании говорится что это массив типа INT и там лежат биты состояния обмена, если это массив Tab_Gest ARRAY [1..4], то что будет значить запись Tab_Gest[1].0, к чему мы обращаемся? Что из этого слово состояния, а что из этого бит состояния? В двоичной системе Tab_Gest[1].0 будет выглядеть так 2#0000_0000_0000_0000, что из этого есть что? 2#0000_0000_0000_0000 этот последний бит отвечает за процесс обмена? как к нему обратиться, если переменная типа INT?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- специалист
- Сообщения: 642
- Зарегистрирован: 02 дек 2015, 06:57
- Имя: Огородников Сергей
- Страна: РФ
- Благодарил (а): 136 раз
- Поблагодарили: 111 раз
M340 и странное поведение READ_VAR
Добрый день, Искандер!
1. Прочитайте, пожалуйста, правила форума - в самом начале страницы
Дублирование сообщений приравнивается к спаму. Как и флуд "есть тут еще люди?"
2. Tab_Gest ARRAY [1..4] - лучше, всё-таки, использовать Tab_Gest ARRAY [0..3]
Иногда функции отказываются работать с массивами, индекс которых начинается не с нуля
3. Tab_Gest[1].0 (или в моём случае - Tab_Gest[0].0) - это обращение к нулевому биту самого первого слова массива Tab_Gest ARRAY
Что из этого слово состояния, а что из этого бит состояния? После точки - бит, в скобках - слово
4. 2#0000_0000_0000_0000 - самый правый бит индицирует активность функции
Обратиться к нему так, как написано в п.3 - Tab_Gest[0].0
Отправлено спустя 6 минут 19 секунд:
Если %MW380:4, то таймаут писать нужно в %MW382
2. в %MW383 будут отображаться количество принятых/отправленных байтов - проверьте
3. Каждый вызов можно не писать значения таймаута - кто их переписывает в программе? Можно сделать однократно при запуске ПЛК
4. Выкладывайте схемы/части кода, когда задаёте вопрос - проще сразу посмотреть, чем листать всю тему, да к тому же, что-то уже могло измениться
1. Прочитайте, пожалуйста, правила форума - в самом начале страницы
Дублирование сообщений приравнивается к спаму. Как и флуд "есть тут еще люди?"
2. Tab_Gest ARRAY [1..4] - лучше, всё-таки, использовать Tab_Gest ARRAY [0..3]
Иногда функции отказываются работать с массивами, индекс которых начинается не с нуля
3. Tab_Gest[1].0 (или в моём случае - Tab_Gest[0].0) - это обращение к нулевому биту самого первого слова массива Tab_Gest ARRAY
Что из этого слово состояния, а что из этого бит состояния? После точки - бит, в скобках - слово
4. 2#0000_0000_0000_0000 - самый правый бит индицирует активность функции
Обратиться к нему так, как написано в п.3 - Tab_Gest[0].0
Отправлено спустя 6 минут 19 секунд:
1. Проверьте, не считаете ли вы четвёртый элемент за третий?
Если %MW380:4, то таймаут писать нужно в %MW382
2. в %MW383 будут отображаться количество принятых/отправленных байтов - проверьте
3. Каждый вызов можно не писать значения таймаута - кто их переписывает в программе? Можно сделать однократно при запуске ПЛК
4. Выкладывайте схемы/части кода, когда задаёте вопрос - проще сразу посмотреть, чем листать всю тему, да к тому же, что-то уже могло измениться
СВ
-
- здесь недавно
- Сообщения: 30
- Зарегистрирован: 05 янв 2020, 00:14
- Имя: Искандер
- Страна: Россия
- Благодарил (а): 2 раза
M340 и странное поведение READ_VAR
ogorsv, спасибо за ответ, не хотел флудить, нашел такую запись Tab_Gest[0]=0 и Tab_Gest[1]=1, то есть мы в элементы массива записываем значения, которые при переводе в двоичную у Tab_Gest[0]=0 будет (2#0000_0000_0000_0000), Tab_Gest[0]=2 будет (2#0000_0000_0000_0010)
а у Tab_Gest[1]=1 (16#01) правильно ли я понял?
а у Tab_Gest[1]=1 (16#01) правильно ли я понял?
-
- специалист
- Сообщения: 642
- Зарегистрирован: 02 дек 2015, 06:57
- Имя: Огородников Сергей
- Страна: РФ
- Благодарил (а): 136 раз
- Поблагодарили: 111 раз
M340 и странное поведение READ_VAR
Tab_Gest[0]=1 - это значение в десятичной, 2#0000_0000_0000_0001 в двоичной, 16#01 в шестнадцатеричной.
То же, что и Tab_Gest[0].0
Tab_Gest[0]=2 - это значение в десятичной, 2#0000_0000_0000_0010 в двоичной, 16#02 в шестнадцатеричной
То же, что и Tab_Gest[0].1
То же, что и Tab_Gest[0].0
Tab_Gest[0]=2 - это значение в десятичной, 2#0000_0000_0000_0010 в двоичной, 16#02 в шестнадцатеричной
То же, что и Tab_Gest[0].1
СВ