Цитата:
Сообщение от ATS
Чем сложная?
|
Для меня была сложность в распараллеливании обмена и соблюдении точного такта. Зачем соблюдение точного такта неочевидно, следовательно можно не рассматривать.
Распараллеливание обмена понятно для большей скорости и снижения нагрузки на основной цикл.
Модулей ввода вывода постепенно становится более 60. Количество нефиксированное, может меняться в процессе работы, необходимо менять на ходу.
У модуля может измениться IP так же на ходу.
Модуль может быть выведен из обмена, так же на ходу.
У модуля может поменяться таблица переменных так же на ходу (можем поменять тип).
Возникает необходимость смены переменных как входных так и выходных так же на ходу.
Единственно на что я не решился менять полный список параметров без остановки программы. Перевыделение массивов может привести к приостановке основного цикла.
В общем небольшие объекты в более крупной установке останавливать можно, целиком установку реже, весь объект еще реже.
Зачем - у нас на доске написана сумма простоя за один час работы.
Цикл опроса модуля: соединение - запись, ожидание ответа, запись в общий массив(далее по циклу) - разрыв связи только при останове обмена или завершении программы. Соединение держим.
Для того, чтобы ожидание ответа из TCP стека не тормозило все остальное, необходимо обмен с одним модулем вывести в отдельный поток.
Составить таблицу потоков, контролировать, что живые, синхронизировать начало обмена, остановить по завершении.
Каждый поток записывает запрос в стек (50 микросекунд) не зная про другие потоки. Сетевая карта и драйвер сами разруливают очередь. Далее сетевая карта с максимально возможной скоростью передает пакеты в switch. Switch раздает запросы по адресам. Модуля параллельно отвечают. Switch заталкивает назад в сетевую карту, она раздает по соединениям. Блоки TCP чтения в потоках дождавшись необходимого количества данных передают дальше, чуть обработки и в общий массив.
Для меня было сложно.
Если все остальные оценивают это как легко, значит для Сегнетикса тоже легко.
Преимущества: Cкорости бешеные. Провод - восемь дешевых проволочек свитых попарно, разъемы копеечные. Свичи промышленные 8 канальные работают и работают ай-ай-ай за 126 баксов.