{"id":15346,"date":"2025-06-12T14:55:56","date_gmt":"2025-06-12T14:55:56","guid":{"rendered":"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/"},"modified":"2025-12-23T09:45:23","modified_gmt":"2025-12-23T14:45:23","slug":"beckhoff-xts-part-7-customizing-logic","status":"publish","type":"post","link":"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/","title":{"rendered":"Beckhoff XTS Part 7: Customizing Logic"},"content":{"rendered":"\n<p>In previous entries of this blog series, we went over the <a href=\"https:\/\/www.dmcinfo.com\/blog\/15357\/beckhoff-xts-part-4-movers\/\">Mover<\/a>, <a href=\"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/\">Station<\/a>, and <a href=\"https:\/\/www.dmcinfo.com\/blog\/15350\/beckhoff-xts-part-6-position-triggers\/\">PositionTrigger<\/a> function blocks. Now that we understand these function blocks better, let&#8217;s use them to write our own Beckhoff XTS custom logic.<\/p>\n\n\n\n<p>This blog will continue to use the <a href=\"https:\/\/github.com\/Beckhoff-USA-Community\/XTS_Base\/tree\/master\">Beckhoff XTS_Base GitHub<\/a> and the large <a href=\"https:\/\/www.beckhoff.com\/nl-be\/products\/motion\/xts-linear-product-transport\/xts-starter-kits\/at2000-1500-0170.html\">XTS starter kit<\/a>.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-beckhoff-xts-series\">Beckhoff XTS Series<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.dmcinfo.com\/blog\/15666\/beckhoff-xts-part-1-downloads-and-starter-project\/\">Part 1 &#8211; Downloads and Starter Project<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.dmcinfo.com\/blog\/15650\/beckhoff-xts-part-2-setting-up-a-physical-xts-system\/\">Part 2 &#8211;\u00a0Setting Up a Physical XTS System<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.dmcinfo.com\/blog\/15598\/beckhoff-xts-part-3-simulation-and-plc-logic\/\">Part 3 &#8211; Simulation and PLC Logic<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.dmcinfo.com\/blog\/15357\/beckhoff-xts-part-4-movers\/\">Part 4 &#8211; Movers<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/\">Part 5 &#8211; Stations<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.dmcinfo.com\/blog\/15350\/beckhoff-xts-part-6-position-triggers\/\">Part 6 &#8211; Position Triggers<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-customizing-the-logic\">Customizing the Logic<\/h2>\n\n\n\n<p>Let\u2019s update this logic to customize our system a bit more. For my system, I\u2019m going to have stations and position triggers at the following places:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"624\" height=\"335\" src=\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/06\/09134126\/customizing-logic-image1.png.webp\" alt=\"customizing logic\" class=\"wp-image-36425\" srcset=\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/06\/09134126\/customizing-logic-image1.png.webp 624w, https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/06\/09134126\/customizing-logic-image1.png-300x161.webp 300w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-update-the-station-and-position-trigger-positions\">Update the Station and Position Trigger Positions<\/h3>\n\n\n\n<p>Remove the existing station and position trigger definitions on lines 108-117 and replace it with the following:<br><br>\/\/ Initialize station positions<br>Station[0].Position := 5;<br>Station[1].Position := 3200;<br>Station[2].Position := 3300;<br>Station[3].Position := 3400;<br>Station[4].Position := 3500;<br><br>PositionTrigger[0].Position := 1500;<br>PositionTrigger[1].Position := 2000;<br><\/p>\n\n\n\n<p>This will define the stations and position triggers as shown above.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-updating-the-station-and-position-trigger-logic\">Updating the Station and Position Trigger Logic<\/h3>\n\n\n\n<p>Next, we need to update the logic of these stations and position triggers to get them to behave as we want. For this application, let\u2019s have the mover run at high velocity across the top rail, then go down to the low velocity around the bend. Once it clears the bend, it can go back up to the medium velocity until it reaches the next station. Once we have a mover in each of the four bottom left stations, send them all back to station 0. Replacing lines 210-265 with the following code will do that:<br><br>\/\/ Station 0 Logic<br>IF Station[0].MoverInPosition THEN<br>\u00a0\u00a0 \u00a0StationTimer[0](IN := TRUE, PT := T#1000MS);<br>\u00a0\u00a0 \u00a0IF StationTimer[0].Q THEN<br>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Station[0].CurrentMover.MoveVelocity(highVelocity);<br>\u00a0\u00a0 \u00a0END_IF<br>ELSE<br>\u00a0\u00a0 \u00a0StationTimer[0](IN := FALSE);<br>END_IF<br>\u00a0\u00a0 \u00a0\/\/ Position Trigger 0 Logic<br>IF PositionTrigger[0].MoverPassedPosition THEN<br>\u00a0\u00a0 \u00a0PositionTrigger[0].CurrentMover.SetVelocity(lowVelocity);<br>\u00a0\u00a0 \u00a0PositionTrigger[0].MuteCurrent();<br>END_IF<br>\u00a0\u00a0 \u00a0\/\/ Position Trigger 1 Logic<br>IF PositionTrigger[1].MoverPassedPosition THEN<br>\u00a0\u00a0 \u00a0PositionTrigger[1].CurrentMover.SetVelocity(mediumVelocity);<br>\u00a0\u00a0 \u00a0PositionTrigger[1].CurrentMover.MoveToStation(Station[nextStation]);<br>\u00a0\u00a0 \u00a0nextStation := nextStation &#8211; 1;<br>\u00a0\u00a0 \u00a0IF nextStation = 0 THEN<br>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0nextStation := 4;<br>\u00a0\u00a0 \u00a0END_IF<br>\u00a0\u00a0 \u00a0PositionTrigger[1].MuteCurrent();<br>END_IF<br><br>\/\/ Group of Stations 1, 2, 3, and 4 Logic<br>IF Station[1].MoverInPosition AND Station[2].MoverInPosition AND Station[3].MoverInPosition AND Station[4].MoverInPosition THEN<br>\u00a0\u00a0 \u00a0StationTimer[1](IN := TRUE, PT := T#750MS);<br>\u00a0\u00a0 \u00a0IF StationTimer[1].Q THEN<br>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0StationTimer[1](IN := FALSE);<br>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Station[1].CurrentMover.MoveToStation(Station[0]);<br>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Station[2].CurrentMover.MoveToStation(Station[0]);<br>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Station[3].CurrentMover.MoveToStation(Station[0]);<br>\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Station[4].CurrentMover.MoveToStation(Station[0]);<br>\u00a0\u00a0 \u00a0END_IF<br>END_IF<br><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-execute-the-new-code\">Execute the New Code<\/h3>\n\n\n\n<p>Save the new code and activate the configuration. After logging in, you should be able to open the Controls visualization, press the Enable button, and then the Start button to start seeing the movers follow the new logic.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"624\" height=\"234\" src=\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/06\/09134228\/customizing-logic-video1.png.webp\" alt=\"customizing logic executing the new code\" class=\"wp-image-36427\" srcset=\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/06\/09134228\/customizing-logic-video1.png.webp 624w, https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/06\/09134228\/customizing-logic-video1.png-300x113.webp 300w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/figure>\n\n\n\n<p>This is just an example of the many customizations you can make to your XTS system. There\u2019s even more functionality that comes with this starter project, though. In the next entry in this blog series, we will go over zones and add those to our custom logic.<\/p>\n\n\n\n<p>If you\u2019d like help with the next steps for your XTS system, DMC is proud to be a Beckhoff System Integrator and has worked on multiple XTS projects and applications. Learn more about our <a href=\"https:\/\/www.dmcinfo.com\/about\/partners\/beckhoff-integrator-group\">Beckhoff partnership<\/a> and <a href=\"https:\/\/www.dmcinfo.com\/contact\">contact us<\/a> for your next project.<\/p>\n\n\n\n<p><strong>Ready to take your <a href=\"https:\/\/www.dmcinfo.com\/services\/manufacturing-automation-and-intelligence\">Automation<\/a> project to the next level? <a href=\"http:\/\/www.dmcinfo.com\/contact\">Contact us<\/a> today to learn more about our solutions and how we can help you achieve your goals.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In previous entries of this blog series, we went over the Mover, Station, and PositionTrigger function blocks. Now that we understand these function blocks better, let&#8217;s use them to write our own Beckhoff XTS custom logic. This blog will continue to use the Beckhoff XTS_Base GitHub and the large XTS starter kit.&nbsp; Beckhoff XTS Series [&hellip;]<\/p>\n","protected":false},"author":77,"featured_media":15347,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[733,731,732],"tags":[],"class_list":["post-15346","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-beckhoff-plc","category-manufacturing-automation-intelligence","category-plc"],"yoast_head":"<title>Beckhoff XTS Part 7: Customizing Logic | DMC, Inc.<\/title>\n<meta name=\"description\" content=\"Learn how DMC, Inc. customizes logic for Beckhoff XTS using Stations and Position Triggers in this step-by-step programming guide with code.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Beckhoff XTS Part 7: Customizing Logic\" \/>\n<meta property=\"og:description\" content=\"Learn how DMC, Inc. customizes logic for Beckhoff XTS using Stations and Position Triggers in this step-by-step programming guide with code.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/\" \/>\n<meta property=\"og:site_name\" content=\"DMC, Inc.\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/pages\/DMC-Inc\/107982009242929\" \/>\n<meta property=\"article:published_time\" content=\"2025-06-12T14:55:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-23T14:45:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165349\/beckhoff-blog-template-Recovered.png\" \/>\n\t<meta property=\"og:image:width\" content=\"925\" \/>\n\t<meta property=\"og:image:height\" content=\"400\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Carter Silvey\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carter Silvey\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/\"},\"author\":{\"name\":\"Carter Silvey\",\"@id\":\"https:\/\/www.dmcinfo.com\/#\/schema\/person\/d91de4b6b9fb5fa6d04183d3898c5081\"},\"headline\":\"Beckhoff XTS Part 7: Customizing Logic\",\"datePublished\":\"2025-06-12T14:55:56+00:00\",\"dateModified\":\"2025-12-23T14:45:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/\"},\"wordCount\":557,\"publisher\":{\"@id\":\"https:\/\/www.dmcinfo.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165349\/beckhoff-blog-template-Recovered.png\",\"articleSection\":[\"Beckhoff PLC\",\"Manufacturing Automation &amp; Intelligence\",\"PLC\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/\",\"url\":\"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/\",\"name\":\"Beckhoff XTS Part 7: Customizing Logic | DMC, Inc.\",\"isPartOf\":{\"@id\":\"https:\/\/www.dmcinfo.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165349\/beckhoff-blog-template-Recovered.png\",\"datePublished\":\"2025-06-12T14:55:56+00:00\",\"dateModified\":\"2025-12-23T14:45:23+00:00\",\"description\":\"Learn how DMC, Inc. customizes logic for Beckhoff XTS using Stations and Position Triggers in this step-by-step programming guide with code.\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/#primaryimage\",\"url\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165349\/beckhoff-blog-template-Recovered.png\",\"contentUrl\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165349\/beckhoff-blog-template-Recovered.png\",\"width\":925,\"height\":400,\"caption\":\"beckhoff blog template-Recovered\"},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dmcinfo.com\/#website\",\"url\":\"https:\/\/www.dmcinfo.com\/\",\"name\":\"DMC, Inc.\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.dmcinfo.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dmcinfo.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.dmcinfo.com\/#organization\",\"name\":\"DMC, Inc.\",\"url\":\"https:\/\/www.dmcinfo.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dmcinfo.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27171146\/dmc-logo-1.png\",\"contentUrl\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27171146\/dmc-logo-1.png\",\"width\":418,\"height\":167,\"caption\":\"DMC, Inc.\"},\"image\":{\"@id\":\"https:\/\/www.dmcinfo.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/pages\/DMC-Inc\/107982009242929\",\"https:\/\/www.instagram.com\/dmcengineering\",\"https:\/\/www.youtube.com\/DMCEngineering\",\"https:\/\/www.linkedin.com\/company\/dmc-engineering\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dmcinfo.com\/#\/schema\/person\/d91de4b6b9fb5fa6d04183d3898c5081\",\"name\":\"Carter Silvey\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dmcinfo.com\/#\/schema\/person\/image\/\",\"url\":\"\/\/www.dmcinfo.com\/wp-content\/uploads\/wpo365\/profile-images\/77.png\",\"contentUrl\":\"\/\/www.dmcinfo.com\/wp-content\/uploads\/wpo365\/profile-images\/77.png\",\"caption\":\"Carter Silvey\"},\"url\":\"https:\/\/www.dmcinfo.com\/blog\/author\/carters\/\"}]}<\/script>","yoast_head_json":{"title":"Beckhoff XTS Part 7: Customizing Logic | DMC, Inc.","description":"Learn how DMC, Inc. customizes logic for Beckhoff XTS using Stations and Position Triggers in this step-by-step programming guide with code.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/","og_locale":"en_US","og_type":"article","og_title":"Beckhoff XTS Part 7: Customizing Logic","og_description":"Learn how DMC, Inc. customizes logic for Beckhoff XTS using Stations and Position Triggers in this step-by-step programming guide with code.","og_url":"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/","og_site_name":"DMC, Inc.","article_publisher":"https:\/\/www.facebook.com\/pages\/DMC-Inc\/107982009242929","article_published_time":"2025-06-12T14:55:56+00:00","article_modified_time":"2025-12-23T14:45:23+00:00","og_image":[{"width":925,"height":400,"url":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165349\/beckhoff-blog-template-Recovered.png","type":"image\/png"}],"author":"Carter Silvey","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Carter Silvey","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/#article","isPartOf":{"@id":"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/"},"author":{"name":"Carter Silvey","@id":"https:\/\/www.dmcinfo.com\/#\/schema\/person\/d91de4b6b9fb5fa6d04183d3898c5081"},"headline":"Beckhoff XTS Part 7: Customizing Logic","datePublished":"2025-06-12T14:55:56+00:00","dateModified":"2025-12-23T14:45:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/"},"wordCount":557,"publisher":{"@id":"https:\/\/www.dmcinfo.com\/#organization"},"image":{"@id":"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165349\/beckhoff-blog-template-Recovered.png","articleSection":["Beckhoff PLC","Manufacturing Automation &amp; Intelligence","PLC"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/","url":"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/","name":"Beckhoff XTS Part 7: Customizing Logic | DMC, Inc.","isPartOf":{"@id":"https:\/\/www.dmcinfo.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/#primaryimage"},"image":{"@id":"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165349\/beckhoff-blog-template-Recovered.png","datePublished":"2025-06-12T14:55:56+00:00","dateModified":"2025-12-23T14:45:23+00:00","description":"Learn how DMC, Inc. customizes logic for Beckhoff XTS using Stations and Position Triggers in this step-by-step programming guide with code.","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dmcinfo.com\/blog\/15346\/beckhoff-xts-part-7-customizing-logic\/#primaryimage","url":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165349\/beckhoff-blog-template-Recovered.png","contentUrl":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165349\/beckhoff-blog-template-Recovered.png","width":925,"height":400,"caption":"beckhoff blog template-Recovered"},{"@type":"WebSite","@id":"https:\/\/www.dmcinfo.com\/#website","url":"https:\/\/www.dmcinfo.com\/","name":"DMC, Inc.","description":"","publisher":{"@id":"https:\/\/www.dmcinfo.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dmcinfo.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.dmcinfo.com\/#organization","name":"DMC, Inc.","url":"https:\/\/www.dmcinfo.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dmcinfo.com\/#\/schema\/logo\/image\/","url":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27171146\/dmc-logo-1.png","contentUrl":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27171146\/dmc-logo-1.png","width":418,"height":167,"caption":"DMC, Inc."},"image":{"@id":"https:\/\/www.dmcinfo.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/pages\/DMC-Inc\/107982009242929","https:\/\/www.instagram.com\/dmcengineering","https:\/\/www.youtube.com\/DMCEngineering","https:\/\/www.linkedin.com\/company\/dmc-engineering"]},{"@type":"Person","@id":"https:\/\/www.dmcinfo.com\/#\/schema\/person\/d91de4b6b9fb5fa6d04183d3898c5081","name":"Carter Silvey","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dmcinfo.com\/#\/schema\/person\/image\/","url":"\/\/www.dmcinfo.com\/wp-content\/uploads\/wpo365\/profile-images\/77.png","contentUrl":"\/\/www.dmcinfo.com\/wp-content\/uploads\/wpo365\/profile-images\/77.png","caption":"Carter Silvey"},"url":"https:\/\/www.dmcinfo.com\/blog\/author\/carters\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/posts\/15346","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/users\/77"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/comments?post=15346"}],"version-history":[{"count":5,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/posts\/15346\/revisions"}],"predecessor-version":[{"id":36428,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/posts\/15346\/revisions\/36428"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/media\/15347"}],"wp:attachment":[{"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/media?parent=15346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/categories?post=15346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/tags?post=15346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}