PDA

Просмотр полной версии : Межсимвольный таймаут OPC-сервера



Roman62rus
21.05.2015, 13:09
Столкнулся со следующей проблемой. Использую две конфигурации OPC-сервера, они почти одинаковые, разница в одном считываемом регистре. Все адреса одинаковые, контроллеры одинаковые, в общем, всё одинаковое. Но одна конфигурация работает, вторая - нет. Возникает ошибка, причину которой, естественно, сервер не сообщает. Пришлось буквально переписывать на бумагу все параметры обеих конфигураций и сравнивать. Оказалось, что отличие только одно: у работающей конфигурации межсимвольный таймаут "ноль", у неработающей - 15 мс. Изучение справки по OPC-серверу показало, что нулевое значение таймаута - это значение по умолчанию. Значит, 15 мс откуда-то взялось. Углубившись в программу контроллера, удалось выяснить, что именно в ней при инициализации MODBUS устанавливается межсимвольный интервал в 15 мс. Уже хорошо.

Теперь логические выкладки.
1. Известно, что таймаут - это время ожидания, при превышении которого считается, что событие не произошло, и возникает ошибка.
2. Если выставить значение таймаута, большее фактического межсимвольного интервала, то ошибки возникнуть не должно.
3. Если при значении таймаута "ноль" ошибка не возникает, значит, фактическое значение межсимвольного интервала меньше или равно нулю.
4. Если при значении таймаута 15 мс ошибка возникает, значит, фактическое значение межсимвольного интервала больше или равно 15 мс.

Последние два положения противоречат друг другу, поэтому пришлось методом перебора значений таймаута от нуля и до.... выяснять, при каких значениях ошибка будет возникать, а при каких - нет. Оказалось, что работает при нуле и при значениях, больших 15 мс.
Отсюда следует, что при значении "ноль" OPC-сервер вообще не считает, сколько мс проходит между символами, а ждёт до упора. Таким образом, на самом деле это не ноль, а бесконечность. На достижение понимания этого простого посыла ушло 2 часа рабочего времени.

Если бы в справке было нормально описано, что означает нулевой таймаут, да если бы OPC-сервер сообщал, по какой именно причине возникла ошибка! Сколько времени можно было бы сэкономить!

SCADAMaster
21.05.2015, 13:23
На самом деле когда межсивольный таймаут установлен равным нулю, то его значение устанавливается равным 50 мс.
Мы отобразим это в справке

Roman62rus
21.05.2015, 13:29
Спасибо. Это поможет многим.