<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>LogThat on Loupe Documentation</title>
    <link>/libraries/logthat.html</link>
    <description>Recent content in LogThat on Loupe Documentation</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language><atom:link href="/libraries/logthat/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Usage</title>
      <link>/libraries/logthat/usage.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/libraries/logthat/usage.html</guid>
      <description>&lt;p&gt;Short snippets on this page show only the LogThat calls. Longer ones are written inside the routine they belong in. Where a snippet shows its rendered output in a comment, the values it prints are declared so the result can be checked; other application variables are left undeclared.&lt;/p&gt;
&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;
&lt;p&gt;Install with the &lt;a href=&#34;../../tools/lpm.html&#34;&gt;Loupe Package Manager&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lpm install logthat
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;LogThat depends on &lt;strong&gt;ArEventLog&lt;/strong&gt; and &lt;strong&gt;AsBrStr&lt;/strong&gt;, which ship with Automation Studio, and on Loupe&amp;rsquo;s &lt;a href=&#34;../../libraries/stringext.html&#34;&gt;StringExt&lt;/a&gt; library. If StringExt is not already in the project, install it as well:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Functions</title>
      <link>/libraries/logthat/functions.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/libraries/logthat/functions.html</guid>
      <description>&lt;p&gt;Short snippets on this page show only the LogThat calls; longer ones are written inside the routine they belong in. Application variables are left undeclared unless a rendered output comment depends on them. Snippets that write a log entry from a cyclic body are guarded on an edge flag, because a log entry is a one-shot event. The function blocks are different: &lt;code&gt;logStateChange&lt;/code&gt; and &lt;code&gt;logDelete&lt;/code&gt; are called every scan by design, and do their own edge or completion handling.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Structures</title>
      <link>/libraries/logthat/structures.html</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/libraries/logthat/structures.html</guid>
      <description>&lt;h2 id=&#34;strextargs_typ&#34;&gt;StrExtArgs_typ&lt;/h2&gt;
&lt;p&gt;Format arguments for a log message. This type comes from &lt;a href=&#34;../../libraries/stringext.html&#34;&gt;StringExt&lt;/a&gt; and is passed to the log functions by address through &lt;code&gt;pMsgData&lt;/code&gt;. Each format specifier in the message consumes the next unused member of the matching type, in order.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;Name&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;r&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;ARRAY[0..4] OF REAL&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Values for &lt;code&gt;%r&lt;/code&gt; and &lt;code&gt;%f&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;s&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;ARRAY[0..4] OF UDINT&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Addresses of strings for &lt;code&gt;%s&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;b&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;ARRAY[0..4] OF BOOL&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Values for &lt;code&gt;%b&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;i&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;ARRAY[0..4] OF DINT&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Values for &lt;code&gt;%i&lt;/code&gt; and &lt;code&gt;%d&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Application variables are left undeclared in this snippet. The call is guarded on an edge flag because a log entry is a one-shot event, not something to write every scan.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>