<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent posts to Problem mit SMC_OutQueue</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/ad71224f4a/" rel="alternate"/><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/ad71224f4a/feed.atom" rel="self"/><id>https://forge.codesys.com/forge/talk/Deutsch/thread/ad71224f4a/</id><updated>2020-02-28T01:50:59.840000Z</updated><subtitle>Recent posts to Problem mit SMC_OutQueue</subtitle><entry><title>Problem mit SMC_OutQueue</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/ad71224f4a/?limit=25#127f" rel="alternate"/><published>2020-02-28T01:50:59.840000Z</published><updated>2020-02-28T01:50:59.840000Z</updated><author><name>FrankG</name><uri>https://forge.codesys.com/u/frankg/</uri></author><id>https://forge.codesys.com0c9d90aa275081d2941b4bcbbf6005d87ea0c1d1</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Dann empfehle ich eine Änderung Ihrer Online-Hilfe. Hier steht es im Text tatsächlich korrekt, allerdings in der Funktionsdeklaration falsch.&lt;/p&gt;
&lt;p&gt;Zitat aus der Codesys-Hilfe:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Zitat:&lt;/strong&gt;&lt;br/&gt;
POINTER TO BOOL SMC_APPENDOBJ(POQ: POINTER TO SMC_OUTQUEUE, PGI: POINTER TO SMC_GEOINFO)&lt;br/&gt;
Diese Funktion hängt ans Ende der Liste bei POQ das GEOINFO-Objekt, das bei PGI steht, sofern OQ richtig initialisiert und nicht schon vollständig belegt ist. Im Erfolgsfall ist der Rückgabewert ein Zeiger auf das neue Listen-Element, ansonsten 0.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Vielen Dank für Ihre Hilfe, nun weiß ich, was falsch gelaufen ist und kann es korregieren.  &lt;/p&gt;
&lt;p&gt;Den Pointer pLocalGeoInfo hatte ich natürlich zuvor mit SMC_GetObj() aus einer bestehenden Queue erhalten in meinem Beispiel. Ich hatte es nur nicht vollständig beschrieben in meinem ersten Post, da es für mich nicht so relevant war.&lt;/p&gt;
&lt;p&gt;Ich hätte da noch eine Frage. Wie prüfe ich einen Zeiger auf 0 oder Gültigkeit ab (z.B. in ST)? Ich hatte hierzu bereits einmal folgendes Konstrukt erstellt, was allerdings nicht korrekt funktioniert hatte:&lt;/p&gt;
&lt;p&gt;pLocalGeoInfo := SMC_GetObj(ADR(MyQueue), 0);&lt;/p&gt;
&lt;p&gt;IF NOT(pLocalGeoInfo = 0) THEN&lt;/p&gt;
&lt;p&gt;(&lt;em&gt; soll ausgeführt werden, wenn von SMC_GetObj() ein gültiger Pointer zurückgeliefert wird&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;END_IF&lt;/p&gt;
&lt;p&gt;Leider ist die IF-Bedingung immer TRUE, in jedem Fall. Ich kann die Negierung sogar entfernen und die IF-Bedingung war immer noch erfüllt. Habe ich hier einen Denkfehler begangen?&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Problem mit SMC_OutQueue</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/ad71224f4a/?limit=25#0dde" rel="alternate"/><published>2020-02-28T01:50:58.024000Z</published><updated>2020-02-28T01:50:58.024000Z</updated><author><name>Hilmar Panzer</name><uri>https://forge.codesys.com/u/hilmar-panzer/</uri></author><id>https://forge.codesys.com6ce529375759992b9c19b885ecd08ed090b20af2</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hallo,&lt;/p&gt;
&lt;p&gt;ich denke Sie machen grundsätzlich alles richitg, außer, dass SMC_AppendObj keinen POINTER TO BOOL zurückliefert, sondern ein POINTER TO SMC_GEOINFO. Dieser Zeiger ist entweder 0 (Fehler) oder zeigt auf das angehängte Objekt (siehe Doku). Was aus dem Code nicht hervorgeht ist, wie Sie pLocalGeoInfo belegen. Dieser Zeiger sollte natürlich auf ein gültiges GeoInfo-Objekt zeigen. Vielleicht ist es besser, anstelle des Zeigers ein echtes Objekt anzulegen, und das zu übergeben:&lt;/p&gt;
&lt;p&gt;LocalGeoInfo: SMC_GeoInfo;&lt;/p&gt;
&lt;p&gt;pResult: POINTER TO SMC_GeoInfo;&lt;/p&gt;
&lt;p&gt;pResult := SMC_AppendObj(ADR(MyQueue), ADR(LocalGeoInfo));&lt;/p&gt;&lt;/div&gt;</summary></entry><entry><title>Problem mit SMC_OutQueue</title><link href="https://forge.codesys.com/forge/talk/Deutsch/thread/ad71224f4a/?limit=25#bd9b" rel="alternate"/><published>2020-02-28T01:50:52.923000Z</published><updated>2020-02-28T01:50:52.923000Z</updated><author><name>FrankG</name><uri>https://forge.codesys.com/u/frankg/</uri></author><id>https://forge.codesys.com5e2e1d13f579fbb26d5efb62b42918f80eb16677</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Hallo, &lt;/p&gt;
&lt;p&gt;ich habe ein Problem mit dem Umgang der Funktionen SMC_AppendObj, SMC_DeleteObj und SMC_GetObj auf eine eigene SMC_OutQueue.&lt;/p&gt;
&lt;p&gt;Wenn ich eine eigene OutQueue folgendermaßen deklariert und initialisiert habe:&lt;/p&gt;
&lt;p&gt;VAR_GLOBAL&lt;/p&gt;
&lt;p&gt;pLocalGeoInfo : POINTER TO SMC_GEOINFO;&lt;/p&gt;
&lt;p&gt;MyMemory : ARRAY&lt;span&gt;[0..19]&lt;/span&gt; OF SMC_GEOINFO;&lt;/p&gt;
&lt;p&gt;MyQueue : SMC_OUTQUEUE := (nSize := 0, &lt;/p&gt;
&lt;p&gt;nReadPos:=0, &lt;/p&gt;
&lt;p&gt;nWritePos := 0, &lt;/p&gt;
&lt;p&gt;bFull:=FALSE, &lt;/p&gt;
&lt;p&gt;bEndOfList:=TRUE, &lt;/p&gt;
&lt;p&gt;byGenerator:=255, &lt;/p&gt;
&lt;p&gt;strProgramName:='MyCNC');&lt;/p&gt;
&lt;p&gt;bInitMyQueue : BOOL := FALSE;&lt;/p&gt;
&lt;p&gt;pbErg : POINTER TO BOOL;&lt;/p&gt;
&lt;p&gt;END_VAR&lt;/p&gt;
&lt;p&gt;(innerhalb meines Programmes):&lt;/p&gt;
&lt;p&gt;IF NOT(bInitQueue) THEN&lt;/p&gt;
&lt;p&gt;(&lt;em&gt; Initialisierung von MyQueue &lt;/em&gt;) &lt;/p&gt;
&lt;p&gt;MyQueue.pbyBuffer:= ADR(MyMemory);&lt;/p&gt;
&lt;p&gt;MyQueue.nSize := SIZEOF(MyMemory);&lt;/p&gt;
&lt;p&gt;bInitQueue := TRUE;&lt;/p&gt;
&lt;p&gt;ELSE&lt;/p&gt;
&lt;p&gt;(&lt;em&gt; MyQueue kann verwendet werden, ist initialisiert &lt;/em&gt;) &lt;/p&gt;
&lt;p&gt;END_IF&lt;/p&gt;
&lt;p&gt;... kann ich genau einmal erfolgreich ein SMC_AppendObj() auf diese Queue anwenden, danach bei einem weiteren Aufruf erhalte ich über den Rückgabewert (Pointer to BOOL) eine Fehlermeldung (pLocalGeoInfo ist dabei ein Pointer auf ein GeoInfo-Objekt aus einer anderen Queue):&lt;/p&gt;
&lt;p&gt;pbErg := SMC_AppendObj(ADR(MyQueue), pLocalGeoInfo);&lt;/p&gt;
&lt;p&gt;laut Debugger -&amp;gt; "pErg^ := &lt;strong&gt;&lt;em&gt; INVALID: 16#02 &lt;/em&gt;&lt;/strong&gt;"&lt;/p&gt;
&lt;p&gt;Es scheint, dass der Pointer to Bool ab dem zweiten Aufruf von SMC_AppendObj einen illegalen Pointer zurückliefert.&lt;/p&gt;
&lt;p&gt;Was mache ich falsch?&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>