PDA

Просмотр полной версии : Функциональный блок, как сетевая переменная



Солнечный заяц
03.06.2011, 10:29
Здравствуйте.
Упрощенно опишу систему:
2 контроллера плк110: ведущий и ведомый. На ведомом вызывается функциональный блок (ФБ) с десятком входов и выходов, объявленный как сетевая переменная. Ведущий должен записывать на входы этого ФБ данные и читать информацию с выходов.
Я создаю папку с этой сетевой переменной (сетевым ФБ) с галками на чтение и запись в обоих контроллерах.
Т.е. входы ФБ записывает ведущий, - читает ведомый. Выходы наоборот.
Т.о. наложений данных быть не должно. Но будет ли это работать? И нет ли каких подводных камней?
Например при присваивании значения входу ФБ "FBlock(in_1:=true)" будет производиться вызов этого блока на ведущем контроллере, хотя некоторые его (блока) выходы привязаны к физическим выходам ведомого контроллера...

П.С.
Можно конечно было бы наобъявлять кучу переменных, которые присвоить входам и выходам ФБ, но это дополнительная трата веремени и ухудшение читаемости проекта.

lara197a
03.06.2011, 10:34
Соедините как в примере по UDP и создайте общую область данных.
Все будет работать.

Солнечный заяц
03.06.2011, 10:58
Соедините как в примере по UDP и создайте общую область данных.
Все будет работать.
Про пример с UDP все понятно. Но что значит создание общей области данных? Создание дополнительного листа сетевых переменных? Или какое то другое выделение памяти?

lara197a
03.06.2011, 14:47
у вас будут переменные, общие для обоих контроллеров.
Делайте с ними. что угодно.
Я пробовал так с 3 контроллерами. Первый давал значение второму, ВТОРОЙ ТРЕТЬЕМУ, а третий передавал значения в первый.

Солнечный заяц
05.07.2011, 09:16
Не рекомендую использование функциональных блоков в качестве сетевых переменных с разрешением одновременных чтения и записи.
Обмен производился с передачей по изменению данных и минимальным интервалом передачи 1 сек. При старте контроллеров события развивались по одному из 2-х сценариев:
1. Обмен сетевыми переменными функциональных блоков не происходил (восстановился сам по себе примерно через 10 минут)
2. Происходило наложение противоречивых данных на выходные сигналы функциональных блоков. Вероятно из-за вызова одного и того же ФБ на разных контроллерах с разными входными сигналами или задержек передачи сигнала. (Технологически опасно. Приходилось останавливать выполнение программы).

Обмен остальными сетевыми переменными происходил нормально всегда. Рекомендовал бы использовать сетевые ФБ с разрешением либо на запись, либо на чтение, а сигналы противоположного направления организовать через промежуточные переменные.

Александр Приходько
05.07.2011, 09:52
Объясните, каков смысл передачи всего ФБ? Все равно вам нужен результат работы ФБ. Скажем если еще его входы нужны, заведите их тоже в сетевые переменные. А смысл ФБ передавать, я не вижу.

Солнечный заяц
06.07.2011, 08:14
Проще программировать, и легче читать программу потом. У функционального блока десяток входов и десяток выходов и самих ФБ 7 штук, итого: 140 переменных. Вот и получается, что проще объявить 7 ФБ как сетевые переменные (даже не объявить, а переместить из листа глобальных переменных в лист сетевых), чем создавать 140 дополнительных переменных.

UPD.
Хотя есть один вариант: переделать ФБ так, чтобы у него на входе и выходе было по одной структуре. Получится по 2-е структуры на 1 ФБ, итого 14 объявлений в нашем случае... :)