Вывод отрицательного числа в поле вывода

Вопросы, не попадающие в другие разделы.

Вывод отрицательного числа в поле вывода

Сообщение npp » Ср май 15, 2019 3:03 pm

Задача: Отобразить в СКАДЕ параметры прибора-анализатора питающей сети РПМ-416.

Проблема: В СКАДЕ (в текстовом поле вывода) неправильно отображается отрицательное число.

Реализация: СКАДА InTouch ME с прибором связывается с помощью драйвера MOTCP (ModBus TCP).

Скрины (проблемный тэг выделен красным):
tags.jpg
Тэги проекта
(469.8 КБ) Скачиваний: 0

drive.jpg
Тэги драйвера MOTCP (ModBus TCP)
(424.67 КБ) Скачиваний: 0

motcp.jpg
Описание драйвера MOTCP (ModBus TCP)
(495.29 КБ) Скачиваний: 0

int.jpg
Описание типа данных INT в InTouch ME
(166.19 КБ) Скачиваний: 0
Вложения
pole.jpg
Поле вывода тэга
(558.04 КБ) Скачиваний: 0
npp
 
Сообщения: 27
Зарегистрирован: Пт июн 08, 2018 1:27 pm

Re: Вывод отрицательного числа в поле вывода

Сообщение npp » Ср май 15, 2019 3:23 pm

Нюансы:

1. Требуемый параметр (минимальное напряжение) имеет отрицательное значение. В приборе он хранится в 32битном регистре (по 16 бит в адресах 114 и 115).

2. Читаю параметр через драйвер ModBus TCP с атрибутом DWSW, что означает
32-bit Integer Value (Holding Register): Read and write 32-bit integer values using two consecutive Holding Registers with Word Swap
ПО-русски: 32-разрядное целочисленное значение (регистр хранения): считывание и запись 32-разрядных целочисленных значений с использованием двух последовательных регистров хранения с помощью Word Swap. (это обмен местами старшего и младшего слова).

3. Дополнительно читаю из прибора требуемый параметр не целиком, а пословно с атрибутом X4 (см. тэги WORD_High и WORD_Low) - содержимое выглядит вроде как и должно быть.

4. Так почему 32-битное число тэга RPM_CH1_UMIN отображается в поле вывода без учёта знака "минус", который определяется крайним битом старшего слова?

5. Если тэг RPM_CH1_UMIN объявить типом "ВЕЩЕСТВЕННЫЙ" (64 бита), а не "ЦЕЛОЕ" (32 бита) то в поле вывода мы увидим нормальное такое 64-битное значение 4 294 967 295, которое говорит о том, что крайний бит старшего слова равен таки "1", что свидетельствует об отрицательном значении 32-битного числа.
npp
 
Сообщения: 27
Зарегистрирован: Пт июн 08, 2018 1:27 pm

Re: Вывод отрицательного числа в поле вывода

Сообщение Генератор зла » Ср май 15, 2019 4:28 pm

IF RPM_CH1_UMIN >32766 THEN RPM_CH1_UMIN = ((RPM_CH1_UMIN - 65534) + 1); ENDIF;
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

Re: Вывод отрицательного числа в поле вывода

Сообщение npp » Ср май 15, 2019 5:43 pm

О, благодарю, я это понимаю, только у нас не FFFE(h), а FFFF FFFE(h). 32 бита же.

Я не про это хотел спросить, а где у Интача МЕ галочка "Отобразить правильно отрицательное число"?
А главный вопрос - почему InTouch МЕ не отображает так, как это должно быть по логике?

Вот лежит в тэге типа INTEGER (читай выделенной памяти) Интача 32-битное отрицательное число, записанное туда драйвером связи. Лежит правильно с точки зрения документации и стандартов типов данных.

Почему поле выводит число в формате UInt, хотя тип тэга явно указан Int?

Либо я что-то не так понимаю, либо где-то есть соответствующая настройка поля, либо это баг Интача.

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

Если других решений нет, то подскажите, куда именно вписать скрипт преобразования, чтобы он работал непрерывно для постоянного отображения значения на экране СКАДы. :roll:
npp
 
Сообщения: 27
Зарегистрирован: Пт июн 08, 2018 1:27 pm

Re: Вывод отрицательного числа в поле вывода

Сообщение Генератор зла » Ср май 15, 2019 6:04 pm

npp писал(а):О, благодарю, я это понимаю, только у нас не FFFE(h), а FFFF FFFE(h). 32 бита же.

Ну, можно добавить ещё оператор AND 0000FFFFh
npp писал(а):Я не про это хотел спросить, а где у Интача МЕ галочка "Отобразить правильно отрицательное число"?

Нет в InTouch ME такой кнопки
npp писал(а):А главный вопрос - почему InTouch МЕ не отображает так, как это должно быть по логике?

Сперва необходимо разобраться, чей косяк: сервера в/в или InTouch ME. М.б. InTouch ME уже получает число в формате Unsigned Int ?
npp писал(а):Если других решений нет, то подскажите, куда именно вписать скрипт преобразования, чтобы он работал непрерывно для постоянного отображения значения на экране СКАДы.

Tasks - Math worksheet
Tasks - Scheduler worksheet
Vita est dolor.
Генератор зла
 
Сообщения: 2860
Зарегистрирован: Вс янв 23, 2011 5:08 pm

Re: Вывод отрицательного числа в поле вывода

Сообщение npp » Ср май 15, 2019 7:18 pm

Сперва необходимо разобраться, чей косяк: сервера в/в или InTouch ME. М.б. InTouch ME уже получает число в формате Unsigned Int ?


Что значит "получает число в формате"? Получает только число, а формат числа определяет сам InTouch ME (точнее я задаю формат в свойствах тэга), что должно определять дальнейшее поведение математики InTouch ME - учитывать знак или нет в своих расчётах, показывать минус в окне или нет.

А вдруг драйвер ModBus TCP тайно меняет атрибут тэга RPM_CH1_UMIN с Int на UInt, хотя явно у InTouch ME типа Uint нету. Что вообще здесь происходит? :cry:
Это тупик.
npp
 
Сообщения: 27
Зарегистрирован: Пт июн 08, 2018 1:27 pm


Вернуться в Другое

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

cron