Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > Программное обеспечение
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

Real_int

 Ответить Ответить
Автор
Сообщение
dehtyar Смотреть выпадающим
Новичок
Новичок
Аватар

Присоединился: 12 Февраль 2008
Категория: Ukraine
Online Status: Offline
Публикации: 3
Свойства публикации Свойства публикации   Ответить, цитируя автора - dehtyar Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: Real_int
    Опубликовано: 12 Февраль 2008 17:52
Уважаемые, кто работает на ST под WINCON 8337
и может разложить по полочкам что делают функции
real_int и Int_Real
Что означает фраза map real to long int.
Необходимо real перевести в integer и такая чепуховая операция вызывает головную боль
Спасибо за помощь
Дехтярь
Наверх
MuadDib Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 27 Июль 2006
Online Status: Offline
Публикации: 304
Свойства публикации Свойства публикации   Ответить, цитируя автора - MuadDib Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 13 Февраль 2008 05:52
Фраза означает то, что область памяти, в которой хранятся данные типа REAL (float в терминологии ANSI C) будет рассматриваться так, как если бы там лежал long int.
float - 32 бита данных. Из них один указывает знак числа, остальные особым образом формируют само число. long - это просто 32-битное знаковое целое. Поэтому, если применить real_int к любому числу, вы получите полуную "раскладку по битам" float-представления данного числа. Нужно это бывает, например, при работе с удаленными устройствами по протоколу Modbus: регистр данного протокола содержит 16-битное целое. Для того, чтобы передать float, понадобится применить real_int, а затем передать полученное целое через 2 регистра.
Насколько я понимаю, вам просто нужно перевести число из формата INTEGER в REAL или наоборот. Это делается стандартными функциями ISaGRAF, нет нужды лезть в фирменные функции ICP DAS. Синтаксис, если не изменяет память, такой:
int_var := INTEGER(real_var);
ISaGRAF под руками нет, уточнить не могу, поэтому help вам поможет :)
Теория - это когда все знаешь, но ничего не работает.
Практика - это когда все работает, но никто не знает как.
Наверх
dehtyar Смотреть выпадающим
Новичок
Новичок
Аватар

Присоединился: 12 Февраль 2008
Категория: Ukraine
Online Status: Offline
Публикации: 3
Свойства публикации Свойства публикации   Ответить, цитируя автора - dehtyar Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 13 Февраль 2008 12:59

Спасибо большое за четкий ответ

Все понятно относительно map.

>Насколько я понимаю, вам просто нужно перевести число из формата >INTEGER в REAL или наоборот.

Да именно так. Все расчеты  выполняются в real. И-за проблем с

адресацией real при отображении через S_MB_ADR(1,100,1) на Modbus

принято решение о переходе на integer массивы. Поэтому и предполагалось используеть активно  real_int.

Вот здесь и начинаются муки. Не видно как в ST выполнить такую операцию.Документация досконально просмотрена, но увы.

>Это делается стандартными функциями ISaGRAF, нет нужды лезть в >фирменные функции ICP DAS. Синтаксис, если не изменяет память, >такой:
>int_var := INTEGER(real_var);

Нет такой функции?Есть long_wd. но это не работает под ST :(

>ISaGRAF под руками нет, уточнить не могу, поэтому help вам поможет :)


Дехтярь
Наверх
MuadDib Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 27 Июль 2006
Online Status: Offline
Публикации: 304
Свойства публикации Свойства публикации   Ответить, цитируя автора - MuadDib Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 13 Февраль 2008 16:47
Я тоже в свое время наткнулся на эту проблему. Писал китайцам на счет баги в функции S_MB_ADR - они выслали мне версию таргета, в которой специально пофиксили эту проблему (таргет под 8437 кстати). Но они не включили этот фикс в основную линейку релизов! Поэтому ценность этого "подарка" равна нулю. В дальнейшем они фиксили ряд других багов, добавляли функции - и что мне, при каждом новом релизе просить компилировать версию для меня с исправленной S_MB_ADR?
Поэтому я пошел тем же путем, что и вы и распихал float по integer-массивам. Пользовался функциями real_int и SHR. Все работало. Кстати, на одном из форумов, на котором вы задавали данный вопрос, я уже приводил решение этой проблемы.
Хотелось бы также попросить вас обратиться с просьбой пофиксить S_MB_ADR в ICP DAS. Возможно, они не хотят вносить существенные изменения, способные повлиять на работу проектов, по просьбе только одного клиента. А если обратится несколько человек, они внесут изменение в основную линейку релизов.
Теория - это когда все знаешь, но ничего не работает.
Практика - это когда все работает, но никто не знает как.
Наверх
dehtyar Смотреть выпадающим
Новичок
Новичок
Аватар

Присоединился: 12 Февраль 2008
Категория: Ukraine
Online Status: Offline
Публикации: 3
Свойства публикации Свойства публикации   Ответить, цитируя автора - dehtyar Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 13 Февраль 2008 16:50

Спасибо за помощь.

Вопрос закрыт.

Оказывается есть в документации (isagraf.pdf) стандартный оператор

ANA, который и выполняет нужную функцию.

При поставке Wincon 8337 с документацией эта дока не комплектуется.Вот и приходится "долбаться" и ...

Дехтярь
Наверх
 Ответить Ответить

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz