This is topic Передача из HEX32 в формате UDINT in forum Мониторы Реального Времени / Real Time Monitors at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/35/t/000293.html

Posted by Сергей Морозов (Участник № / Member № 2076) on :
 
По ОРС принимаю из контроллера число в формате UDINT, все разряды значащие, младшие разряды потерять нельзя, т.е. real не подходит.
В любом другом варианте не могу получить правильное отображение значения. Показательный пример: 7F FF FF FF (+2147483647) отображается как -2147483648. При этом младшие разряды явно теряются: при изменении входного значения в младшем разряде, все равно отображается -2147483648.
Пробовал использовать каналы HEX32, DF не помогает, пробовал всячески преобразовывать - безрезультатно.
Данные принимаются правильно - значение канала HEX32 в формате "по умолчанию" отображается правильно. Проверял в профайлерах 6.06, 6.07, 6.08.

[ 14.08.2012, 12:45: Сообщение отредактировал / Message edited by AdAstra Technical Support ]
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Для отображения значения канала HEX32 на экране в формате UDINT достаточно задать именно такой тип аргумента и задать формат отображения в ГЭ "Текст"

Generic %u
(см."Приложениея/Форматы/Формат Си вывода чисел").
Проверено в 6.08.
 
Posted by Сергей Морозов (Участник № / Member № 2076) on :
 
Извините, неправильно сформулировал основную проблему, вопрос по отображении возник в процессе.
Изначальная проблема - не могу корректно передать в базу данных число UDINT, полученное от контроллера. Без проблем передается диапазон от 0 до 9, дальше или не передается вовсе или искажается. Без проблем можно передать в текстовое поле в формате HEX, но желательно получить в базе целое десятичное число.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
В отличие от остальных передач в аргументы запроса SQL передаются строковые выражения.
Канал HEX32 имеет только 2 формата:
- по умолчанию - HEX,
- при установленном флажке DEC - DINT.
Необходимо осуществить преобразование форматов. При привязке к экрану по указанной выше методике преобразование осуществляет экран.
Вам придется организовать пересылку значения канала HEX32 (по умолчанию) в аргумент SQL-запроса в формате UDINT.
Это можно выполнить либо программно, либо с помощью канала CALL.MOVE.
 
Posted by Сергей Морозов (Участник № / Member № 2076) on :
 
Создаю канал HEX32, привязываю его к источнику;
создаю канал CALL.MOVE с аргументами IN и OUT, оба UDINT;
IN канала CALL.MOVE привязываю к реальному значению канала HEX32;
в базе данных создаю поле типа длинное целое, с плавающей точкой двойной точности или текстовое;
создаю запрос, привязываю поле базы к аргументу OUT канала CALL.MOVE.
В результате:
в версии 6.06 числа с единицей в старшем разряде в базу данных пишутся как отрицательные (для любого типа поля базы данных);
в версии 6.08 все пишется правильно (кроме поля базы "длинное целое"), но мне очень желательно добиться результата в версии 6.06.
Можно как то решить проблему?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
"В версии 6.08 все пишется правильно (кроме поля базы "длинное целое")"

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

Необходимо обновить релиз до 6.08.
 
Posted by Сергей Морозов (Участник № / Member № 2076) on :
 
Спасибо, в 6.08 "длинное целое" заработало после удаления-повторного создания CALL.MOVE.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2