Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Проблемы при записи числа с плавающей запятой в ОРС сервер  (Прочитано 6053 раз)

Greeds74

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
День добрый!
Сейчас работаем над записью чисел с плавающей запятой в ОРС сервер. Число 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.

С уважением,Михаил.
« Изменён: 02 Июня 2017, 09:07:17 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Здравствуйте.

Simple-Scada одинаково работает со всем OPC-серверами и типами данных, в соответствии со спецификацией OPC-DA. За все время работы с большим количеством OPC-серверов подобных проблем с присвоением не наблюдалось. Вы уверены, что ничего не напутано с типами данных? В скаде у переменной выбран тип данных Single, на OPC-сервере также Single (на некоторых OPC-серверах он называется Float) (вещественно число, со знаком, 4 байта)?

Как тег был добавлен в скаду? Импортом с OPC-сервера, или просто в скаде "вручную" была создана переменная?
Если пытаться присваивать не 12.7, а целое 12, то ситуация такая же?

Greeds74

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
Формат правильный - более чем уверен.
Тег добавлен путём импорта из ОРС сервера.
Давайте теперь попробуем записать 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 - а это верно.
С уважением,Михаил.
« Изменён: 02 Июня 2017, 09:08:08 от Simple-Scada »

Greeds74

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
Добавлю немного... Пишем 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.
« Изменён: 02 Июня 2017, 09:08:45 от Simple-Scada »

Greeds74

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
Уже вечер добрый!
Для облегчения понимания проблемы во вложении XML файл конфигурации ОРС сервера. Можете посмотреть - никакой ошибки в конфиге нет. Работаем с переменной COM2.TP-PLC2.SP_T1 -  у неё тип данных VT_R4 и права доступа RW - чтение/запись.
Завтра архивом  обнародую тестовый проект.
Поверьте - решить эту проблему я могу запросто, напишу простенького ОРС клиента только для записи переменных и всё - буду запускать по кнопке.
Но эти костыли могут жутко не понравится заказчику - вы уж знаете, народ привередливый. Могут потребовать отказаться от системы с костылями!
Если что ещё вам необходимо - без проблем, пишите. Давайте работать - тем более, что и вы продукт улучшаете, и я не буду прыгать с Genesis32 на WinCC .
С уважением,Михаил.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Цитировать
Давайте работать - тем более, что и вы продукт улучшаете, и я не буду прыгать с Genesis32 на WinCC .
Мы всегда рады что-то улучшить в нашем ПО, только неясно что исправлять? Проверили с OPC-серверами arOPC, Lectus, KepServerEx, Kassl, InSAT, Advosol, Owen. Работает со всеми перечисленными и с любыми типами данных, целочисленными, вещественными, строковыми. Почему OPC-сервер Complex Systems работает с запросом на присвоение не так как остальные OPC-серверы, пока остается загадкой. Запрос одинаковый для всех. И почему запрос проходит через Matricon OPC explorer пока также трудно сказать.

Во вложении стандартный Explorer от немецкого разработчика Kassl. Проверьте, с ним присвоения проходят? Инструкции ниже:
  • распаковать архив и запустить .exe файл, в первом окне нажать "Ок";
  • выбрать пункт меню "File" - "New server";
  • в открывшемся окне выбрать OPC-сервер из списка и нажать "Ок";
  • OPC-сервер отобразится в дереве серверов в левой части окна;
  • раскрыть дерево OPC-сервера и найти тег в который нужно провести запись;
  • кликнуть правой кнопкой мыши по тегу и выбрать пункт "Write value";
  • ввести значение в поле "New value" и нажать кнопку "F4 = Set";
  • прошла ли запись?
« Изменён: 03 Июня 2017, 21:39:40 от Simple-Scada »

Greeds74

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
День добрый!
Итак - всё по вашей инструкции. Вот что летит в порт:
Код
Запрос: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                           .......ÿ

Записано некорректное значение. Итак - что делаем дальше? Со своей стороны я могу подключиться через другой ОРС сервер
С уважением,Михаил.
« Изменён: 02 Июня 2017, 09:09:47 от Simple-Scada »

Greeds74

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
Итак - в качестве тестового использую 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 проходит без проблем. Какие дальнейшие шаги мы можем предпринять?

С уважением,Михаил.
« Изменён: 02 Июня 2017, 09:11:06 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Отлично. Теперь тот же Kassl, но более приближенный к скаде тест с группой и разными типами записи. Инструкции:
  • распаковать архив и запустить .exe файл;
  • выбрать пункт меню "File" - "Connect to server" и выбрать OPC-сервер;
  • перейти на вкладку "Inspector";
  • кликнуть ПКМ в левой части окна и выбрать пункт "Add group";
  • ввести название группы, например "group1", остальные параметры без изменений и нажать "Ок";
  • кликнуть ПКМ в правой части окна и выбрать пункт "Add item". В открывшемся окне выбрать тег в который нужно проводить запись;
  • после этого тег появится в списке. Если кликнуть по нему ПКМ, то можно увидеть два способа присвоения "Sync Write Value" (синхронный) и "ASync Write Value" (асинхронный);
  • попробуйте оба варианта. Оба работают?

Также пришлите проект скады, чтобы мы могли убедиться что в нем все корректно.

Greeds74

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
День добрый!
Всё по вашим инструкциям - попытка записи приводит к передаче некорректного значения.
Во вложении скриншоты операций до и после. Также тестовый проект - Helio.zip.
С уважением,Михаил.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Цитировать
попытка записи приводит к передаче некорректного значения.
Т.е. запись проходит некорректно и синхронным способом и асинхронным? Так ли это?

Greeds74

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
Да - и в том, и в другом случае результат один и тот же.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Вот и вся разница. dOPCExplorer, который успешно меняет значение и dOPCDAClient, который работает "некорректно", это одна и та же программа от одного разработчика, но только в первом случае работа идёт с тегом "сразу", а во втором сначала создается группа со своей частотой опроса и тег добавляется в неё. OPC-сервер должен одинаково работать в двух вариантах, как это делают остальные OPC-серверы. Но, судя по тестам Complex System OPC работает с ними по-разному. Может у него есть проблемы при работе с разной частотой опроса? А может быть Complex System OPC делает разницу ещё в чем-то, что мы упускаем из виду, но сути это не меняет.
« Изменён: 03 Июня 2017, 21:40:43 от Simple-Scada »

Greeds74

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
Меня если честно тоже эта ситуация немного удивляет.Что касается работы сервера - то вот приведу лог обмена, где виден кусок команды записи значения

Код
Запрос: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                                    ...ÛÛ
Запись с точки зрения протокола производится безупречно - а вот почему значения некорректные передаются, для меня большой вопрос.Кстати - читает чётко, только при записи возникают вот такие непонятности. Для других типов данных та же ситуация.
Если у вас есть идеи, куда копать дальше - давайте, будем продолжать.
С уважением,Михаил.

Greeds74

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
В данной ситуации будет единственно правильным выбором будет замена ОРС сервера на другой. В противном случае время будет просто потрачено зря.
Огромное спасибо специалистам из службы поддержки за консультации.
С уважением,Михаил.