{"id":1146,"date":"2017-12-29T15:52:23","date_gmt":"2017-12-29T14:52:23","guid":{"rendered":"http:\/\/ftl-auerbach.lima-city.de\/Hubo\/?page_id=1146"},"modified":"2017-12-30T15:45:12","modified_gmt":"2017-12-30T14:45:12","slug":"codesys-digitale-ein-und-ausgaenge","status":"publish","type":"page","link":"https:\/\/ftl-auerbach.lima-city.de\/Hubo\/automation\/codesys-integration\/codesys-digitale-ein-und-ausgaenge\/","title":{"rendered":"Digitale Ein- und Ausg\u00e4nge"},"content":{"rendered":"<p><strong>Aufgabenstellung<\/strong><\/p>\n<p>Die digitalen Eing\u00e4nge des Hubo sollen \u00fcber CODESYS eingelesen und direkt auf den Ausg\u00e4ngen ausgegeben werden.<\/p>\n<p><strong>L\u00f6sung<\/strong><\/p>\n<p>Deklarationsteil<\/p>\n<pre class=\"brush: delphi; title: ; notranslate\" title=\"\">\r\nPROGRAM PLC_PRG\r\nVAR\r\n\u00a0\u00a0 \u00a0\/\/ Die Hubos arbeiten mit Pullup Widerst\u00e4nden an den Eing\u00e4ngen. Der einfacheren Logik wegen invertieren wir hier das Signal der Eing\u00e4nge.\r\n\u00a0\u00a0 \u00a0myMaster \u00a0\u00a0 \u00a0\u00a0 : \u00a0\u00a0 \u00a0Hubo.HuboDigitalIO := (i2cAddress := 16#20, pI2CMaster:=ADR(I2C_Master), inputInvertMask:=16#FF, outputInvertMask:=16#00);\r\n\u00a0\u00a0 \u00a0masterEingang \u00a0: \u00a0\u00a0 \u00a0BYTE               := 0;\r\n\u00a0\u00a0 \u00a0masterAusgang \u00a0: \u00a0\u00a0 \u00a0BYTE               := 0;\r\n\u00a0\u00a0 \u00a0bResult\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0: \u00a0\u00a0 \u00a0Hubo.ERROR         := Hubo.ERROR.NO_ERROR;\r\nEND_VAR\r\n<\/pre>\n<p><em>HuboDigitalIO<\/em> ist der zur Steuerung der MCP23017 Portexpander zu verwendende FB. W\u00e4hrend der Deklaration \u00fcbergibt man die I2C-Adresse des Bausteins (0x20\u20260x27), das I2C Busmasterobjekt (das ist ein Standardobjekt bei Raspberry Pi Projekten unter CODESYS) sowie optional zwei Invertierungsmasken zur logischen Invertierung der Ein- und\/oder Ausg\u00e4nge.<\/p>\n<p>Funktionsrumpf<\/p>\n<pre class=\"brush: delphi; title: ; notranslate\" title=\"\">\r\n\/\/ Einmalige Initialisierung der Objekte. Folgeaufrufe sind unsch\u00e4dlich und werden ignoriert. \r\nIF (myMaster.Initialize() &lt;&gt; Hubo.ERROR.NO_ERROR) THEN\r\n\u00a0\u00a0 \u00a0RETURN;\r\nEND_IF\r\n\r\n\/\/ Alle Eingangspuffer des MCP23017 f\u00fcr diesen Zyklus f\u00fcllen.\r\nIF (myMaster.ReadBuffer() &lt;&gt; Hubo.ERROR.NO_ERROR) THEN\r\n\u00a0\u00a0 \u00a0RETURN;\r\nEND_IF\r\n\r\n\/\/ Gepufferte Eingangswerte in der Variable &quot;masterEingang&quot; merken.\r\nbResult := myMaster.GetInputPortB(inputPortB =&gt; masterEingang);\r\n\r\n\/\/ Nun schleifen wir die digitalen Eing\u00e4nge 1:1 direkt auf die digitalen Ausg\u00e4nge durch... \r\nmasterAusgang := masterEingang; \r\n\u00a0\u00a0 \u00a0\r\n\/\/ ... und schreiben sie als neue digitale Ausgangswerte in den Ausgangspuffer.\r\nbResult := myMaster.SetOutputPortA(outputPortA := masterAusgang); \r\n\r\n\/\/ Alle Ausgangspuffer f\u00fcr diesen Zyklus auf den MCP23017 schreiben.\r\nIF myMaster.WriteBuffer() &lt;&gt; Hubo.ERROR.NO_ERROR THEN\r\n\u00a0\u00a0 \u00a0RETURN;\r\nEND_IF\r\n<\/pre>\n<p>Jeder der FB der Library bedarf einer einmaligen Initialisierung per <em>Initialize()<\/em>. Diese erfolgt zum Start des Programmes und verwirft Folgeaufrufe nach dem ersten Zyklus. Mittels <em>ReadBuffer()<\/em> werden die Eing\u00e4nge des MCP23017 sowie die Werte des Output-Latchregisters gelesen.<\/p>\n<p>Von nun an kann frei mit diesen Werten gearbeitet werden. Im vorliegenden Fall erfolgt eine einfache Zuweisung der Eingangswerte an die Variable <em>masterAusgang<\/em>. Mittels des Aufrufes von <em>SetOutputPortA(masterAusgang)<\/em> wird der Ausgangswert nun in den Puffer zur \u00dcbermittlung an die Ausg\u00e4nge \u00fcbertragen.<\/p>\n<p>Der Aufruf von <em>WriteBuffer()<\/em> \u00fcbertr\u00e4gt letztendlich die gepufferten Werte auf den MCP23017.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aufgabenstellung Die digitalen Eing\u00e4nge des Hubo sollen \u00fcber CODESYS eingelesen und direkt auf den Ausg\u00e4ngen ausgegeben werden. L\u00f6sung Deklarationsteil HuboDigitalIO ist der zur Steuerung der MCP23017 Portexpander zu verwendende FB. W\u00e4hrend der Deklaration \u00fcbergibt man die I2C-Adresse des Bausteins (0x20\u20260x27), das I2C Busmasterobjekt (das ist ein Standardobjekt bei Raspberry Pi\u2026<\/p>\n<p> <a class=\"continue-reading-link\" href=\"https:\/\/ftl-auerbach.lima-city.de\/Hubo\/automation\/codesys-integration\/codesys-digitale-ein-und-ausgaenge\/\"><span>Continue reading<\/span><i class=\"crycon-right-dir\"><\/i><\/a> <\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1127,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/ftl-auerbach.lima-city.de\/Hubo\/wp-json\/wp\/v2\/pages\/1146"}],"collection":[{"href":"https:\/\/ftl-auerbach.lima-city.de\/Hubo\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ftl-auerbach.lima-city.de\/Hubo\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ftl-auerbach.lima-city.de\/Hubo\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ftl-auerbach.lima-city.de\/Hubo\/wp-json\/wp\/v2\/comments?post=1146"}],"version-history":[{"count":13,"href":"https:\/\/ftl-auerbach.lima-city.de\/Hubo\/wp-json\/wp\/v2\/pages\/1146\/revisions"}],"predecessor-version":[{"id":1237,"href":"https:\/\/ftl-auerbach.lima-city.de\/Hubo\/wp-json\/wp\/v2\/pages\/1146\/revisions\/1237"}],"up":[{"embeddable":true,"href":"https:\/\/ftl-auerbach.lima-city.de\/Hubo\/wp-json\/wp\/v2\/pages\/1127"}],"wp:attachment":[{"href":"https:\/\/ftl-auerbach.lima-city.de\/Hubo\/wp-json\/wp\/v2\/media?parent=1146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}