PDA

Просмотр полной версии : Чтение архивов



SokolovS
04.11.2013, 14:04
Спасибо, попробую разобраться
Может, подскажете ответ? Пытаюсь реализовать чтение файла, ответ, судя по всему, приходит, но ОРС сервер пишет "таймаут ответа". Что может быть не так?

SCADAMaster
04.11.2013, 16:24
Вы имеете ввиду какую-то собственную конфигурацию или же нашу конфигурацию для чтения файлов из ПЛК?
Посмотрите лог запросов - действительно ли контроллер отвечает на запрос.

SokolovS
04.11.2013, 16:35
Код собственный на базе примеров из справки
Самая забавная вещь в том, что в логе запросов нет никаких ответов
А в логе промежуточного GPRS модема есть
При подключении напрямую всё выглядит точно так же
Родная программа напрямую работает, через GPRS модем с горем пополам тоже (таймауты слишком маленькие, но констатировать факт обмена пакетами можно)

SCADAMaster
04.11.2013, 16:49
Лучше все таки создавать новые темы.
Для начала вам лучше попытаться соединится с устройством напрямую, а уже после того как все отладите начинайте работать через GPRS модем.
В случае с GPRS модема возможно потребуется увеличение межсимвольного таймаута (в настройках узла) и время ожидания ответа.

SokolovS
04.11.2013, 17:40
Прошу прощения
Прошу модератора разделить тему

Программа не работает ни через модем, ни напрямую.
Межсимвольный и таймаут увеличены, опрос каналов проходит успешно.

SCADAMaster
04.11.2013, 17:54
Что у вас за устройство?
Приложите конфигурацию ОРС сервера и лог запросов и ответов. Для этого в настройках ОРС сервера, в свойствах сервера включите запись журнала и всех событий журнала, запустите режим исполнения и воспроизведите ошибку. Файл запишется в папку
c:\Documents and Settings\All Users\Application Data\InSAT\MasterOPC Universal Modbus Server\SERVERLOGS\
Также пришлите несколько скриншотов.

SokolovS
05.11.2013, 09:36
Устройство - МСД-200
Предупреждая вопрос, в коде встретите комментарий насчёт некорректной работы с порядком байт, сейчас объясню.
Если сделать любой запрос со значением, например, 1000000 и его маской uint32:3210, отправлено будет 00 0F 42 0F, а не 00 0F 42 40

SCADAMaster
05.11.2013, 11:10
Устройство почему то не отвечает на запрос. Вот часть из лога:
[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"
У вас как раз четное число, возможно проблема связана с этим.

SokolovS
05.11.2013, 11:24
Самая забавная вещь в том, что промежуточный 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 DA

10 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
Ни на один программа ответа не получила

SCADAMaster
05.11.2013, 11:49
Как мы вам писали ранее, лучше сначала пробовать без GPRS модема. В описании сказано что нужно прибавлять еще один байт не к пакетам кратным 64 байтам, а к любым четным.

Попробуйте также выполнить пробный запрос не функцией modbus.ExtFunction, а функцией server.SendAndRecieveDatabyMask. Она настраивается примерно аналогично (нужно будет только адрес устройства указать). Тем более что учитывая нюанс про дополнительный байт функцию ExtFucntion вы использовать не сможете (контрольная сумма не будет вычисляться).

SokolovS
05.11.2013, 12:47
При использовании SendAndRecieveDatabyMask в логе запросов есть ответ на любой из запросов выше.

SCADAMaster
05.11.2013, 14:18
У вас используется версия 2.0.0.12. Попробуйте установите текущую версию 2.0.0.16 - была подобная ошибка, и мы ее исправляли.
Однако, как мы писали ранее, использовать ExtFunction у вас для данного прибора не получится - так как контрольная сумма будет вычислять не верно. Нужно будет использовать SendAndRecieveDatabyMask, и контрольную сумму считать вручную.

SokolovS
05.11.2013, 14:26
Планируется работа по 485му интерфейсу, закрывать ошибки работы по USB нет смысла
Попробую обновить сервер, спасибо
Навскидку, не скажете, победили там проблему с порядком байт?

SokolovS
05.11.2013, 15:03
2.0.0.16, изменений нет

SCADAMaster
05.11.2013, 16:08
Ошибка с чередованием байт в текущей версии все еще присутсвует - мы ее исправим, но не в ближайшей версии.
Пришлите нам логи одинаковых запросов при работе с функциями SendAndReciveDataByMask и ExtFunction, и конфигурации - мы сравним их.

SokolovS
05.11.2013, 16:37
Пожалуйста, вот логи и конфигурация
Код не причёсан, но убедиться в разнице работы функций можно, при запуске делает два одинаковых запроса разными функциями, один успешный, другой нет.

SCADAMaster
05.11.2013, 17:02
Мы сравнили два запроса в первом и втором случае, запросы отличаются:
[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 15:34:04.859] TRACE : (COM5) Tx: [0034] 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
Возможно устройство не отвечает на такой запрос. Попробуйте сделать идентичные запросы.

SokolovS
05.11.2013, 17:25
Косяк
Это рудимент от проб с порядком байт
С одинаковыми та же песня

SCADAMaster
05.11.2013, 19:32
Мы нашли ошибку приводящую к этому поведению. Ошибка будет исправлена в следующей версии.
Пока что используйте функцию SendAndReciveDataByMask - по функционалу она идентична.

SokolovS
06.11.2013, 11:28
Спасибо
Ждём

SCADAMaster
06.11.2013, 12:54
Пока что используйте SendAndReciveDataByMask