Добрый день уважаемые! Понадобилось мне переходить на другие контроллеры в связи со снятием с производства ADAM 5510. Для связи контроллеров с компьютером на котором стоит программа управления оборудованием у нас была самописная библиотека для сети ultranet, которая обеспечивала очень быструю работу по сети rs-485 до 6 контроллеров с количеством переменных порядка 2000-3000.
Был выбран ПЛК 110-60. Но встала проблема взаимодействия ПЛК с уже написаной программой управления. Использовать СКАДУ и начинать все по новой как то не хотелось. Было принято решение найти какую нибудь фришную библиотеку под СИ и прикрутить ее к нашей программе управления для использования протокола modbus rtu. Излазив пол интернета в поисках такой библиотеки, я пришел к выводу, что кроме кросплатформенной libmodbus ничего и нет. Но как оказалось, эта библиотека не подходит для нашей задачи. С одним контроллером еще кое как работает, но вот пара уже никуда не годится. Тормоза программы страшные. Решил прогуляться по коду и был немного шокирован как эта библиотека написана. Оказывается при работе с COM портом не используется асинхронный режим! Да и сам автор в комментариях кода написал, что типа ребята, я не знаю как реализовать или не захотел реализовывать этот режим. Наверное все кто пишет работу с COM портом знают, что инициализировать порт нужно с флажком FILE_FLAG_OVERLAPPED и далее организовывать два потока. На чтение и запись используя события WaitCommEvent. Иначе ничего хорошего не получится.
Пришлось отказаться от этой библиотеки и писать реализацию modbus самому. Вроде как получилось. Для решения своих задач я не реализовывал множество функций. Только чтение массива регистров, запись одиночного coil, word, dword и float. Для упрощения дальнейшей работы сделал классы типов используемых переменных. В используемой программе просто создаются новые объекты переменные. Функции работы с modbas инкапсулированы в классах.
Сейчас на столе пара контроллеров с залитыми программами. И написана тестовая программка опрашивающая эти контроллеры и посылающая на запись по нажатию кнопки некоторые переменные. Для контроля обмена по порту использован Free Serial Port Monitor
Вот скриншот что передается по порту. COM.JPGОпрашиваются 41 и 32 регистра. Также видны посылки записи четырех переменных типа coil. На контроллерах использованы вторые порты в режиме мастера для опроса внешних модулей и управления частотными преобразователями.
Все это предисловие сводится к одному вопросу. Это минимальное время (0.0313 секунды) ответа контроллера после запроса или можно как то еще его уменьшить? Скорость порта 115200.