![]() |
Real_int |
Ответить ![]() |
Автор | |
![]() Новичок ![]() ![]() Присоединился: 12 Февраль 2008 Категория: Ukraine Online Status: Offline Публикации: 3 |
![]() ![]() ![]() ![]() Опубликовано: 12 Февраль 2008 17:52 |
Уважаемые, кто работает на ST под WINCON 8337
и может разложить по полочкам что делают функции real_int и Int_Real Что означает фраза map real to long int. Необходимо real перевести в integer и такая чепуховая операция вызывает головную боль Спасибо за помощь |
|
Дехтярь
|
|
![]() |
|
![]() Действительный член ![]() ![]() Присоединился: 27 Июль 2006 Online Status: Offline Публикации: 304 |
![]() ![]() ![]() ![]() |
Фраза означает то, что область памяти, в которой хранятся данные типа 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 вам поможет :) |
|
Теория - это когда все знаешь, но ничего не работает.
Практика - это когда все работает, но никто не знает как. |
|
![]() |
|
![]() Новичок ![]() ![]() Присоединился: 12 Февраль 2008 Категория: Ukraine Online Status: Offline Публикации: 3 |
![]() ![]() ![]() ![]() |
Спасибо большое за четкий ответ Все понятно относительно map. >Насколько я понимаю, вам просто нужно перевести число из формата >INTEGER в REAL или наоборот. Да именно так. Все расчеты выполняются в real. И-за проблем с адресацией real при отображении через S_MB_ADR(1,100,1) на Modbus принято решение о переходе на integer массивы. Поэтому и предполагалось используеть активно real_int. Вот здесь и начинаются муки. Не видно как в ST выполнить такую операцию.Документация досконально просмотрена, но увы. >Это делается стандартными функциями ISaGRAF, нет нужды лезть в >фирменные функции ICP DAS. Синтаксис, если не изменяет память, >такой: Нет такой функции?Есть long_wd. но это не работает под ST :( |
|
Дехтярь
|
|
![]() |
|
![]() Действительный член ![]() ![]() Присоединился: 27 Июль 2006 Online Status: Offline Публикации: 304 |
![]() ![]() ![]() ![]() |
Я тоже в свое время наткнулся на эту проблему. Писал китайцам на счет баги в функции S_MB_ADR - они выслали мне версию таргета, в которой специально пофиксили эту проблему (таргет под 8437 кстати). Но они не включили этот фикс в основную линейку релизов! Поэтому ценность этого "подарка" равна нулю. В дальнейшем они фиксили ряд других багов, добавляли функции - и что мне, при каждом новом релизе просить компилировать версию для меня с исправленной S_MB_ADR?
Поэтому я пошел тем же путем, что и вы и распихал float по integer-массивам. Пользовался функциями real_int и SHR. Все работало. Кстати, на одном из форумов, на котором вы задавали данный вопрос, я уже приводил решение этой проблемы. Хотелось бы также попросить вас обратиться с просьбой пофиксить S_MB_ADR в ICP DAS. Возможно, они не хотят вносить существенные изменения, способные повлиять на работу проектов, по просьбе только одного клиента. А если обратится несколько человек, они внесут изменение в основную линейку релизов. |
|
Теория - это когда все знаешь, но ничего не работает.
Практика - это когда все работает, но никто не знает как. |
|
![]() |
|
![]() Новичок ![]() ![]() Присоединился: 12 Февраль 2008 Категория: Ukraine Online Status: Offline Публикации: 3 |
![]() ![]() ![]() ![]() |
Спасибо за помощь. Вопрос закрыт. Оказывается есть в документации (isagraf.pdf) стандартный оператор ANA, который и выполняет нужную функцию. При поставке Wincon 8337 с документацией эта дока не комплектуется.Вот и приходится "долбаться" и ... |
|
Дехтярь
|
|
![]() |
Ответить ![]() |
Переход на форум | Права доступа на форуме ![]() Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |