<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=11130&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-03-22T16:45:57+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=11130&amp;mode</id>
<entry>
<author><name><![CDATA[vaffanculo]]></name></author>
<updated>2015-03-22T16:45:57+01:00</updated>
<published>2015-03-22T16:45:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11130&amp;p=124242#p124242</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11130&amp;p=124242#p124242"/>
<title type="html"><![CDATA[Re: Modbus problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11130&amp;p=124242#p124242"><![CDATA[
Może mi ktoś wyjaśnić dlaczego unia nie wszystkie wartości mi właściwie konwertuje?<br /><br />Oto przykład poprawny:<br /><br />[syntax=c]union<br />{<br />float myFloat;<br />char floatDataTemp&#91;sizeof(float)&#93;;<br /><br />} dataUnion;<br /><br /><br />recv&#91;0&#93; = 0x33;<br />recv&#91;1&#93; = 0x93;<br />recv&#91;2&#93; = 0x88;<br />recv&#91;3&#93; = 0x43;<br /><br />for (int i = 0; i &lt; sizeof(float); ++i)<br />{<br />dataUnion.floatDataTemp&#91;i&#93; = recv&#91;i&#93;;<br />}[/syntax]<br /><br />Otrzymuję poprawną wartość w:<br /><br />[syntax=c]dataUnion.myFloat[/syntax]<br />czyli 273.15<br /><br /><br />Natomiast:<br /><br />[syntax=c]recv&#91;0&#93; = 0x80;<br />recv&#91;1&#93; = 0xE6;<br />recv&#91;2&#93; = 0xC5;<br />recv&#91;3&#93; = 0x47;[/syntax]<br /><br />zwraca wartość -29747 a poprawną wartością jest 101325.<br />Sprawdzałem również na kalkulatorze online że unia zwraca błędną wartość.<br /><br />Proszę o podpowiedz<br /><br /><br />---------------------------------------------------------------------------------------------<br /><br /><strong>Problem rozwiązany, okazało się że źle konwertowałem float na ASCII</strong><br /><br />---------------------------------------------------------------------------------------------<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1784">vaffanculo</a> — 22 mar 2015, o 16:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[vaffanculo]]></name></author>
<updated>2015-03-21T19:25:30+01:00</updated>
<published>2015-03-21T19:25:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11130&amp;p=124138#p124138</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11130&amp;p=124138#p124138"/>
<title type="html"><![CDATA[Re: Modbus problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11130&amp;p=124138#p124138"><![CDATA[
Dzięki za odpowiedz<br /><br />Wcześniej używałem takiego kodu i co prawda działało ale ostrzeżenie wyświetlało<br /><br />[syntax=c]float fnum = *(float*) &amp;recv&#91;0&#93;;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1784">vaffanculo</a> — 21 mar 2015, o 19:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[atmel]]></name></author>
<updated>2015-03-21T19:11:28+01:00</updated>
<published>2015-03-21T19:11:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11130&amp;p=124135#p124135</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11130&amp;p=124135#p124135"/>
<title type="html"><![CDATA[Re: Modbus problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11130&amp;p=124135#p124135"><![CDATA[
Można użyć unii:<br /><br />[syntax=c]union {<br />float myFloat;<br />char dataTemp&#91;sizeof(float)&#93;;<br /><br />} dataUnion;<br />               <br />for (int i = 0; i &lt; sizeof(float); ++i) {<br />        dataUnion.dataTemp&#91;i&#93; = frame&#91;i + 3&#93;;<br />}<br /><br />//Teraz w &quot;dataUnion.myFloat&quot; jest wartość rzeczywista[/syntax]<br />Ewentualnie:<br /><br />[syntax=c]#include &lt;string.h&gt;<br />//...<br />char dataTemp&#91;sizeof(float)&#93;;<br />float myFloat;<br />               <br />for (int i = 0; i &lt; sizeof(float); ++i) {<br />        dataTemp&#91;i&#93; = frame&#91;i + 3&#93;;<br />}<br /><br />memcpy(&amp;myFloat, dataTemp, sizeof(float));<br /><br />//      Teraz w &quot;myFloat&quot; jest wartość rzeczywista[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1183">atmel</a> — 21 mar 2015, o 19:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[vaffanculo]]></name></author>
<updated>2015-03-21T17:38:09+01:00</updated>
<published>2015-03-21T17:38:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=11130&amp;p=124130#p124130</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=11130&amp;p=124130#p124130"/>
<title type="html"><![CDATA[Modbus problem]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=11130&amp;p=124130#p124130"><![CDATA[
Witam<br /><br />Buduję urządzenie które będzie pracować jako master w protokole modbus RTU. Komunikację mam opanowaną pozostaje tylko problem z konwersją wartości rejestrów. <br />Problem to zamiana wartości rejestru na zmienną typu float lub double a najlepiej na 2 inty części całkowitej i ułamkowej.<br /><br />Wyciągam z odebranej ramki 4 bajty i zapisuję je w tablicy char<br /><br />[syntax=c]char dataTemp&#91;4&#93;;<br /><br />for (int i = 0; i &lt; 4; i++)<br />{<br />dataTemp&#91;i&#93; = frame&#91;i + 3&#93;;<br />}[/syntax]<br /><br />Proszę o podpowiedz jak zamienić to na float.<br /><br />W c# używałem do tego gotowej funkcji<br /><br />[syntax=csharp]myFloat = System.BitConverter.ToSingle(byteTemp, 0);[/syntax]<br /><br /> ale w c nie mogę nic znaleść<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1784">vaffanculo</a> — 21 mar 2015, o 17:38</p><hr />
]]></content>
</entry>
</feed>