<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Pointer to Array in Funktionsbaustein verwenden</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/d8afef9221/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/d8afef9221/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Deutsch/thread/d8afef9221/</id><updated>2020-02-28T15:28:50.927000Z</updated><subtitle>Recent posts to Pointer to Array in Funktionsbaustein verwenden</subtitle><entry><title>Pointer to Array in Funktionsbaustein verwenden</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/d8afef9221/?limit=25#bf26" rel="alternate"/><published>2020-02-28T15:28:50.927000Z</published><updated>2020-02-28T15:28:50.927000Z</updated><author><name>Beckx-net</name><uri>https://forge.codesys.com/u/beckx-net/</uri></author><id>https://forge.codesys.com022a113e7c73ff4b1912147f28a2417c57739655</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Danke,&lt;/p&gt;
&lt;p&gt;es hat funktioniert!&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Pointer to Array in Funktionsbaustein verwenden</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/d8afef9221/?limit=25#8b9b" rel="alternate"/><published>2020-02-28T15:28:48.125000Z</published><updated>2020-02-28T15:28:48.125000Z</updated><author><name>KlOis</name><uri>https://forge.codesys.com/u/klois/</uri></author><id>https://forge.codesys.come6246fa54e4b08c6ecb5d529716152f492f00b20</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hi,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Zitat:&lt;/strong&gt;&lt;br/&gt;
Wie kann ich dies verhindern? Geht dieses überhaupt, ohne die Länge des Arrays dem FB mitzuteilen?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Es gibt die Funktion CheckBounds. Diese musst du selbst erstellen, sie wird aber automatisch bei Zugriffen außerhalb deines def. Feldes aufgerufen.&lt;br/&gt;
Aus der CoDeSys Hilfe (einfach CheckBounds suchen)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Zitat:&lt;/strong&gt;&lt;br/&gt;
Funktion Checkbounds&lt;br/&gt;
Wenn Sie in Ihrem Projekt eine Funktion mit Namen CheckBounds definieren, können Sie damit Bereichsüberschreitungen in Arrays automatisch überprüfen! Der Name der Funktion ist festgelegt und darf nur diese Bezeichnung besitzen. &lt;br/&gt;
Beispiel für die Funktion CheckBounds:&lt;br/&gt;
FUNCTION CheckBounds : DINT&lt;br/&gt;
VAR_INPUT&lt;br/&gt;
 index, lower, upper: DINT;&lt;br/&gt;
END_VAR&lt;br/&gt;
IF  index &amp;lt; lower THEN&lt;br/&gt;
 CheckBounds := lower;&lt;br/&gt;
ELSIF  index &amp;gt; upper THEN&lt;br/&gt;
 CheckBounds := upper;&lt;br/&gt;
ELSE  CheckBounds := index;&lt;br/&gt;
END_IF&lt;br/&gt;
Das folgende Beispielprogramm zum Testen der CheckBounds-Funktion greift außerhalb der Grenzen eines definierten Arrays zu. Die Funktion CheckBounds gewährleistet, dass der Wert TRUE nicht an die Stelle A&lt;span&gt;[10]&lt;/span&gt;, sondern an der oberen noch gültigen Bereichsgrenze A&lt;span&gt;[7]&lt;/span&gt; zugewiesen wird. Mit der CheckBounds-Funktion können somit Zugriffe außerhalb von Array-Grenzen korrigiert werden.&lt;br/&gt;
Test Programm für die CheckBounds Funktion:&lt;br/&gt;
PROGRAM PLC_PRG&lt;br/&gt;
VAR&lt;br/&gt;
 a: ARRAY&lt;span&gt;[0..7]&lt;/span&gt; OF BOOL;&lt;br/&gt;
 b: INT:=10;&lt;br/&gt;
END_VAR&lt;br/&gt;
a&lt;span&gt;[b]&lt;/span&gt;:=TRUE;&lt;br/&gt;
Achtung: Die in der CheckLib enthaltene CheckBounds-Funktion ist eine Beispiellösung! Prüfen Sie vor Verwendung der Bibliothek, ob die Funktion in Ihrem Sinne arbeitet oder implementieren Sie eine entsprechende CheckBounds-Funktion als Baustein direkt in Ihrem Projekt.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Außerdem kannst du, um mit Pointern als Übergabewert zu arbeiten, den Array einfach als IN_OUT Variable deklarieren. Dies hat zur Folge, dass bei dem Aufruf deiner Instanz es unbedingt erforderlich ist, diesen Wert zu übergeben. Sonst meckert der Compiler, du kannst nur den gleichen Typen übergeben und du verbrätst nicht zuviel Speicher, da dies auch nur als Zeiger gehandelt wird.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Pointer to Array in Funktionsbaustein verwenden</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/d8afef9221/?limit=25#19c2" rel="alternate"/><published>2020-02-28T15:28:40.745000Z</published><updated>2020-02-28T15:28:40.745000Z</updated><author><name>Beckx-net</name><uri>https://forge.codesys.com/u/beckx-net/</uri></author><id>https://forge.codesys.com4611433f32add7de569062f6f7f464726c5d8fbc</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Danke für die Antwort! Dann werd ich wohl einfach ein Array als Schnittstelle nehmen, da kann es nicht passieren, dass man bei der Anwendung ein kleineren Arraygröße übergibt!&lt;/p&gt;
&lt;p&gt;Gruß Beckx-Net&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Pointer to Array in Funktionsbaustein verwenden</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/d8afef9221/?limit=25#838e" rel="alternate"/><published>2020-02-28T15:28:37.958000Z</published><updated>2020-02-28T15:28:37.958000Z</updated><author><name>bschuster</name><uri>https://forge.codesys.com/u/bschuster/</uri></author><id>https://forge.codesys.com0bef59c22a740e927452a97e09228c4080a19933</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hallo,&lt;/p&gt;
&lt;p&gt;nein, bei einer Pointerübergabe muß die Stelle, die den Pointer nutzt, auch den Inhalt dahinter kennen, d.h. auch die Grösse des arrays.&lt;/p&gt;
&lt;p&gt;Bei der Benutzung von Pointern muss der Programmierer nun mal wissen was er tut.&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Pointer to Array in Funktionsbaustein verwenden</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/d8afef9221/?limit=25#3ec0" rel="alternate"/><published>2020-02-28T15:28:30.389000Z</published><updated>2020-02-28T15:28:30.389000Z</updated><author><name>Beckx-net</name><uri>https://forge.codesys.com/u/beckx-net/</uri></author><id>https://forge.codesys.comfb2b2327f6a1c8b5e17593a68e0e6a5ad98fdd8d</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hallo, &lt;/p&gt;
&lt;p&gt;ich habe mal eine Frage bezüglich der Pointerbenutzung. Ich habe ein Funktionsbaustein, der als Eingabe den Typ POINTER TO ARRAY &lt;span&gt;[0..231]&lt;/span&gt; OF BYTE fordert. In diesem FB wird das gesamte Array mit Werten beschrieben.&lt;/p&gt;
&lt;p&gt;Wenn ich nun mein FB ein Pointer übergebe, der auf eine &lt;strong&gt;kleineres Array &lt;/strong&gt; zeigt bekomm ich Probleme, da der FB auf Elemente zugreift, die nicht im Array liegen, dadurch nehmen unter Umstände andere Variablen diesen Wert an. Wie kann ich dies verhindern? Geht dieses überhaupt, ohne die Länge des Arrays dem FB mitzuteilen?&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>