Вверх ↑
Этот топик читают: Гость
Ответов: 34
Рейтинг: -1
#1: 2013-03-30 14:29:38 ЛС | профиль | цитата
Добрый день!

Возникла следующая проблема. Имеем ответ (число в Hex) от Modbus RTU 00 00 41 70, если поменяем слова то получим 41 70 00 00 что согласно http://gregstoll.dyndns.org/~gregstoll/floattohex/ равно 15.0, аналогично записано и в контроллере. В Hiasm не могу сделать схему которая бы преобразовала 00 00 41 70 или 41 70 00 00 в число с запятой. Поиск по форуму дал ссылку на http://www.hiasm.com/xf/topic.php?t=50671&start=0, но решение я так и не нашел.
Заранее спасибо.
карма: 0

0
Ответов: 9906
Рейтинг: 351
#2: 2013-03-30 15:12:07 ЛС | профиль | цитата
Был где-то на форуме элемент DataToFileEx.
Ему - запросто.
А найти чего-то не могу...
[flood]Не могу ничего вспомнить, потому что невозможно наморщить лоб
Будем ждать вспышек памяти, или сведений со стороны[/flood]
------------ Дoбавленo в 15.12:
Свой могу дать

Редактировалось 2 раз(а), последний 2017-08-21 20:02:23
карма: 9

0
Ответов: 8926
Рейтинг: 823
#3: 2013-03-30 15:14:59 ЛС | профиль | цитата
savt, ответ в форме представления числа в машине:
hex2float.jpg
------------ Дoбавленo в 15.14:
Galkov, картинку Вы мне давали, с тех пор нет у меня вопросов
карма: 19

0
файлы: 1hex2float.jpg [56.9KB] [594]
Ответов: 34
Рейтинг: -1
#4: 2013-03-30 16:46:10 ЛС | профиль | цитата
Galkov, Леонид, спасибо за оперативные ответы.
Galkov, если я Вас правильно понял, Вы предлагаете сохранить данные в файл и потом от туда его считать перекодированный ? или в качестве примера кода ?
Леонид, я понимаю про представление числа в машине, если надо я легко могу поменять порядок слов, главное что бы был пример перекодирования с Hex в float. К сожалению моих познаний в Дельфи и в Hiasm пока еще мало для самостоятельного создания компонента. Как бы Hiasm подкупает скоростью разработки и низким порогом вхождения.

Add(MainForm,15944709,203,98)
{
Width=298
Height=165
Position=1
}
Add(Edit,14238792,273,84)
{
Left=10
Top=20
Width=60
Height=24
Font=[Tahoma,12,0,0,204]
Text="00"
Alignment=2
}
Add(Edit,16172125,329,84)
{
Left=80
Top=20
Width=60
Height=24
Font=[Tahoma,12,0,0,204]
Text="00"
Alignment=2
}
Add(Edit,9786081,385,84)
{
Left=150
Top=20
Width=60
Height=24
Font=[Tahoma,12,0,0,204]
Text="41"
Alignment=2
}
Add(Edit,1667591,434,84)
{
Left=220
Top=20
Width=60
Height=24
Font=[Tahoma,12,0,0,204]
Text="70"
Alignment=2
}
Add(Button,11993343,133,273)
{
Left=10
Top=60
Width=270
Height=24
Font=[Tahoma,12,0,0,204]
Caption="Считай"
link(onClick,4382235:doEvent1,[(173,279)(173,272)])
}
Add(Label,614331,476,434)
{
Left=10
Top=100
Width=48
Height=23
Font=[Tahoma,12,0,0,204]
Caption="Ответ"
}
Add(ConvertorEx,3396571,427,434)
{
Mode=10
link(onResult,614331:doText,[])
link(Data,15990991:GetData,[])
}
Add(Stream2Hex,7852571,350,322)
{
Mode=3
link(onResult,15990991:doData,[(404,328)(404,377)])
link(Data,11575485:Result,[])
}
Add(StrCat,6718564,287,168)
{
link(Str1,14238792:Text,[(293,142)(279,142)])
link(Str2,16172125:Text,[(300,142)(335,142)])
}
Add(StrCat,2928794,413,168)
{
link(Str1,9786081:Text,[(419,145)(391,145)])
link(Str2,1667591:Text,[(426,135)(440,135)])
}
Add(StrCat,11575485,350,273)
{
link(Str1,2928794:Result,[(356,237)(419,237)])
link(Str2,6718564:Result,[(363,237)(293,237)])
}
Add(EventFromData,15990991,427,371)
{
}
Add(Hub,4382235,189,266)
{
OutCount=8
link(onEvent1,6718564:doStrCat,[(220,272)(220,174)])
link(onEvent2,2928794:doStrCat,[(284,279)(284,174)])
link(onEvent3,11575485:doStrCat,[(252,286)(252,279)])
link(onEvent4,7852571:doConvert,[(252,293)(252,328)])
link(onEvent5,3396571:doConvert,[(290,300)(290,440)])
}


карма: 0

0
Ответов: 9906
Рейтинг: 351
#5: 2013-03-30 17:16:22 ЛС | профиль | цитата
savt писал(а):
Вы предлагаете сохранить данные в файл и потом от туда его считать перекодированный ?

Скажем так, я предлагаю способ конвертирования практически произвольныж бинарных данных в употребимые типы.
Исторически, я действительно работал с бинарным файлом (.row, котрый делал IAR - вытаскивал два hex-а, для flash и для eeprom).
И мне даже показалось, что я закрыл практически все возможные хитрости в этих бинарных файлах.

Файл... Можно, но совершенно необязательно.
Это может быть просто MemoryStream (просто кусок памяти, у которого внизу есть точка Stream).
Этот же Stream может быть получен из конвертора в режиме String->Stream.
В общем, любыми способами, доступными программисту на HiAsm

------------ Дoбавленo в 17.16:
savt, главное назначение HiAsm - делать схемы проще, чем это делаете Вы (будем надеяться ПОКА)

Примерно так:

Add(MainForm,15944709,168,84)
{
Width=298
Height=165
Position=1
}
Add(Edit,14238792,252,84)
{
Left=10
Top=20
Width=60
Height=24
Font=[Tahoma,12,0,0,204]
Text="00"
Alignment=2
}
Add(Edit,16172125,308,84)
{
Left=80
Top=20
Width=60
Height=24
Font=[Tahoma,12,0,0,204]
Text="00"
Alignment=2
}
Add(Edit,9786081,364,84)
{
Left=150
Top=20
Width=60
Height=24
Font=[Tahoma,12,0,0,204]
Text="41"
Alignment=2
}
Add(Edit,1667591,413,84)
{
Left=220
Top=20
Width=60
Height=24
Font=[Tahoma,12,0,0,204]
Text="70"
Alignment=2
}
Add(Button,11993343,168,161)
{
Left=10
Top=60
Width=270
Height=24
Font=[Tahoma,12,0,0,204]
Caption="Считай"
link(onClick,13361436:doString,[])
}
Add(Label,614331,504,161)
{
Left=10
Top=100
Width=48
Height=23
Font=[Tahoma,12,0,0,204]
Caption="Ответ"
}
Add(Stream2Hex,7852571,364,161)
{
Mode=1
link(onResult,4194679:doGet,[])
}
Add(FormatStr,13361436,301,161)
{
DataCount=4
Mask="%3%4%1%2"
link(onFString,7852571:doConvert,[])
link(Str1,14238792:Text,[(307,152)(258,152)])
link(Str2,16172125:Text,[])
link(Str3,9786081:Text,[(321,124)(370,124)])
link(Str4,1667591:Text,[(328,131)(419,131)])
}
Add(DataToFileEx,4194679,434,161)
{
Type=1
DataSize=4
BigEndian=0
link(onGet,614331:doText,[])
}
карма: 9

1
Голосовали:savt
Ответов: 34
Рейтинг: -1
#6: 2013-03-30 18:37:26 ЛС | профиль | цитата
Galkov, спасибо огромное, действительно все очень просто и работает. Можно закрывать тему.
карма: 0

0
Разработчик
Ответов: 26160
Рейтинг: 2127
#7: 2013-04-02 09:16:01 ЛС | профиль | цитата
По убедительной просьбе тема снова открыта
карма: 22

0
Ответов: 9906
Рейтинг: 351
#8: 2013-04-02 09:23:46 ЛС | профиль | цитата
savt писал(а):
решив проблему конвертации с HEX в Real, я пришел к другой, с обратной конвертацией из Real (дробное число) в HEx. Компонент я не нашел, может плохо искал

Это - ДА, труднее всего найти то, что у тебя под носом
Да тот же самый элемент!


Add(MainForm,15944709,133,105)
{
Width=298
Height=272
Position=1
}
Add(Edit,14238792,238,105)
{
Left=10
Top=20
Width=60
Height=24
Font=[Tahoma,12,0,0,204]
Text="00"
Alignment=2
}
Add(Edit,16172125,294,105)
{
Left=80
Top=20
Width=60
Height=24
Font=[Tahoma,12,0,0,204]
Text="00"
Alignment=2
}
Add(Edit,9786081,350,105)
{
Left=150
Top=20
Width=60
Height=24
Font=[Tahoma,12,0,0,204]
Text="41"
Alignment=2
}
Add(Edit,1667591,406,105)
{
Left=220
Top=20
Width=60
Height=24
Font=[Tahoma,12,0,0,204]
Text="70"
Alignment=2
}
Add(Button,11993343,133,189)
{
Left=9
Top=62
Width=270
Height=24
Font=[Tahoma,12,0,0,204]
Caption="Считай"
link(onClick,13361436:doString,[])
}
Add(Stream2Hex,7852571,294,189)
{
Mode=1
link(onResult,4194679:doGet,[])
}
Add(FormatStr,13361436,238,189)
{
DataCount=4
Mask="%3%4%1%2"
link(onFString,7852571:doConvert,[])
link(Str1,14238792:Text,[])
link(Str2,16172125:Text,[(251,145)(300,145)])
link(Str3,9786081:Text,[(258,152)(356,152)])
link(Str4,1667591:Text,[(265,159)(412,159)])
}
Add(DataToFileEx,4194679,350,189)
{
Type=1
DataSize=4
BigEndian=0
link(onGet,1017456:doText,[])
}
Add(Edit,1017456,406,189)
{
Left=10
Top=105
Width=270
Height=25
Font=[Lucida Console,10,1,0,204]
Text="<Ответ>"
Alignment=1
DataType=4
}
Add(Button,14076238,133,301)
{
Left=9
Top=147
Width=270
Height=24
Font=[Tahoma,12,0,0,204]
Caption="Проверяй"
link(onClick,3301236:doEvent1,[])
}
Add(MemoryStream,672918,294,238)
{
}
Add(DataToFileEx,6643138,294,301)
{
Type=1
DataSize=4
BigEndian=0
link(Stream,10123406:Var2,[])
}
Add(Hub,3301236,196,301)
{
OutCount=3
link(onEvent1,672918:doClear,[(221,307)(221,251)])
link(onEvent2,9007358:doData,[])
link(onEvent3,5135698:doConvert,[])
}
Add(Stream2Hex,5135698,350,315)
{
link(onResult,9546929:doText,[])
link(Data,10123406:Var3,[(356,285)])
}
Add(GetDataEx,10123406,294,280)
{
link(Data,672918:Stream,[])
}
Add(DoData,9007358,238,308)
{
link(onEventData,6643138:doPut,[])
link(Data,1017456:Text,[(244,229)(412,229)])
}
Add(Edit,9546929,406,315)
{
Left=10
Top=185
Width=270
Height=25
Font=[Lucida Console,10,1,0,204]
Text=""
Alignment=1
}

------------ Дoбавленo в 09.23:
Это, если Вас интересовал 32-х битный Float на выходе.
Если 64-х битный Real -- делай DataToFileEx.DataSize=8.

Ну и далее, в том же духе. Ничего военного, в общем.
карма: 9

0
Ответов: 34
Рейтинг: -1
#9: 2013-04-03 00:04:45 ЛС | профиль | цитата
Galkov, да действительно плохо смотрел компоненты, все работает, огромное спасибо.
[flood] Сам так был близок к решению, просто надо было MemoryStream добавить и соединить... HIAsm очень удобен для быстрой разработки небольших приложений, надеюсь с CNET он станет еще более актуальным, но некоторые вещи как MemoryStream у меня в голове пока еще не укладываются. [/flood]
карма: 0

0
Ответов: 9906
Рейтинг: 351
#10: 2013-04-03 08:30:46 ЛС | профиль | цитата
savt, тут ситуация такая.

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

Семантика связей в HiAsm, или -- чего в какой последовательности происходит.
Внимание Есть очень серьезные отличия от семантики связей в блок-схемах. Тут многие на этом накалываются, и начинают заниматься "кольцеванием".

Вот, например, коллега iarspider пытался описывать "модель паровозиков".
Несмотря на детсадовское название, она ОЧЕНЬ точно описывает семантику происходящего. Чем она мне и нравится...

Иван, отзовись, ты закончил свое описание
Ну типа, дай ссылку, или давай подпилим напильником чего ни то...

Хотя, справедливости ради, отмечу: среди "продвинутых программистов" у меня на работе - эта модель как-то не пошла.
Сам удивляюсь... Им понятней клиент-серверная модель - в них она вошла как по маслу. Ну типа: левые и правые точки - это входы в некоторые сервера (даже и от нескольких клиентов). А левые и верхние точки - это клиенты, которые обращаются к другим серверам.
Че к чему
карма: 9

0
10
Сообщение
...
Прикрепленные файлы
(файлы не залиты)