Показать сообщение отдельно
Старый 30.10.2019, 16:20   #101
ujin
Senior Member
 
Аватара для ujin
 
Регистрация: May 2010
Адрес: Novosibirsk
Сообщения: 761
Благодарил(а): 1 раз(а)
Поблагодарили: 10 раз(а) в 10 сообщениях
По умолчанию Ответ: Функционал

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


__________________
В жизни 2 правила успеха:
1 Не говори всего что знаешь
2 ...
ujin вне форума   Ответить с цитированием