{"id":15354,"date":"2025-05-23T13:30:41","date_gmt":"2025-05-23T13:30:41","guid":{"rendered":"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/"},"modified":"2025-12-23T09:45:28","modified_gmt":"2025-12-23T14:45:28","slug":"beckhoff-xts-part-5-stations","status":"publish","type":"post","link":"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/","title":{"rendered":"Beckhoff XTS Part 5: Stations"},"content":{"rendered":"\n<p>The previous entry in this series went over the Mover function block. Movers already give us a lot of options for how to control our XTS system, but typically we don\u2019t want to control movers based on which index in the array they are, we want to control them based on where they are along the track. That\u2019s what stations are for.<\/p>\n\n\n\n<p>This blog will go over the Beckhoff XTS Station block that comes with the base starter project. We will see how to configure the stations properly and what methods we have at our disposal to use with our system. 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>.<\/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\/latest-thinking\/blog\/id\/13704\/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\/latest-thinking\/blog\/id\/13706\/beckhoff-xts-part-2-setting-up-a-physical-xts-system\">Part 2 &#8211;&nbsp;Setting Up a Physical XTS System<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.dmcinfo.com\/latest-thinking\/blog\/id\/13712\/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\/latest-thinking\/blog\/id\/14734\/beckhoff-xts-part-4-movers\">Part 4 &#8211; Movers<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.dmcinfo.com\/latest-thinking\/blog\/id\/14736\/beckhoff-xts-part-6-position-triggers\">Part 6 &#8211; Position Triggers<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.dmcinfo.com\/latest-thinking\/blog\/id\/14737\/beckhoff-xts-part-7-customizing-logic\">Part 7 &#8211; Customizing Logic<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-stations\">Stations<\/h2>\n\n\n\n<p>Stations are defined positions along the XTS track where movers will stop until commanded to do something else. This allows for a mover to reach the station, have some actions performed on it while stationary, then to be sent elsewhere on the track.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-declaring-stations\">Declaring Stations<\/h3>\n\n\n\n<p>In MAIN, in the variable declaration we already have an array of stations declared with the line<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e\"><span style=\"background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e\">Structured Text<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>Station : ARRAY&#91;0..GVL.NUM_STATIONS - 1&#93; OF Station;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C8C8C8\">Station<\/span><span style=\"color: #D4D4D4\"> : <\/span><span style=\"color: #4FC1FF\">ARRAY<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">0.<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #4FC1FF\">GVL<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #4FC1FF\">NUM_STATIONS<\/span><span style=\"color: #D4D4D4\"> - <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">&#93; <\/span><span style=\"color: #4FC1FF\">OF<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>If you want to add more stations, you can change the value of <code>NUM_STATIONS<\/code> in the <code>GVL<\/code> file. There\u2019s advantages and disadvantages to having your stations in an array. The advantages are that they\u2019re all stored in one place, the name is consistent across various stations, and it\u2019s easy to iterate through all the stations if needed. Additionally, adding stations between two existing stations is as easy as shifting the other stations in the array up an index. The disadvantage is that the station names are not going to be as descriptive as they could be if they were individually named. For this blog, we\u2019re going to continue using the array of stations.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-configuring-stations\">Configuring Stations<\/h3>\n\n\n\n<p>The existing starter project already has 5 stations configured, shown below:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"624\" height=\"336\" src=\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/09135405\/configuring-stations.png-1.webp\" alt=\"configuring stations\" class=\"wp-image-36429\" srcset=\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/09135405\/configuring-stations.png-1.webp 624w, https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/09135405\/configuring-stations.png-1-300x162.webp 300w\" sizes=\"(max-width: 624px) 100vw, 624px\" \/><\/figure>\n\n\n\n<p>The position definition for these stations is in the MS_INTIIALIZING_OBJECTIVES section of the MAIN state machine, which is at line 109.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-start:109;--cbp-line-number-width:calc(3 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e\"><span style=\"background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e\">Structured Text<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>Station&#91;0&#93;.Position := 5;\nStation&#91;1&#93;.Position := 750;\nStation&#91;2&#93;.Position := 1200;\nStation&#91;3&#93;.Position := 1300;\nStation&#91;4&#93;.Position := 1400;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #9CDCFE\">Position<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #B5CEA8\">5<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #9CDCFE\">Position<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #B5CEA8\">750<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #9CDCFE\">Position<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #B5CEA8\">1200<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #9CDCFE\">Position<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #B5CEA8\">1300<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #9CDCFE\">Position<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #B5CEA8\">1400<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>We can see that the stations are given positions (in mm) around the track that line up with the picture above. Changing these positions will change where along the track the stations exist.<\/p>\n\n\n\n<p>We also need to make sure to call the CyclicLogic method of the station object. This is already done for us in line 414.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-start:414;--cbp-line-number-width:calc(3 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e\"><span style=\"background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e\">Structured Text<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>FOR i := 0 TO GVL.NUM_STATIONS - 1 DO\n  Station&#91;i&#93;.Cyclic();\nEND_FOR<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #4FC1FF\">FOR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C8C8C8\">i<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">TO<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">GVL<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #4FC1FF\">NUM_STATIONS<\/span><span style=\"color: #D4D4D4\"> - <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">DO<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #9CDCFE\">i<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #DCDCAA\">Cyclic<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #4FC1FF\">END_FOR<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>One other thing these stations are already configured to do is to unregister movers on stopping or disabling. This will make sure that no movers are \u201ctrapped\u201d at stations when the system starts back up. This is done in lines 327 and 362 by calling the UnregisterAll method for each station.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-start:327;--cbp-line-number-width:calc(3 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e\"><span style=\"background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e\">Structured Text<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>FOR i := 0 TO GVL.NUM_STATIONS - 1 DO\n  Station&#91;i&#93;.UnregisterAll();\nEND_FOR<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #4FC1FF\">FOR<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C8C8C8\">i<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">TO<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">GVL<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #4FC1FF\">NUM_STATIONS<\/span><span style=\"color: #D4D4D4\"> - <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">DO<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #9CDCFE\">i<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #DCDCAA\">UnregisterAll<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #4FC1FF\">END_FOR<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-station-logic\">Station Logic<\/h3>\n\n\n\n<p>The existing starter project already has some stations logic. The logic for these stations is in the MS_RUN section of the MAIN state machine, which starts at line 212. There\u2019s a couple methods and properties about the station objects that are useful to describe to interpret this code.<\/p>\n\n\n\n<p><em>MoverInPosition<\/em><\/p>\n\n\n\n<p>MoverInPosition is a property of the station object. This property is true if a mover has arrived at the station. This is important to check before trying to do anything with a station\u2019s mover because if there is no mover in the station, the code will try to command an invalid mover reference.<\/p>\n\n\n\n<p><em>CurrentMover<\/em><\/p>\n\n\n\n<p>CurrentMover is a property of the station object. This property is a reference to the mover that is currently at the station. This allows commands to the movers to go through the stations so logic can be configured on a station level rather than on a mover level.<\/p>\n\n\n\n<p>With these methods and properties, we can better understand what the existing stations are doing.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-start:212;--cbp-line-number-width:calc(3 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e\"><span style=\"background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e\">Structured Text<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/ Station 0 Logic\nIF Station&#91;0&#93;.MoverInPosition THEN\n  StationTimer&#91;0&#93;(IN := TRUE, PT := T#1000MS);\n  IF StationTimer&#91;0&#93;.Q THEN\n    Station&#91;0&#93;.CurrentMover.SetVelocity(mediumVelocity);\n    Station&#91;0&#93;.CurrentMover.MoveToStation(Station&#91;1&#93;);\n  END_IF\nELSE\n  StationTimer&#91;0&#93;(IN := FALSE);\nEND_IF<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\">\/\/ Station 0 Logic<\/span><\/span>\n<span class=\"line\"><span style=\"color: #4FC1FF\">IF<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #9CDCFE\">MoverInPosition<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">THEN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #9CDCFE\">StationTimer<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">&#93;(<\/span><span style=\"color: #4FC1FF\">IN<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #4FC1FF\">TRUE<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #4FC1FF\">PT<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #4FC1FF\">T<\/span><span style=\"color: #D4D4D4\">#1000<\/span><span style=\"color: #4FC1FF\">MS<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #4FC1FF\">IF<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">StationTimer<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #4FC1FF\">Q<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">THEN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #9CDCFE\">CurrentMover<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">SetVelocity<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">mediumVelocity<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #9CDCFE\">CurrentMover<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">MoveToStation<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">&#93;);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #4FC1FF\">END_IF<\/span><\/span>\n<span class=\"line\"><span style=\"color: #4FC1FF\">ELSE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #9CDCFE\">StationTimer<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">&#93;(<\/span><span style=\"color: #4FC1FF\">IN<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #4FC1FF\">FALSE<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #4FC1FF\">END_IF<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Station 0 is straightforward. Once a mover arrives, the logic waits for 1 second before setting the velocity to medium velocity and sending the mover to station 1.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-start:223;--cbp-line-number-width:calc(3 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e\"><span style=\"background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e\">Structured Text<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/ Station 1 Logic\nIF Station&#91;1&#93;.MoverInPosition THEN\n  StationTimer&#91;1&#93;(IN := TRUE, PT := T#250MS);\n  IF StationTimer&#91;1&#93;.Q THEN\n    Station&#91;1&#93;.CurrentMover.SetVelocity(mediumVelocity);\n    Station&#91;1&#93;.CurrentMover.MoveToStation(Station&#91;nextStation&#93;);\n    nextStation := nextStation - 1;\n    IF nextStation = 1 THEN\n      nextStation := 4;\n    END_IF\n  END_IF\nELSE\n  StationTimer&#91;1&#93;(IN := FALSE);\nEND_IF<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\">\/\/ Station 1 Logic<\/span><\/span>\n<span class=\"line\"><span style=\"color: #4FC1FF\">IF<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #9CDCFE\">MoverInPosition<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">THEN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #9CDCFE\">StationTimer<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">&#93;(<\/span><span style=\"color: #4FC1FF\">IN<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #4FC1FF\">TRUE<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #4FC1FF\">PT<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #4FC1FF\">T<\/span><span style=\"color: #D4D4D4\">#250<\/span><span style=\"color: #4FC1FF\">MS<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #4FC1FF\">IF<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">StationTimer<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #4FC1FF\">Q<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">THEN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #9CDCFE\">CurrentMover<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">SetVelocity<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">mediumVelocity<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #9CDCFE\">CurrentMover<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">MoveToStation<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #9CDCFE\">nextStation<\/span><span style=\"color: #D4D4D4\">&#93;);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #C8C8C8\">nextStation<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #9CDCFE\">nextStation<\/span><span style=\"color: #D4D4D4\"> - <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4FC1FF\">IF<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">nextStation<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">THEN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #C8C8C8\">nextStation<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4FC1FF\">END_IF<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #4FC1FF\">END_IF<\/span><\/span>\n<span class=\"line\"><span style=\"color: #4FC1FF\">ELSE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #9CDCFE\">StationTimer<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">&#93;(<\/span><span style=\"color: #4FC1FF\">IN<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #4FC1FF\">FALSE<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #4FC1FF\">END_IF<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Station 1 has some similar logic. It only waits for 250 milliseconds and then rotates through sending to station 4, then station 3, then station 2, then back to station 4. This is a great example of how you can use the XTS system to multi-task with processes that have higher cycle times.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-start:238;--cbp-line-number-width:calc(3 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e\"><span style=\"background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e\">Structured Text<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/ Group of Stations 2, 3, and 4 Logic\nIF Station&#91;2&#93;.MoverInPosition AND Station&#91;3&#93;.MoverInPosition AND Station&#91;4&#93;.MoverInPosition THEN\n  StationTimer&#91;2&#93;(IN := TRUE, PT := T#750MS);\n  IF StationTimer&#91;2&#93;.Q THEN\n    StationTimer&#91;2&#93;(IN := FALSE);\n\n    Station&#91;2&#93;.CurrentMover.MoveVelocity(500);\n    Station&#91;3&#93;.CurrentMover.MoveVelocity(500);\n    Station&#91;4&#93;.CurrentMover.MoveVelocity(500);\n  END_IF\nEND_IF<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\">\/\/ Group of Stations 2, 3, and 4 Logic<\/span><\/span>\n<span class=\"line\"><span style=\"color: #4FC1FF\">IF<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #9CDCFE\">MoverInPosition<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">AND<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #9CDCFE\">MoverInPosition<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">AND<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #9CDCFE\">MoverInPosition<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">THEN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #9CDCFE\">StationTimer<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">&#93;(<\/span><span style=\"color: #4FC1FF\">IN<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #4FC1FF\">TRUE<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #4FC1FF\">PT<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #4FC1FF\">T<\/span><span style=\"color: #D4D4D4\">#750<\/span><span style=\"color: #4FC1FF\">MS<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #4FC1FF\">IF<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">StationTimer<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #4FC1FF\">Q<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4FC1FF\">THEN<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">StationTimer<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">&#93;(<\/span><span style=\"color: #4FC1FF\">IN<\/span><span style=\"color: #D4D4D4\"> := <\/span><span style=\"color: #4FC1FF\">FALSE<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #9CDCFE\">CurrentMover<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">MoveVelocity<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">500<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #9CDCFE\">CurrentMover<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">MoveVelocity<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">500<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #9CDCFE\">Station<\/span><span style=\"color: #D4D4D4\">&#91;<\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">&#93;.<\/span><span style=\"color: #9CDCFE\">CurrentMover<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">MoveVelocity<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">500<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #4FC1FF\">END_IF<\/span><\/span>\n<span class=\"line\"><span style=\"color: #4FC1FF\">END_IF<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Stations 2 through 4 have their logic combined since they\u2019re intended to be parallel processes. Once a mover has arrived in each of the three stations, the logic waits for 750 milliseconds before commanding all three movers to move at 500mm\/s.<\/p>\n\n\n\n<p>If we\u2019re commanding these movers to move at 500mm\/s until they receive another command, how will they ever stop? The first answer is that they have collision avoidance, so the movers will stop if they would run into a mover ahead of them. The second answer is that we have position triggers further along the track to give them new commands. In the next blog in this series, we will go over position triggers.<\/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=\"https:\/\/www.dmcinfo.com\/contact#get-in-touch\">Contact us today<\/a> to learn more about our solutions and how we can help you achieve your goals.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The previous entry in this series went over the Mover function block. Movers already give us a lot of options for how to control our XTS system, but typically we don\u2019t want to control movers based on which index in the array they are, we want to control them based on where they are along [&hellip;]<\/p>\n","protected":false},"author":77,"featured_media":15355,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[733,731,732],"tags":[],"class_list":["post-15354","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 5: Stations | DMC, Inc.<\/title>\n<meta name=\"description\" content=\"Learn how DMC, Inc. configures and uses the Beckhoff XTS Station block for location-based mover control.\" \/>\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\/15354\/beckhoff-xts-part-5-stations\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Beckhoff XTS Part 5: Stations\" \/>\n<meta property=\"og:description\" content=\"Learn how DMC, Inc. configures and uses the Beckhoff XTS Station block for location-based mover control.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/\" \/>\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-05-23T13:30:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-12-23T14:45:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165346\/1_beckhoff-blog-template.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=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/\"},\"author\":{\"name\":\"Carter Silvey\",\"@id\":\"https:\/\/www.dmcinfo.com\/#\/schema\/person\/d91de4b6b9fb5fa6d04183d3898c5081\"},\"headline\":\"Beckhoff XTS Part 5: Stations\",\"datePublished\":\"2025-05-23T13:30:41+00:00\",\"dateModified\":\"2025-12-23T14:45:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/\"},\"wordCount\":920,\"publisher\":{\"@id\":\"https:\/\/www.dmcinfo.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165346\/1_beckhoff-blog-template.png\",\"articleSection\":[\"Beckhoff PLC\",\"Manufacturing Automation &amp; Intelligence\",\"PLC\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/\",\"url\":\"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/\",\"name\":\"Beckhoff XTS Part 5: Stations | DMC, Inc.\",\"isPartOf\":{\"@id\":\"https:\/\/www.dmcinfo.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165346\/1_beckhoff-blog-template.png\",\"datePublished\":\"2025-05-23T13:30:41+00:00\",\"dateModified\":\"2025-12-23T14:45:28+00:00\",\"description\":\"Learn how DMC, Inc. configures and uses the Beckhoff XTS Station block for location-based mover control.\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/#primaryimage\",\"url\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165346\/1_beckhoff-blog-template.png\",\"contentUrl\":\"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165346\/1_beckhoff-blog-template.png\",\"width\":925,\"height\":400,\"caption\":\"beckhoff blog template\"},{\"@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 5: Stations | DMC, Inc.","description":"Learn how DMC, Inc. configures and uses the Beckhoff XTS Station block for location-based mover control.","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\/15354\/beckhoff-xts-part-5-stations\/","og_locale":"en_US","og_type":"article","og_title":"Beckhoff XTS Part 5: Stations","og_description":"Learn how DMC, Inc. configures and uses the Beckhoff XTS Station block for location-based mover control.","og_url":"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/","og_site_name":"DMC, Inc.","article_publisher":"https:\/\/www.facebook.com\/pages\/DMC-Inc\/107982009242929","article_published_time":"2025-05-23T13:30:41+00:00","article_modified_time":"2025-12-23T14:45:28+00:00","og_image":[{"width":925,"height":400,"url":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165346\/1_beckhoff-blog-template.png","type":"image\/png"}],"author":"Carter Silvey","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Carter Silvey","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/#article","isPartOf":{"@id":"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/"},"author":{"name":"Carter Silvey","@id":"https:\/\/www.dmcinfo.com\/#\/schema\/person\/d91de4b6b9fb5fa6d04183d3898c5081"},"headline":"Beckhoff XTS Part 5: Stations","datePublished":"2025-05-23T13:30:41+00:00","dateModified":"2025-12-23T14:45:28+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/"},"wordCount":920,"publisher":{"@id":"https:\/\/www.dmcinfo.com\/#organization"},"image":{"@id":"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165346\/1_beckhoff-blog-template.png","articleSection":["Beckhoff PLC","Manufacturing Automation &amp; Intelligence","PLC"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/","url":"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/","name":"Beckhoff XTS Part 5: Stations | DMC, Inc.","isPartOf":{"@id":"https:\/\/www.dmcinfo.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/#primaryimage"},"image":{"@id":"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165346\/1_beckhoff-blog-template.png","datePublished":"2025-05-23T13:30:41+00:00","dateModified":"2025-12-23T14:45:28+00:00","description":"Learn how DMC, Inc. configures and uses the Beckhoff XTS Station block for location-based mover control.","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dmcinfo.com\/blog\/15354\/beckhoff-xts-part-5-stations\/#primaryimage","url":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165346\/1_beckhoff-blog-template.png","contentUrl":"https:\/\/cdn.dmcinfo.com\/wp-content\/uploads\/2025\/05\/27165346\/1_beckhoff-blog-template.png","width":925,"height":400,"caption":"beckhoff blog template"},{"@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\/15354","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=15354"}],"version-history":[{"count":4,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/posts\/15354\/revisions"}],"predecessor-version":[{"id":36553,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/posts\/15354\/revisions\/36553"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/media\/15355"}],"wp:attachment":[{"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/media?parent=15354"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/categories?post=15354"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dmcinfo.com\/wp-json\/wp\/v2\/tags?post=15354"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}