День добрый!
Сейчас работаем над записью чисел с плавающей запятой в ОРС сервер. Число 4- байтное, тип Single.
ОРС -сервер Complex Systems, протокол Modbus RTU. Simple -scada версия 2.2.1.1.
При попытке записать число 12.7 через ОРС сервер на шину выдается вот такой пакет:
Запрос:6/1/2017 2:10:33 PM.84264 (+0.0313 seconds)
03 10 00 14 00 02 04 00 00 60 00 D0 E8 .........`.Ðè
Ответ:6/1/2017 2:10:33 PM.84264 (+0.0000 seconds)
03 10 00 14 00 02 00 2E
Запись происходит - но число совершенно безумное получается.
Хотя должно быть вот так - правильный вариант:
Запрос:6/1/2017 2:12:20 PM.76864 (+0.0938 seconds)
03 10 00 14 00 02 04 33 33 41 4B 77 C4 .......33AKwÄ
Ответ:6/1/2017 2:12:20 PM.76864 (+0.0000 seconds)
03 10 00 14 00 02 00 2E
Правильная запись получена при записи в сервер значений со стороннего ОРС клиента - Matricon OPC explorer.
При работе со сторонним клиентом операция проходит абсолютно корректно.
Число, передаваемое как Single со скады, в IEEE отображении получается как 6000 0000,
хотя должно быть 414B 3333.
С уважением,Михаил.
Формат правильный - более чем уверен.
Тег добавлен путём импорта из ОРС сервера.
Давайте теперь попробуем записать 12.0 - то есть, в IEEE мы должны передать 4140 0000
Запрос:6/1/2017 3:18:47 PM.76664 (+0.0469 seconds)
03 10 00 14 00 02 04 00 00 00 00 F8 E8 ...........øè
Ответ:6/1/2017 3:18:47 PM.76664 (+0.0000 seconds)
03 10 00 14 00 02 00 2E ........
То есть тут вы пишите 0000 0000 - а это неверно.
Теперь пишем через Matricon OPC explorer
Запрос:6/1/2017 3:20:42 PM.15664 (+0.0000 seconds)
03 10 00 14 00 02 04 00 00 41 40 C9 48 .........A@ÉH
Ответ:6/1/2017 3:20:42 PM.17264 (+0.0156 seconds)
03 10 00 14 00 02 00 2E
Тут, как видите, пишется 4140 0000 - а это верно.
С уважением,Михаил.
Добавлю немного... Пишем 12.21.
Должно быть передано 41435C29
Итак- вот лог пакета и ответ контроллера
Запрос:6/1/2017 3:45:51 PM.43564 (+0.0625 seconds)
03 10 00 14 00 02 04 00 00 20 00 E1 28 ......... .á(
Ответ:6/1/2017 3:45:51 PM.43564 (+0.0000 seconds)
03 10 00 14 00 02 00 2E
В запросе видим 20000000, а это совсем не то значение-1.084202E-19.
День добрый!
Итак - всё по вашей инструкции. Вот что летит в порт:
Запрос:6/2/2017 7:41:40 AM.76164
02 10 00 14 00 02 04 5C 29 41 43 4E 2D .......\)ACN-
Ответ:6/2/2017 7:41:40 AM.76164 (+0.0000 seconds)
02 10 00 14 00 02 01 FF .......ÿ
Как видно, это корректное значение 4143 5С29 равняется 12.21. Во вложении скриншот
Теперь запись из скады того же значения
Запрос:6/2/2017 7:48:52 AM.43664 (+0.0000 seconds)
02 10 00 14 00 02 04 00 00 20 00 E5 D4 ......... .åÔ
Ответ:6/2/2017 7:48:52 AM.43664 (+0.0000 seconds)
02 10 00 14 00 02 01 FF .......ÿ
Записано некорректное значение. Итак - что делаем дальше? Со своей стороны я могу подключиться через другой ОРС сервер
С уважением,Михаил.
Итак - в качестве тестового использую ICONICS Modbus OPC server v3.54. При работе через него происходит корректная запись - ниже лог порта
Запрос:6/2/2017 8:46:54 AM.94664 (+0.6875 seconds)
02 10 00 13 00 02 04 99 9A 41 BD 43 60 .......A½C`
Ответ:6/2/2017 8:46:54 AM.94664 (+0.0000 seconds)
02 10 00 13 00 02 B0 3E
А теперь подключаемся через Complex System OPC -
Запрос:6/2/2017 8:51:53 AM.09064 (+0.0000 seconds)
02 10 00 14 00 02 04 00 00 80 00 9D D4 ..........Ô
Ответ:6/2/2017 8:51:53 AM.09064 (+0.0000 seconds)
02 10 00 14 00 02 01 FF
Как видите, некорректные данные переданы. Во вложении приведены свойства обоих серверов из вашей же утилиты от Kassl. Сервера имеют разную спецификацию - OPC DA 2 и OPC DA 3.
Ещё раз проверил через вашего ОРС клиента - запись через Complex System OPC проходит без проблем. Какие дальнейшие шаги мы можем предпринять?
С уважением,Михаил.
Меня если честно тоже эта ситуация немного удивляет.Что касается работы сервера - то вот приведу лог обмена, где виден кусок команды записи значения
Запрос:6/2/2017 10:28:17 AM.63364 (+0.1094 seconds)
02 03 00 0A 00 40 64 0B .....@d.
Ответ:6/2/2017 10:28:17 AM.66464 (+0.0313 seconds)
02 03 80 00 00 00 00 00 00 00 00 00 00 00 00 00 ...............
00 00 00 00 00 00 00 00 00 00 00 00 00 40 28 00 .............@(.
00 42 18 3B B4 00 00 00 00 00 00 00 00 00 00 00 .B.;´...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 DD ....Ý
Запрос:6/2/2017 10:28:17 AM.71164 (+0.0469 seconds)
02 06 00 1A 3B 84 BB 6D ....;»m
Ответ:6/2/2017 10:28:17 AM.72764 (+0.0156 seconds)
02 06 00 1A 3B 84 BB 6D ....;»m
Запрос:6/2/2017 10:28:17 AM.75864 (+0.0313 seconds)
02 03 00 0A 00 40 64 0B .....@d.
Ответ:6/2/2017 10:28:17 AM.78964 (+0.0313 seconds)
02 03 80 00 00 00 00 00 00 00 00 00 00 00 00 00 ...............
00 00 00 00 00 00 00 00 00 00 00 00 00 40 28 00 .............@(.
00 42 18 3B 84 00 00 00 00 00 00 00 00 00 00 00 .B.;...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 DB DB ...ÛÛ
Запись с точки зрения протокола производится безупречно - а вот почему значения некорректные передаются, для меня большой вопрос.Кстати - читает чётко, только при записи возникают вот такие непонятности. Для других типов данных та же ситуация.
Если у вас есть идеи, куда копать дальше - давайте, будем продолжать.
С уважением,Михаил.