Спасибо, попробую разобраться
Может, подскажете ответ? Пытаюсь реализовать чтение файла, ответ, судя по всему, приходит, но ОРС сервер пишет "таймаут ответа". Что может быть не так?
Спасибо, попробую разобраться
Может, подскажете ответ? Пытаюсь реализовать чтение файла, ответ, судя по всему, приходит, но ОРС сервер пишет "таймаут ответа". Что может быть не так?
Вы имеете ввиду какую-то собственную конфигурацию или же нашу конфигурацию для чтения файлов из ПЛК?
Посмотрите лог запросов - действительно ли контроллер отвечает на запрос.
Спасибо.
Код собственный на базе примеров из справки
Самая забавная вещь в том, что в логе запросов нет никаких ответов
А в логе промежуточного GPRS модема есть
При подключении напрямую всё выглядит точно так же
Родная программа напрямую работает, через GPRS модем с горем пополам тоже (таймауты слишком маленькие, но констатировать факт обмена пакетами можно)
Лучше все таки создавать новые темы.
Для начала вам лучше попытаться соединится с устройством напрямую, а уже после того как все отладите начинайте работать через GPRS модем.
В случае с GPRS модема возможно потребуется увеличение межсимвольного таймаута (в настройках узла) и время ожидания ответа.
Спасибо.
Прошу прощения
Прошу модератора разделить тему
Программа не работает ни через модем, ни напрямую.
Межсимвольный и таймаут увеличены, опрос каналов проходит успешно.
Что у вас за устройство?
Приложите конфигурацию ОРС сервера и лог запросов и ответов. Для этого в настройках ОРС сервера, в свойствах сервера включите запись журнала и всех событий журнала, запустите режим исполнения и воспроизведите ошибку. Файл запишется в папку
c:\Documents and Settings\All Users\Application Data\InSAT\MasterOPC Universal Modbus Server\SERVERLOGS\
Также пришлите несколько скриншотов.
Спасибо.
Устройство - МСД-200
Предупреждая вопрос, в коде встретите комментарий насчёт некорректной работы с порядком байт, сейчас объясню.
Если сделать любой запрос со значением, например, 1000000 и его маской uint32:3210, отправлено будет 00 0F 42 0F, а не 00 0F 42 40
Устройство почему то не отвечает на запрос. Вот часть из лога:
[05.11.2013 8:17:27.437] Information : Запрос 7:МСД-200:EXT_FUNCTION
[05.11.2013 8:17:27.437] TRACE : (COM5) Tx: [0034] 10 47 03 1C 00 00 00 01 5C 32 30 31 33 5F 30 38 5C 32 30 31 33 5F 30 38 5F 33 30 2E 63 73 76 00 DB 23
[05.11.2013 8:17:28.484] Error : Превышение таймаута МСД-200:EXT_FUNCTION
[05.11.2013 8:17:28.484] Information : Запрос 7:МСД-200:EXT_FUNCTION
[05.11.2013 8:17:28.484] TRACE : (COM5) Tx: [0034] 10 47 03 1C 00 00 00 01 5C 32 30 31 33 5F 30 38 5C 32 30 31 33 5F 30 38 5F 33 30 2E 63 73 76 00 DB 23
[05.11.2013 8:17:29.515] Error : Превышение таймаута МСД-200:EXT_FUNCTION
[05.11.2013 8:17:29.515] Information : Запрос 7:МСД-200:EXT_FUNCTION
[05.11.2013 8:17:29.515] TRACE : (COM5) Tx: [0034] 10 47 03 1C 00 00 00 01 5C 32 30 31 33 5F 30 38 5C 32 30 31 33 5F 30 38 5F 33 30 2E 63 73 76 00 DB 23
[05.11.2013 8:17:30.531] Error : Превышение таймаута МСД-200:EXT_FUNCTION
[05.11.2013 8:17:30.640] Information : Порт 5 закрыт
[05.11.2013 8:17:30.640] Error : Порт 5 не открыт !
А после этого порт уже не открывается.
Там в примечании к МСД-100 говорится:
"при передаче, если длина пакета получилась четной, в конце пакета, после CRC, добавляем дополнительный байт 0х00"
У вас как раз четное число, возможно проблема связана с этим.
Спасибо.
Самая забавная вещь в том, что промежуточный GPRS модем в логе отмечает, что МСД-200 отвечает на запрос
Плюс к тому запрос не кратен 64 байтам
Плюс к тому я пробовал слать различные запросы
10 47 03 1C 00 00 00 00 5C 32 30 31 33 5F 30 38
5C 32 30 31 33 5F 30 38 5F 33 30 2E 63 73 76 00
8F DA10 47 03 1D 00 00 00 00 5C 32 30 31 33 5F 30 38
5C 32 30 31 33 5F 30 38 5F 33 30 2E 63 73 76 00
00 9A F4Ни на один программа ответа не получила10 47 03 1C 00 00 00 00 5C 32 30 31 33 5F 30 38
5C 32 30 31 33 5F 30 38 5F 33 30 2E 63 73 76 00
8F DA 00 00 00
Как мы вам писали ранее, лучше сначала пробовать без GPRS модема. В описании сказано что нужно прибавлять еще один байт не к пакетам кратным 64 байтам, а к любым четным.
Попробуйте также выполнить пробный запрос не функцией modbus.ExtFunction, а функцией server.SendAndRecieveDatabyMask. Она настраивается примерно аналогично (нужно будет только адрес устройства указать). Тем более что учитывая нюанс про дополнительный байт функцию ExtFucntion вы использовать не сможете (контрольная сумма не будет вычисляться).
Спасибо.