<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[SDS PLC/PAC: Měření Energie & OnlineTechnology.cz - VBA pro "DEBUGGER"]]></title>
		<link>https://forum.sds.an-d.cz/viewtopic.php?id=487</link>
		<atom:link href="https://forum.sds.an-d.cz/extern.php?action=feed&amp;tid=487&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Nejnovější příspěvky v VBA pro "DEBUGGER".]]></description>
		<lastBuildDate>Thu, 31 Oct 2013 20:04:18 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBA pro "DEBUGGER"]]></title>
			<link>https://forum.sds.an-d.cz/viewtopic.php?pid=3913#p3913</link>
			<description><![CDATA[<p>Ještě doplním že hodnoty jednotlivých proměnných za chodu programu modifikuji pomoci vlastního scriptu a hlavně kódu zvěřejněného na http://forum.merenienergie.cz//viewtopic.php?id=131. </p><p>Hlavně nesmí člověk využít proměnné které nejsou vázané na konkrétní ram[], text[] nebo sys[] a na které potom z venku nedosáhne :-)</p>]]></description>
			<author><![CDATA[null@example.com (ringojr)]]></author>
			<pubDate>Thu, 31 Oct 2013 20:04:18 +0000</pubDate>
			<guid>https://forum.sds.an-d.cz/viewtopic.php?pid=3913#p3913</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBA pro "DEBUGGER"]]></title>
			<link>https://forum.sds.an-d.cz/viewtopic.php?pid=3893#p3893</link>
			<description><![CDATA[<p>Soubor sem přiložit přímo nemůžu tak popíšu a vložím pouze&nbsp; VBA kód.</p><p><span class="bbu">V Excelu vytvořit tři listy:</span><br />1) <strong>code</strong> - a sem nakopírovat váš zdrojový kód v SDS-C<br />2) <strong>code_prepare</strong> - sem se ukládají výsledky a mám tady spouštěcí tlačítka pro makra<br />3) <strong>get</strong> - sem do buněk A1:A9 vložte řetězce ve tvaru http://192.168.2.250/get_ram[0]?rn=100&amp;rand=Math.random(), ve kterých postupně měnte index vždy po 100 až do 400, potom stejné pro get_sys[0],....sys[300], zde je možnost to dále rozšířit a použít i get_txt ale je potom nutno v kódech uprait offsety řádků</p><p>Potom do modulu zkopírujte VBA kód přiloženy na konci.</p><p>Z něj pak přímo volám dve funkce:<br />1) <strong>nacti_var()</strong> - ta projde SDC program uložený na listu CODE a vytáhne z něj proměnné&nbsp; z řádků ve tvaru <br />&quot;#define SERIAL_OUT ram[109] // příznak že se ma zahájit odeslání&quot; <br />nebo pole z řádků typu <br />&quot;//## ram [300-319]&nbsp; nefiltrované teploty&quot; <br />na list code_prepare<br />2) <strong>aktualizuj()</strong> - která potom pomocí dvou funkcí načte a rozparsuje hodnoty z SDC na listu GET a následně je přiřadí k proměnným na listu code_prepare</p><p>Vlastní VBA kód:<br /></p><div class="codebox"><pre><code>Sub nacti_var()
rd = 0
For r = 1 To Sheets(&quot;code&quot;).Rows.Count
    txt = Sheets(&quot;CODE&quot;).Cells(r, 1).Value
    txt = Trim(txt)
    If txt &lt;&gt; &quot;&quot; Then
        If Left(txt, 7) = &quot;#define&quot; Then
            rd = rd + 1
            rest_txt = Trim(Mid(txt, 8))
            x = InStr(rest_txt, &quot; &quot;)
            val_name = Mid(rest_txt, 1, x - 1)
            x = InStr(rest_txt, &quot; &quot;)
            rest_txt = Trim(Mid(rest_txt, x + 1))
            val_type = Left(rest_txt, 3)
            rest_txt = Mid(rest_txt, 4)
            x = InStr(rest_txt, &quot;]&quot;)
            val_poz = Replace(Left(rest_txt, x), &quot;[&quot;, &quot;&quot;)
            val_poz = Replace(val_poz, &quot;]&quot;, &quot;&quot;)
            val_comm = Trim(Mid(rest_txt, x + 1))
            Sheets(&quot;CODE_prepare&quot;).Cells(rd, 1).Value = val_name
            Sheets(&quot;CODE_prepare&quot;).Cells(rd, 2).Value = val_type
            Sheets(&quot;CODE_prepare&quot;).Cells(rd, 3).Value = val_poz
            Sheets(&quot;CODE_prepare&quot;).Cells(rd, 4).Value = val_comm
        End If
        If Left(txt, 4) = &quot;//##&quot; Then
            rd = rd + 1
            rest_txt = Trim(Mid(txt, 5))
            val_name = Mid(rest_txt, 1, InStr(rest_txt, &quot;]&quot;))
            val_type = Left(rest_txt, 3)
            rest_txt = Mid(rest_txt, 4)
            x = InStr(rest_txt, &quot;]&quot;)
            val_poz = Left(rest_txt, x)
            val_comm = Trim(Mid(rest_txt, x + 1))
            Sheets(&quot;CODE_prepare&quot;).Cells(rd, 1).Value = val_name
            Sheets(&quot;CODE_prepare&quot;).Cells(rd, 2).Value = val_type
            Sheets(&quot;CODE_prepare&quot;).Cells(rd, 3).Value = val_poz
            Sheets(&quot;CODE_prepare&quot;).Cells(rd, 4).Value = val_comm
        End If
    End If
Next r
End Sub
            

Sub prirad_get()
r = 1
Do While Len(Sheets(&quot;code_prepare&quot;).Cells(r, 2).Value) &gt; 1
idx = Trim(Sheets(&quot;code_prepare&quot;).Cells(r, 3).Value)
typ = Sheets(&quot;code_prepare&quot;).Cells(r, 2).Value
If IsNumeric(idx) Then
    sloupec = Int(idx / 100)
    If typ = &quot;sys&quot; Then sloupec = sloupec + 5
    radek = idx - 100 * Int(idx / 100) + 10
    Sheets(&quot;code_prepare&quot;).Cells(r, 6).Value = Sheets(&quot;get&quot;).Cells(radek, sloupec + 1)
Else
    If Left(idx, 1) = &quot;[&quot; Then
        idx = Mid(idx, 2)
        x = InStr(idx, &quot;-&quot;)
        prvni = Left(idx, x - 1)
        idx = Mid(idx, x + 1)
        posledni = Left(idx, Len(idx) - 1)
        pole = &quot;&quot;
        For i = prvni To posledni
            sloupec = Int(i / 100)
            If typ = &quot;sys&quot; Then sloupec = sloupec + 5
            radek = i - 100 * Int(i / 100) + 10
            pole = pole &amp; Sheets(&quot;get&quot;).Cells(radek, sloupec + 1) &amp; &quot;|&quot;
        Next i
        Sheets(&quot;code_prepare&quot;).Cells(r, 6).Value = pole
    End If
End If
r = r + 1
Loop
End Sub
            

Sub nacti_get()
For j = 1 To 9
    Sheets(&quot;get&quot;).Cells(j, 2).Value = http_get(Sheets(&quot;get&quot;).Cells(j, 1).Value)
Next j
For j = 1 To 9
rd = 10
    txt = Sheets(&quot;get&quot;).Cells(j, 2).Value
    Do While (Len(txt) &gt; 0)
        x = InStr(txt, &quot;|&quot;)
        If x &gt; 0 Then
                    Sheets(&quot;get&quot;).Cells(rd, j).Value = Left(txt, x - 1)
            Else
                Sheets(&quot;get&quot;).Cells(rd, j).Value = txt
                Exit Do
        End If
        txt = Mid(txt, x + 1)
        rd = rd + 1
    Loop
Next j
End Sub
            

Sub aktualizuj()
Call nacti_get
Call prirad_get
End Sub</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (ringojr)]]></author>
			<pubDate>Wed, 16 Oct 2013 18:58:37 +0000</pubDate>
			<guid>https://forum.sds.an-d.cz/viewtopic.php?pid=3893#p3893</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBA pro "DEBUGGER"]]></title>
			<link>https://forum.sds.an-d.cz/viewtopic.php?pid=3892#p3892</link>
			<description><![CDATA[<p>O takovou věc bude samozřejmě zájem globálně, pokud se tedy chcete podělit o Vaši práci sem s tím..</p>]]></description>
			<author><![CDATA[null@example.com (hrnous)]]></author>
			<pubDate>Wed, 16 Oct 2013 07:10:21 +0000</pubDate>
			<guid>https://forum.sds.an-d.cz/viewtopic.php?pid=3892#p3892</guid>
		</item>
		<item>
			<title><![CDATA[VBA pro "DEBUGGER"]]></title>
			<link>https://forum.sds.an-d.cz/viewtopic.php?pid=3890#p3890</link>
			<description><![CDATA[<p>Již jsem vyřešil tak příspěvek modifikuji </p><p>V Excelu mám prográmek kdy na jeden list se vloží vyvýjený SDC program, spustí se z něj makro které z něj vytáhne všechny proměnné deklarované jako #define (nebo i pole proměnných ve tvaru //## ram [330-349] ).<br />Dalším makrem se potom na samostatný sheet s pomocí přednastavených odkazů a volání http_get se načtou pole hodnot ze SDS, rozkódujou a přiřadí příslušným proměnným.</p><p>Mám tak &quot;ladící&quot; nástroj který mi vypisuje hodnoty všech proměnných a dají se tak hledat chyby v chodu programu. Jestli máte někdo zájem můžu to hodit do placu :-)</p>]]></description>
			<author><![CDATA[null@example.com (ringojr)]]></author>
			<pubDate>Tue, 15 Oct 2013 18:26:48 +0000</pubDate>
			<guid>https://forum.sds.an-d.cz/viewtopic.php?pid=3890#p3890</guid>
		</item>
	</channel>
</rss>
