Всем здравствуйте!
Не стал заводить новую тему, спрошу здесь.
Для связи программы на дельфи с ПЛК110 через Ethernet использую компонент modbustcp. Связь организована следующим образом: в конфигурации ПЛК прописано 6 байт, ПЛК настроен Slave'ом. Программу дельфи сначала попытался строить по такому принципу:
По таймеру (раз в 100 мс) сначала происходит чтение 2 байт из ПЛК, затем математическая обработка, затем запись 4 байт. Но не получилось так, как хотелось - таймер срабатывал примерно раз в секунду (смотрел по инкременту числа на надписи, который производился в каждой обработке срабатывания). Разнёс процедуры чтения и записи на разные обработки срабатывания и увеличил частоту срабатывания до раз в 75 мс (то есть, в первой процедуре читаем и математически обрабатываем, в следующей записываем) - всё заработало в расчётном режиме, то есть число на надписи инкрементировалось ~13 раз в секунду. Кто-нибудь может предположить, отчего так происходит, что одновременное чтение и запись так сильно тормозят программу? Работать-то оно хорошо теперь работает, но хотелось бы понять причину, да и не люблю в программе лишние костыли.
Второй вопрос следующий. Какой функцией можно проверить, подключён ли ПЛК к компьютеру по сети, доступен ли для "общения"? Просто хочу по запуску программы запускать некую функцию типа CheckCommunication, и если ПЛК подключён, то сигнализировать об этом опредённым текстом и цветом надписи, иначе выводить сообщение об ошибке. Сейчас же не нашёл ничего подобного. Таймауты компонента пробовал ставить разными (все три), ничего не получилось. При попытке чтения/записи переменных ПЛК, когда он физически не подключен, функция не возвращает 0 (как должно быть, судя по исходникам компонента мастера) по таймауту, а наглухо вешает программу. Другого способа проверить состояние соединения не знаю. Понимаю, что не хватает знаний, но голова уже замылена этим вопросом, возможно решение где-то наверху, а не вижу. Помогите, пожалуйста, советом.
Встречал где-то здесь (вроде бы в этой теме, или в подобной) упоминание о том, что кто-то использует самописные функции для связи по ModBus TCP. Подобный пример нашёл на просторах интернета, подключил, откомпилировал программу, всё хорошо, ошибок нет, но при попытке чтения/записи программа вылетает с аксесс виолейшен.
Всё идёт к тому, чтобы разбираться поглубже в modbus tcp и писать свои функции или минимальный компонент. Но не хочется изобретать велосипед, к тому же вдруг это уже есть. Как хорошо сказал АWА1971 - "Давайте делиться наработками!" Свои я уже выкладывал, и выложу то, что получилось на этот раз, если кому-то будет интересно.