{"id":5075,"date":"2024-10-24T10:14:19","date_gmt":"2024-10-24T10:14:19","guid":{"rendered":"https:\/\/webprojects.cloud\/wordpress\/splatco\/?page_id=5075"},"modified":"2025-07-11T12:26:18","modified_gmt":"2025-07-11T12:26:18","slug":"compare-with-other-languages","status":"publish","type":"page","link":"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/compare-with-other-languages\/","title":{"rendered":"Compare with other languages"},"content":{"rendered":"\n<p>We believe SPLat&#8217;s programming language is the easiest in the world for embedded OEM control applications. SPLat&#8217;s language was originally devised, and has evolved over time, with&nbsp;<em>embedded machine control<\/em>&nbsp;as its main driver.<\/p>\n\n\n\n<p>The example below shows off just a few of the language features that make SPLat so easy for control programming.&nbsp;<strong>Compared to C, Basic<\/strong>&nbsp;and other general purpose computer languages, SPLat focusses on those language elements that are important for programing&nbsp;<em>controls<\/em>, which is very different to general computing. SPLat lets you express the concepts of logic, sequence and time quickly and easily.&nbsp;<strong>Compared to ladder<\/strong>, SPLat lets you tell the controller&nbsp;<em>what to do<\/em>, rather than&nbsp;<em>what to be<\/em>&nbsp;(in ladder you emulate a circuit made up of relays, timers etc, so in reality you are designing a circuit that will solve the problem rather than simply solving the problem directly).<\/p>\n\n\n\n<h6 class=\"wp-block-heading\">&#8230; You compare, you decide!<\/h6>\n\n\n\n<p>In the two side-by-side windows below you can compare the same program written in several languages that are used for programming controls. Just click on the language names to select.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><a href=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/what-the-program-does\/\">What the program does<\/a> |\u00a0<a href=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/is-this-comparison-honest\/\">Is this comparison honest?<\/a> |\u00a0<a href=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wheres-my-favourite-language\/\">What about my favourite language?<\/a><\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Click a key word below to show the code<\/p>\n\n\n<div ><style id=\"sp_tab_dynamic_style5685\">#sp-tabpro-wrapper_5685.sp-tab__lay-default .sp-tab__tab-content {width: 100%;}#sp-tabpro-wrapper_5685 .animated {-webkit-animation-duration: 500ms;animation-duration: 500ms;}#sp-wp-tabs-wrapper_5685 .sp-tab__nav {justify-content: start;}#sp-wp-tabs-wrapper_5685.sp-tab__lay-default.sp-tab__horizontal-bottom {display: flex;flex-direction: column-reverse;}#sp-wp-tabs-wrapper_5685.sp-tab__lay-default.sp-tab__horizontal-bottom > ul {border-top: 1px solid #cccccc;border-bottom: 0;margin-top: 0;}#sp-wp-tabs-wrapper_5685.sp-tab__lay-default.sp-tab__horizontal-bottom > ul > li .sp-tab__nav-link.sp-tab__active {border-color: transparent #cccccc#cccccc;margin-top: -1px;}#sp-wp-tabs-wrapper_5685.sp-tab__lay-default.sp-tab__horizontal-bottom > ul > li .sp-tab__nav-link,#sp-wp-tabs-wrapper_5685.sp-tab__lay-default.sp-tab__horizontal-bottom > ul > li a,#sp-wp-tabs-wrapper_5685.sp-tab__lay-default.sp-tab__horizontal-bottom > ul > .sp-tab__nav-item {border-top: 0;border-top-left-radius: 0;border-top-right-radius: 0;border-bottom-left-radius: 2px;border-bottom-right-radius: 2px;}#sp-wp-tabs-wrapper_5685.sp-tab__lay-default.sp-tab__horizontal-bottom > ul {border-bottom: none;}#sp-wp-tabs-wrapper_5685.sp-tab__lay-default.sp-tab__horizontal-bottom .sp-tab__tab-content .sp-tab__tab-pane {border-top: 1px solid #cccccc;border-bottom: 0;}#sp-wp-tabs-wrapper_5685.sp-tab__lay-default .sp-tab__tab-content .sp-tab-content > ul,#sp-wp-tabs-wrapper_5685.sp-tab__lay-default .sp-tab__tab-content .sp-tab-content > ol {border-bottom: none;}#sp-wp-tabs-wrapper_5685 > .sp-tab__nav-tabs .sp-tab__nav-link.sp-tab__active .sp-tab__tab_title,#sp-wp-tabs-wrapper_5685.sp-tab__lay-default .sp-tab__nav-link > .sp-tab__card-header {color: #444;}#sp-wp-tabs-wrapper_5685 > .sp-tab__nav-tabs > .sp-tab__nav-item.show .sp-tab__nav-link,#sp-wp-tabs-wrapper_5685 > .sp-tab__nav-tabs > .sp-tab__nav-item .sp-tab__nav-link.sp-tab__active,#sp-wp-tabs-wrapper_5685.sp-tab__lay-default .sp-tab__nav-link > .sp-tab__card-header {background-color: #fff;}#sp-wp-tabs-wrapper_5685 .sp-tab__nav-tabs .sp-tab__nav-item.show .sp-tab__nav-link,#sp-wp-tabs-wrapper_5685.sp-tab__lay-default ul li .sp-tab__nav-link.sp-tab__active {border-color: #cccccc#cccccc transparent;}#sp-wp-tabs-wrapper_5685.sp-tab__lay-default > ul > li > .sp-tab__nav-link,#sp-wp-tabs-wrapper_5685.sp-tab__lay-default > ul > li > a {cursor: pointer;border-color: #cccccc;padding-top: 10px;padding-right: 10px;padding-bottom: 10px;padding-left: 10px;}#sp-wp-tabs-wrapper_5685 > .sp-tab__nav-tabs .sp-tab__nav-link {border: 1px solid #cccccc;height: 100%;}#sp-wp-tabs-wrapper_5685.sp-tab__lay-default > ul > li .sp-tab__nav-link,#sp-wp-tabs-wrapper_5685.sp-tab__lay-default > ul > li a,#sp-wp-tabs-wrapper_5685.sp-tab__lay-default > ul > .sp-tab__nav-item {border-top-left-radius: 2px;border-top-right-radius: 2px;}#sp-wp-tabs-wrapper_5685 .sp-tab__nav-tabs .sp-tab__nav-item {margin-bottom: -1px; }#sp-wp-tabs-wrapper_5685.sp-tab__lay-default > ul .sp-tab__nav-item,#sp-wp-tabs-wrapper_5685.sp-tab__lay-default .sp-tab__nav-link.collapsed > .sp-tab__card-header {background-color: #eee;}#sp-wp-tabs-wrapper_5685.sp-tab__lay-default > ul .sp-tab__nav-item {margin-right: 5px;margin-top: 5px;}#sp-wp-tabs-wrapper_5685.sp-tab__lay-default > ul .sp-tab__nav-item .sp-tab__nav-link:hover .sp-tab__tab_title,#sp-wp-tabs-wrapper_5685.sp-tab__lay-default > ul .sp-tab__nav-item a:hover .sp-tab__tab_title,#sp-wp-tabs-wrapper_5685.sp-tab__lay-default .sp-tab__nav-link.collapsed .sp-tab__card-header:hover {color: #444;transition: .3s;}#sp-wp-tabs-wrapper_5685.sp-tab__lay-default > ul .sp-tab__nav-item:hover,#sp-wp-tabs-wrapper_5685.sp-tab__lay-default .sp-tab__nav-link.collapsed > .sp-tab__card-header:hover {background-color: #fff;}#sp-wp-tabs-wrapper_5685.sp-tab__lay-default > ul .sp-tab__nav-item:last-child {margin-right: 0;}#sp-wp-tabs-wrapper_5685.sp-tab__lay-default > .sp-tab__tab-content .sp-tab__tab-pane {border: 1px solid #cccccc;padding-top: 10px;padding-right: 10px;padding-bottom: 10px;padding-left: 10px;border-top: 0px;background-color: #ffffff;}#sp-wp-tabs-wrapper_5685.sp-tab__lay-default > ul {border-bottom: 1px solid #cccccc;}@media(max-width:480px) {#sp-wp-tabs-wrapper_5685.sp-tab__lay-default > ul li.sp-tab__nav-item {width: 100%;margin-right: 0px;}#sp-wp-tabs-wrapper_5685.sp-tab__lay-default > ul li.sp-tab__nav-item:last-child {margin-bottom: -1px;}}#sp-wp-tabs-wrapper_5685.sp-tab__lay-default > ul .sp-tab__nav-item .sp-tab__tab_title,#sp-wp-tabs-wrapper_5685.sp-tab__lay-default span > .sp-tab__card-header {font-weight: 600;font-style: normal;font-size: 16px;line-height: 22px;letter-spacing: 0px;color: #444;margin: 0px;}#sp-wp-tabs-wrapper_5685.sp-tab__lay-default > .sp-tab__tab-content .sp-tab__tab-pane {font-weight: 400;font-style: normal;font-size: 16px;line-height: 24px;letter-spacing: 0px;color: #444;}#sp-wp-tabs-wrapper_5685.sp-tab__lay-default > .sp-tab__tab-content .sp-tab__tab-pane ul li a, #sp-wp-tabs-wrapper_5685.sp-tab__lay-default .sp-tab__tab-content .sp-tab__tab-pane ol li a {color: #444;}<\/style>\t\t<div id=\"sp-wp-tabs-wrapper_5685\" class=\"sp-tab__lay-default\" data-preloader=\"1\" data-activemode=\"tabs-activator-event-click\">\n\t\t\t<div class=\"sp-tab__preloader\">\n\t\t<div class=\"sp-tab__spinner\">\n\t\t\t<div class=\"rect1\"><\/div>\n\t\t\t<div class=\"rect2\"><\/div>\n\t\t\t<div class=\"rect3\"><\/div>\n\t\t\t<div class=\"rect4\"><\/div>\n\t\t\t<div class=\"rect5\"><\/div>\n\t\t<\/div>\n\t<\/div>\n\t<ul class=\"sp-tab__nav sp-tab__nav-tabs\" id=\"sp-tab__ul\" role=\"tablist\">\n\t\t\t\t<li class=\"sp-tab__nav-item\" role=\"presentation\">\n\t\t\t\t<span class=\"sp-tab__nav-link sp-tab__active\" data-sptoggle=\"tab\" for=\"#tab-56851\" role=\"tab\" aria-controls=tab-56851 aria-selected=true tabindex=0>\n\t\t\t\t\t<span class=\"tab_title_area\"><H4 class=\"sp-tab__tab_title\">SPLat<\/H4><\/span>\n\t\t\t\t<\/span>\n\t\t\t<\/li>\n\t\t\t\t\t\t<li class=\"sp-tab__nav-item\" role=\"presentation\">\n\t\t\t\t<span class=\"sp-tab__nav-link\" data-sptoggle=\"tab\" for=\"#tab-56852\" role=\"tab\" aria-controls=tab-56852 aria-selected=true tabindex=0>\n\t\t\t\t\t<span class=\"tab_title_area\"><H4 class=\"sp-tab__tab_title\">SPLatOS C<\/H4><\/span>\n\t\t\t\t<\/span>\n\t\t\t<\/li>\n\t\t\t\t\t\t<li class=\"sp-tab__nav-item\" role=\"presentation\">\n\t\t\t\t<span class=\"sp-tab__nav-link\" data-sptoggle=\"tab\" for=\"#tab-56853\" role=\"tab\" aria-controls=tab-56853 aria-selected=true tabindex=0>\n\t\t\t\t\t<span class=\"tab_title_area\"><H4 class=\"sp-tab__tab_title\">Ladder<\/H4><\/span>\n\t\t\t\t<\/span>\n\t\t\t<\/li>\n\t\t\t\t\t\t<li class=\"sp-tab__nav-item\" role=\"presentation\">\n\t\t\t\t<span class=\"sp-tab__nav-link\" data-sptoggle=\"tab\" for=\"#tab-56854\" role=\"tab\" aria-controls=tab-56854 aria-selected=true tabindex=0>\n\t\t\t\t\t<span class=\"tab_title_area\"><H4 class=\"sp-tab__tab_title\">Statement list<\/H4><\/span>\n\t\t\t\t<\/span>\n\t\t\t<\/li>\n\t\t\t\t\t\t<li class=\"sp-tab__nav-item\" role=\"presentation\">\n\t\t\t\t<span class=\"sp-tab__nav-link\" data-sptoggle=\"tab\" for=\"#tab-56855\" role=\"tab\" aria-controls=tab-56855 aria-selected=true tabindex=0>\n\t\t\t\t\t<span class=\"tab_title_area\"><H4 class=\"sp-tab__tab_title\">Dynamic C<\/H4><\/span>\n\t\t\t\t<\/span>\n\t\t\t<\/li>\n\t\t\t\t\t\t<li class=\"sp-tab__nav-item\" role=\"presentation\">\n\t\t\t\t<span class=\"sp-tab__nav-link\" data-sptoggle=\"tab\" for=\"#tab-56856\" role=\"tab\" aria-controls=tab-56856 aria-selected=true tabindex=0>\n\t\t\t\t\t<span class=\"tab_title_area\"><H4 class=\"sp-tab__tab_title\">Basic<\/H4><\/span>\n\t\t\t\t<\/span>\n\t\t\t<\/li>\n\t\t\t<\/ul>\n<div class=\"sp-tab__tab-content\">\n\t\t\t\t<div id=\"tab-56851\" class=\"sp-tab__tab-pane sp-tab__show sp-tab__active\" role=\"tabpanel\">\n\t\t\t\t\t<div class=\"sp-tab-content animated fadeIn\"><pre class=\"programlisting\">Start:\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;LaunchTask&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A MultiTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;SPLat contains a built-in multitasking system to make your programming life easier. That means a SPLat program can be written to do many &quot;things&quot; at once, with very little effort.Each &quot;thing&quot; is called a task (other languages use terms like thread or co-task). The LaunchTask instruction sets up the named task, in this case FirstIn, to be run.&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">\r\nLaunchTask      FirstIn<\/a>\r\n    LaunchTask      PushOnPushOff\r\n    LaunchTask      LongShort\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;RunTasksForever&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A MultiTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;Once you have listed all the tasks you want to run in LaunchTask instructions,a RunTasksForever will start them running. It is possible, by the way, to have tasks dynamically launched and to have them kill themselves, so the SPLat MultiTrack system will support quite elaborate schemes if required. However, as with everything in SPLat programming the simple case is always made as simple as possible to program.&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">RunTasksForever<\/a>\r\n\r\n** First button pressed (Sale of the Century) **\r\nFirstIn:\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;YieldTask&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A MultiTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;The YieldTask instruction forces a task to relinquish use of the processor, so other tasks can get processor time. Note that delay and wait instructions like for example Pause and WaitOn automatically yield the processor, so if one of those is being executed there is no need for an explicit yield.&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">YieldTask<\/a>\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;GoIfInOn 4, FirstIn_Got_4&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A MultiTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;The GoIfInOn instruction simply tests the nominated input, in this case 4 and redirects program execution to the named line, in this case FirstIn_Got_4, if the input is found to be on. This is a FastTrack instruction. FastTrack is a set of just 14 instructions that can be used for a large range of the relatively simple timing and sequencing jobs. Combine these with just two more instructions for MultiTrack, and you can be writing sophisticated multitasking programs in a few hours. The total instruction repertoire of SPLat is over 400 instructions. You wont learn them all in the first day, but its nice to know that as you expand your skills you wont suddenly get &quot;dead ended&quot;, which is what happens with many competing controller products in a similar price range.&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">GoIfInOn 4,      FirstIn_Got_4<\/a>\r\n    \r\n    GoIfInOn        7, FirstIn_Got_7\r\n    GoTo            FirstIn\r\n\r\nFirstIn_Got_4:\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;On&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A FastTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;The On instruction simply turns on the named output, in this case 4. That output will then stay on until it is programmed off again. This is a FastTrack instruction. FastTrack is a set of just 14 instructions that can be used for a large range of the relatively simple timing and sequencing jobs. Combine these with just two more instructions for MultiTrack, and you can be writing sophisticated multitasking programs in a few hours. The total instruction repertoire of SPLat is over 400 instructions. You wont learn them all in the first day, but its nice to know that as you expand your skills you wont suddenly get &quot;dead ended&quot;, which is what happens with many competing controller products in a similar price range.&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">On            4<\/a>\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;Pause&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A FastTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;The Pause instruction introduces a programmed delay of the nominated multiple of 10mS (0.01S). In this case the delay is 1000mS (1 second). When executed as part of a MultiTrack task, as is the case here, the current task will stop for 1S but other tasks will continue to run.&lt;\/p&gt; &lt;p&gt; Pause is the simplest of the timing functions in SPLat. It can produce program delays from 10mS to about 46 hours in one instruction. There are a range of other timing functions that cover the same range. They allow interval measurement, fixed or variable timers and event timouts. In addition some models have built in real time clock with a versatile 7-day clock function.&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">Pause           100<\/a>\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;Off&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A FastTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;The Off instruction simply turns off the named output, in this case 4. That output will then stay off until it is programmed on again. This is a FastTrack instruction. FastTrack is a set of just 14 instructions that can be used for a large range of the relatively simple timing and sequencing jobs. Combine these with just two more instructions for MultiTrack, and you can be writing sophisticated multitasking programs in a few hours. The total instruction repertoire of SPLat is over 400 instructions. You wont learn them all in the first day, but its nice to know that as you expand your skills you wont suddenly get &quot;dead ended&quot;, which is what happens with many competing controller products in a similar price range.&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">\r\nOff            4<\/a>\r\n    GoTo            FirstIn_WaitBothOff\r\n\r\nFirstIn_Got_7:\r\n    On              7\r\n    Pause           100\r\n    Off             7\r\n\r\nFirstIn_WaitBothOff:\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;WaitOff&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A FastTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;The WaitOff instruction simply waits until the named input, in this case 4, is off. Once that happens the program moves on to the next instruction. If executed in a MultiTrack task, the task is held up (blocked) until the condition is met, but other tasks continue normally. Most machine controllers spend most of their time waiting for something to happen, be it in the outside world or in another program task. We have therefore created a number of instructions in SPLat that wait for something to happen (not just on inputs), and we will be adding more as time goes by. This is one of the reasons SPLat is so easy to program for controller applications: We are constantly thinking about what things are done frequently in the real world of machine controls and then devise features to address those things.(Which may also explain why, unlike one of our competitors, we do not support 8 dimensional arrays!)&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">WaitOff        4<\/a>\r\n    GoIfInOn        7, FirstIn_WaitBothOff\r\n    GoTo            FirstIn\r\n\r\n** Push ON\/Push OFF button **\r\nPushOnPushOff:\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;WaitOnK&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A FastTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;The WaitOnK instruction waits for an off to on transition on the named input, in this case 5. Once that happens the program moves on to the next instruction. If executed in a MultiTrack task, the task is held up (blocked) until the condition is met, but other tasks continue normally. The &quot;K-class&quot; input instructions were initially devised to simplify reading of operator push buttons (the K stands for Key). SPLat pioneered the concept of a controller with built in operator interface, with the MMi88 in 1998. They were the worlds most cost-effective HMI solution then, and remain so today, with a range of products that support LCD and real time clock.&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">WaitOnK           5<\/a>\r\n    On              5\r\n    WaitOnK         5\r\n    Off             5\r\n    GoTo            PushOnPushOff\r\n\r\n** Short pulse = ON, Long pulse = OFF **\r\nLongShort:\r\n    WaitOnK         6\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;WaitOffT&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A FastTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;The WaitOffT instruction waits for the named input, in this case 6, to be off,but it will only wait for a maximum time. The time limit is specificed in multiples of 10mS, in this case 100 (1 second). The instruction will complete either when the expected input condition occurs or the time limit expires. Control then passes to the next instruction along with an indicator to tell it what the outcome was. This is another example of how we create instructions that are relevant to machine control. Does any other controller product have a single instruction that will wait for an input and has built in timeout, and which can be invoked by typing a simple instruction?&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">WaitOffT        6,100<\/a>\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;GoIfT &lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A FastTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;In this instance GoIfT tests the outcome of the preceding WaitOffT instruction. It will go to the named line, LongShort_1, if the expected input condition was met within the time allowed. Otherwise the instruction directly under the GoIfT is executed. In general GoIfT (Go If True) does a conditional jump depending on the True\/False outcome of a previous logical operation. There is a complementary instruction GoIfF (Go If False).&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">GoIfT           LongShort_1<\/a>\r\n    Off             6\r\n    GoTo            LongShort\r\n\r\nLongShort_1:\r\n    On              6\r\n    GoTo            LongShort\r\n<\/pre>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div id=\"tab-56852\" class=\"sp-tab__tab-pane \" role=\"tabpanel\">\n\t\t\t\t\t<div class=\"sp-tab-content animated fadeIn\"><pre class=\"programlisting\"><a class=\"tt\" title=\"&lt;\/p&gt;\r\n&lt;h3&gt;SPLatOS C&lt;\/h3&gt;\r\n&lt;p&gt;\r\n        &lt;\/p&gt;\r\n&lt;p&gt;This C program uses the SPLatOS operating system.SPLatOS is a fully preemptive multi-tasking operating system.  Therefore it includes traditional real time OS features like Mutexes, Semaphores, Messages, Threads and an application manager. However, one key differentiator between off the shelf Embedded Real Time Operating Systems and SPLatOS is the inclusion of functions that permit immediate access to on board peripherals such as the LCD and modules that provide high level software functionality such as a Menu System and Flash Permanent Storage.\r\n\r\nTo make the example program work, the following items must also be made before compilation&lt;\/p&gt;\r\n&lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\"><span>\/\/SPLatOS C<\/span><\/a>\r\nvoid main(void)\r\n{\r\n   SPLAT_vInitialise();\r\n   THREAD_vIgnite();\r\n   mFOREVER\r\n   {\r\n   }\r\n}\r\n\r\n\/\/** First button pressed (Sale of the Century) **\r\nvoid APP_vMsgGameShow( APPtbMSG bMsg, uint8 bData )\r\n{\r\n   switch( bMsg )\r\n   {\r\n   case APPkeMSG_Timer_GameShowLight:\r\n      DIGITAL_vClrLed1();\r\n      DIGITAL_vClrLed4();\r\n      break;\r\n\r\n   default:\r\n      if( !TIMER_oIsRunning( APPkeMSG_Timer_GameShowLight ) &amp;&amp; bData == DIGITALkeS_Pressed )\r\n      {\r\n         DIGITAL_vWrite( bMsg == APPkeMSG_IP_BtnLeft ? DIGITALkeOP_Led1 : DIGITALkeOP_Led4, TRUE );\r\n         TIMER_vStart( APPkeMSG_Timer_GameShowLight, 1000, FALSE );\r\n      }\r\n      break;\r\n   }\r\n}\r\n\r\n\/\/** Push ON\/ Push OFF button **\r\nvoid APP_vMsgPushy( APPtbMSG bMsg, uint8 bData )\r\n{\r\n   if( bData == DIGITALkeS_Pressed )\r\n      DIGITAL_vToggle( DIGITALkeOP_Led2 );\r\n}\r\n\r\n\/\/** Short pulse = ON, Long pulse = OFF **\r\nvoid APP_vMsgShorty( APPtbMSG bMsg, uint8 bData )\r\n{\r\n   if( bData == DIGITALkeS_Released )\r\n      DIGITAL_vSetLed3();\r\n\r\n   else if( bData == DIGITALkeS_Held )\r\n      DIGITAL_vClrLed3();\r\n}<\/pre>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div id=\"tab-56853\" class=\"sp-tab__tab-pane \" role=\"tabpanel\">\n\t\t\t\t\t<div class=\"sp-tab-content animated fadeIn\"><p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-5679\" src=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/05\/rll1-93x300.gif\" alt=\"\" width=\"93\" height=\"300\" srcset=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/05\/rll1-93x300.gif 93w, https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/05\/rll1-316x1024.gif 316w, https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/05\/rll1-64x207.gif 64w\" sizes=\"auto, (max-width: 93px) 100vw, 93px\" \/>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div id=\"tab-56854\" class=\"sp-tab__tab-pane \" role=\"tabpanel\">\n\t\t\t\t\t<div class=\"sp-tab-content animated fadeIn\"><pre class=\"programlisting\"><a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;Statement List program&lt;\/h3&gt; &lt;p&gt;Statement list is an alternative view of ladder logic. Essentially, a ladder diagram gets translated into a series of low level instructions for the target processor, and the result is the statement list. There are times when a ladder logic PLC is programmed directly in statement list, for example using a hand held programming terminal. Some ladder programmers maintain it is quicker to program using statement list than constructing ladder diagram on a computer screen. This statement list was generated by the Keyence Ladder Builder software from our ladder diagram.&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">Statement list<\/a>.\r\n* First button pressed (Sale of the Century) *\r\nLD      0004\r\nANB     0507\r\nLD      0504\r\nAND     1004\r\nORL\r\nOUT     0504\r\nLD      0007\r\nANB     0504\r\nLD      0507\r\nAND     1004\r\nORL\r\nOUT     0507\r\nLD      0004\r\nOR      0007\r\nLD      1004\r\nANB     T002\r\nORL\r\nOUT     1004\r\nLD      0504\r\nOR      0507\r\nTMR     002    #00040\r\nLDB     T002\r\nAND     0507\r\nOUT     1010\r\nLDB     T002\r\nAND     0504\r\nOUT     1009\r\n\r\n;****** Push on\/ Push off function ***\r\nLD      0005\r\nANB     1006\r\nAND     0512\r\nOUT     1005\r\nLD      0005\r\nANB     1006\r\nOR      0512\r\nANB     1005\r\nOUT     0512\r\nLD      0005\r\nOUT     1006\r\nLD      0512\r\nOUT     0505\r\n\r\n;** Short pulse = ON, Long pulse = OFF **\r\nLDB     0000\r\nANB     1008\r\nAND     1001\r\nOUT     1007\r\nLDB     0000\r\nOUT     1008\r\nLD      0000\r\nOUT     1001\r\nLD      1007\r\nANB     T000\r\nSET     1003\r\nLD      1007\r\nAND     T000\r\nRES     1003\r\nLD      0000\r\nTMR     000    #00030\r\nLD      1003\r\nOUT     0500\r\nEND\r\nENDH<\/pre>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div id=\"tab-56855\" class=\"sp-tab__tab-pane \" role=\"tabpanel\">\n\t\t\t\t\t<div class=\"sp-tab-content animated fadeIn\"><pre class=\"programlisting\"><a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;Dynamic C&lt;\/h3&gt; &lt;p&gt;The C program is written in Dynamic C\u2122.This version of C is designed specifically for embedded control systems based on a well-known brand of controller products, and provides built in multitasking.The sample program was provided by Mike Randall of &lt;a href=&quot;http:\/\/www.monitorsoftware.com.au&quot;&gt;Monitor Software&lt;\/a&gt;,a leading Australian supplier of industrial control and programming solutions. Mike is an extremely experienced C programmer, and has worked with Dynamic C for somewhat longer than he really cares to admit. Thanks Mike!&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">\/\/Dynamic C\u2122<\/a>\r\nmain()\r\n{\r\n   char SwitchStateA;\r\n   char SwitchStateB;\r\n   char LastStateA;\r\n   char LastStateB;\r\n   char LampState;\r\n   char Running;\r\n   char Changed;\r\n   char FlashCount;\r\n\r\n   char LastStateSL;\r\n   char SwitchStateSL;\r\n   char LampStateSL;\r\n   unsigned long LastPressSL;\r\n   unsigned long DiffSL;\r\n\r\n   char LastStateT;\r\n   char SwitchStateT;\r\n   char LampStateT;\r\n\r\n   brdInit();\r\n\r\n   LastStateA=1;\r\n   LastStateB=1;\r\n   Running=0;\r\n\r\n   LastStateSL=1;\r\n   LampStateSL=0;\r\n\r\n   LastStateT=1;\r\n   LampStateT=0;\r\n\r\n   while(1)\r\n   {\r\n   \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/Sale of the Century\r\n   costate\r\n   {\r\n      SwitchStateA=digIn(1);\r\n      SwitchStateB=digIn(2);\r\n      if( Running==0 )\r\n      {\r\n         Changed=0;\r\n         if( SwitchStateA==0 &amp;&amp; SwitchStateA!=LastStateA &amp;&amp; SwitchStateB==1 )\r\n         {\r\n            Running=1;\r\n            Changed=1;\r\n         }\r\n\r\n         if( SwitchStateB==0 &amp;&amp; SwitchStateB!=LastStateB &amp;&amp; SwitchStateA==1 )\r\n         {\r\n            Running=2;\r\n            Changed=1;\r\n         }\r\n\r\n         if( Changed==1 )\r\n         {\r\n            LampState=1;\r\n            FlashCount=0;\r\n            digOut( Running,1 );\r\n         }\r\n      }\r\n      LastStateA=SwitchStateA;\r\n      LastStateB=SwitchStateB;\r\n   }\r\n\r\n   costate\r\n   {\r\n      waitfor(DelayMs(500));\r\n      if( Running &gt; 0 )\r\n      {\r\n         if( FlashCount++ &lt; 4 )\r\n         {\r\n            LampState=LampState==0 ? 1 : 0;\r\n            digOut(Running,LampState );\r\n         }\r\n         else\r\n         {\r\n            digOut(Running,0);\r\n            Running=0;\r\n         }\r\n      }\r\n   }\r\n\r\n   \/\/\/\/\/\/\/\/\/\/\/\/\/Push ON-Push OFF button\r\n   costate\r\n   {\r\n      SwitchStateT=digIn(3);\r\n      if( SwitchStateT==0 &amp;&amp; SwitchStateT!=LastStateT )\r\n      {\r\n         LampStateT=LampStateT==1 ? 0 : 1;\r\n         digOut( 3, LampStateT );\r\n      }\r\n      LastStateT=SwitchStateT;\r\n   }\r\n\r\n   \/\/\/\/\/\/\/\/\/\/\/ Short pulse = ON, Long pulse = OFF\r\n   costate\r\n   {\r\n      SwitchStateSL=digIn(0);\r\n      if( SwitchStateSL!=LastStateSL )\r\n      {\r\n         if( SwitchStateSL==0 )\r\n            LastPressSL=MS_TIMER;\r\n         else\r\n         {\r\n            DiffSL=labs( MS_TIMER-LastPressSL );\r\n            if( DiffSL &gt;= 1000 )\r\n               LampStateSL=0;\r\n            else\r\n               LampStateSL=1;\r\n            digOut(0,LampStateSL);\r\n         }\r\n      }\r\n      LastStateSL=SwitchStateSL;\r\n   }\r\n\r\n}<\/pre>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div id=\"tab-56856\" class=\"sp-tab__tab-pane \" role=\"tabpanel\">\n\t\t\t\t\t<div class=\"sp-tab-content animated fadeIn\"><pre class=\"programlisting\"><a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;Basic&lt;\/h3&gt; &lt;p&gt;The Basic program was written by Jonathan Tulley from Guildtown, Scotland.The Basic version Jonathan used is for the Trio range of motion controllers, and supports intrinsic multitasking. With this particular controller the commands that set the multiple tasks running are not part of the executable code, so you canot see them here. Rather, the procedure for downloading to the controller includes instructions on how to assign individual programs to separate execution windows.&lt;\/p&gt; &lt;p&gt; Thank you Jonathan!&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">Trio Basic\u2122<\/a>\r\n*** Prog Sale_Century: Run on Process 0\r\nWHILE 1=1\r\n   WAIT UNTIL IN(8,9)=0\r\n   WAIT UNTIL IN(8,9)&lt;&gt;0\r\n\r\n   IF IN(8,9)=1 THEN\r\n      GOSUB set_10\r\n   ELSEIF IN(8,9)=2 THEN\r\n      GOSUB set_11\r\n   ENDIF\r\nWEND\r\n\r\nset_10:\r\n   OP(10,1):WA(1000):OP(10,0)\r\nRETURN\r\n\r\nset_11:\r\n   OP(11,1):WA(1000):OP(11,0)\r\nRETURN\r\n\r\n**** Prog Push_on_off: Run on Process 1\r\nWHILE 1=1\r\n   IF IN(12,13)=1 AND allow_switch=1 THEN\r\n      OP(13,1)\r\n      allow_switch=0\r\n   ENDIF\r\n\r\n   IF IN(12,13)=3 AND allow_switch=1 THEN\r\n      OP(13,0)\r\n      allow_switch=0\r\n   ENDIF\r\n\r\n   IF IN(12)=0 THEN allow_switch=1\r\nWEND\r\n\r\n*** Prog Pulse_control: Run on Process 2\r\ntiming=0\r\nWHILE 1=1\r\n   IF IN(14)=ON AND timing=0 THEN GOSUB start_timing\r\n   IF IN(14)=OFF AND timing=1 THEN GOSUB output_decision\r\nWEND\r\n\r\nstart_timing:\r\n   t2=TICKS\r\n   timing=1\r\nRETURN\r\n\r\noutput_decision:\r\n   IF t2-TICKS&lt;=500 THEN OP(15,1)\r\n   IF t2-TICKS&gt;500 THEN OP(15,0)\r\n   timing=0\r\nRETURN<\/pre>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p>Click a key word below to show the code<\/p>\n\n\n<div ><style id=\"sp_tab_dynamic_style5695\">#sp-tabpro-wrapper_5695.sp-tab__lay-default .sp-tab__tab-content {width: 100%;}#sp-tabpro-wrapper_5695 .animated {-webkit-animation-duration: 500ms;animation-duration: 500ms;}#sp-wp-tabs-wrapper_5695 .sp-tab__nav {justify-content: start;}#sp-wp-tabs-wrapper_5695.sp-tab__lay-default.sp-tab__horizontal-bottom {display: flex;flex-direction: column-reverse;}#sp-wp-tabs-wrapper_5695.sp-tab__lay-default.sp-tab__horizontal-bottom > ul {border-top: 1px solid #cccccc;border-bottom: 0;margin-top: 0;}#sp-wp-tabs-wrapper_5695.sp-tab__lay-default.sp-tab__horizontal-bottom > ul > li .sp-tab__nav-link.sp-tab__active {border-color: transparent #cccccc#cccccc;margin-top: -1px;}#sp-wp-tabs-wrapper_5695.sp-tab__lay-default.sp-tab__horizontal-bottom > ul > li .sp-tab__nav-link,#sp-wp-tabs-wrapper_5695.sp-tab__lay-default.sp-tab__horizontal-bottom > ul > li a,#sp-wp-tabs-wrapper_5695.sp-tab__lay-default.sp-tab__horizontal-bottom > ul > .sp-tab__nav-item {border-top: 0;border-top-left-radius: 0;border-top-right-radius: 0;border-bottom-left-radius: 2px;border-bottom-right-radius: 2px;}#sp-wp-tabs-wrapper_5695.sp-tab__lay-default.sp-tab__horizontal-bottom > ul {border-bottom: none;}#sp-wp-tabs-wrapper_5695.sp-tab__lay-default.sp-tab__horizontal-bottom .sp-tab__tab-content .sp-tab__tab-pane {border-top: 1px solid #cccccc;border-bottom: 0;}#sp-wp-tabs-wrapper_5695.sp-tab__lay-default .sp-tab__tab-content .sp-tab-content > ul,#sp-wp-tabs-wrapper_5695.sp-tab__lay-default .sp-tab__tab-content .sp-tab-content > ol {border-bottom: none;}#sp-wp-tabs-wrapper_5695 > .sp-tab__nav-tabs .sp-tab__nav-link.sp-tab__active .sp-tab__tab_title,#sp-wp-tabs-wrapper_5695.sp-tab__lay-default .sp-tab__nav-link > .sp-tab__card-header {color: #444;}#sp-wp-tabs-wrapper_5695 > .sp-tab__nav-tabs > .sp-tab__nav-item.show .sp-tab__nav-link,#sp-wp-tabs-wrapper_5695 > .sp-tab__nav-tabs > .sp-tab__nav-item .sp-tab__nav-link.sp-tab__active,#sp-wp-tabs-wrapper_5695.sp-tab__lay-default .sp-tab__nav-link > .sp-tab__card-header {background-color: #fff;}#sp-wp-tabs-wrapper_5695 .sp-tab__nav-tabs .sp-tab__nav-item.show .sp-tab__nav-link,#sp-wp-tabs-wrapper_5695.sp-tab__lay-default ul li .sp-tab__nav-link.sp-tab__active {border-color: #cccccc#cccccc transparent;}#sp-wp-tabs-wrapper_5695.sp-tab__lay-default > ul > li > .sp-tab__nav-link,#sp-wp-tabs-wrapper_5695.sp-tab__lay-default > ul > li > a {cursor: pointer;border-color: #cccccc;padding-top: 10px;padding-right: 10px;padding-bottom: 10px;padding-left: 10px;}#sp-wp-tabs-wrapper_5695 > .sp-tab__nav-tabs .sp-tab__nav-link {border: 1px solid #cccccc;height: 100%;}#sp-wp-tabs-wrapper_5695.sp-tab__lay-default > ul > li .sp-tab__nav-link,#sp-wp-tabs-wrapper_5695.sp-tab__lay-default > ul > li a,#sp-wp-tabs-wrapper_5695.sp-tab__lay-default > ul > .sp-tab__nav-item {border-top-left-radius: 2px;border-top-right-radius: 2px;}#sp-wp-tabs-wrapper_5695 .sp-tab__nav-tabs .sp-tab__nav-item {margin-bottom: -1px; }#sp-wp-tabs-wrapper_5695.sp-tab__lay-default > ul .sp-tab__nav-item,#sp-wp-tabs-wrapper_5695.sp-tab__lay-default .sp-tab__nav-link.collapsed > .sp-tab__card-header {background-color: #eee;}#sp-wp-tabs-wrapper_5695.sp-tab__lay-default > ul .sp-tab__nav-item {margin-right: 5px;margin-top: 5px;}#sp-wp-tabs-wrapper_5695.sp-tab__lay-default > ul .sp-tab__nav-item .sp-tab__nav-link:hover .sp-tab__tab_title,#sp-wp-tabs-wrapper_5695.sp-tab__lay-default > ul .sp-tab__nav-item a:hover .sp-tab__tab_title,#sp-wp-tabs-wrapper_5695.sp-tab__lay-default .sp-tab__nav-link.collapsed .sp-tab__card-header:hover {color: #444;transition: .3s;}#sp-wp-tabs-wrapper_5695.sp-tab__lay-default > ul .sp-tab__nav-item:hover,#sp-wp-tabs-wrapper_5695.sp-tab__lay-default .sp-tab__nav-link.collapsed > .sp-tab__card-header:hover {background-color: #fff;}#sp-wp-tabs-wrapper_5695.sp-tab__lay-default > ul .sp-tab__nav-item:last-child {margin-right: 0;}#sp-wp-tabs-wrapper_5695.sp-tab__lay-default > .sp-tab__tab-content .sp-tab__tab-pane {border: 1px solid #cccccc;padding-top: 10px;padding-right: 10px;padding-bottom: 10px;padding-left: 10px;border-top: 0px;background-color: #ffffff;}#sp-wp-tabs-wrapper_5695.sp-tab__lay-default > ul {border-bottom: 1px solid #cccccc;}@media(max-width:480px) {#sp-wp-tabs-wrapper_5695.sp-tab__lay-default > ul li.sp-tab__nav-item {width: 100%;margin-right: 0px;}#sp-wp-tabs-wrapper_5695.sp-tab__lay-default > ul li.sp-tab__nav-item:last-child {margin-bottom: -1px;}}#sp-wp-tabs-wrapper_5695.sp-tab__lay-default > ul .sp-tab__nav-item .sp-tab__tab_title,#sp-wp-tabs-wrapper_5695.sp-tab__lay-default span > .sp-tab__card-header {font-weight: 600;font-style: normal;font-size: 16px;line-height: 22px;letter-spacing: 0px;color: #444;margin: 0px;}#sp-wp-tabs-wrapper_5695.sp-tab__lay-default > .sp-tab__tab-content .sp-tab__tab-pane {font-weight: 400;font-style: normal;font-size: 16px;line-height: 24px;letter-spacing: 0px;color: #444;}#sp-wp-tabs-wrapper_5695.sp-tab__lay-default > .sp-tab__tab-content .sp-tab__tab-pane ul li a, #sp-wp-tabs-wrapper_5695.sp-tab__lay-default .sp-tab__tab-content .sp-tab__tab-pane ol li a {color: #444;}<\/style>\t\t<div id=\"sp-wp-tabs-wrapper_5695\" class=\"sp-tab__lay-default\" data-preloader=\"1\" data-activemode=\"tabs-activator-event-click\">\n\t\t\t<div class=\"sp-tab__preloader\">\n\t\t<div class=\"sp-tab__spinner\">\n\t\t\t<div class=\"rect1\"><\/div>\n\t\t\t<div class=\"rect2\"><\/div>\n\t\t\t<div class=\"rect3\"><\/div>\n\t\t\t<div class=\"rect4\"><\/div>\n\t\t\t<div class=\"rect5\"><\/div>\n\t\t<\/div>\n\t<\/div>\n\t<ul class=\"sp-tab__nav sp-tab__nav-tabs\" id=\"sp-tab__ul\" role=\"tablist\">\n\t\t\t\t<li class=\"sp-tab__nav-item\" role=\"presentation\">\n\t\t\t\t<span class=\"sp-tab__nav-link sp-tab__active\" data-sptoggle=\"tab\" for=\"#tab-56951\" role=\"tab\" aria-controls=tab-56951 aria-selected=true tabindex=0>\n\t\t\t\t\t<span class=\"tab_title_area\"><H4 class=\"sp-tab__tab_title\">SPLat<\/H4><\/span>\n\t\t\t\t<\/span>\n\t\t\t<\/li>\n\t\t\t\t\t\t<li class=\"sp-tab__nav-item\" role=\"presentation\">\n\t\t\t\t<span class=\"sp-tab__nav-link\" data-sptoggle=\"tab\" for=\"#tab-56952\" role=\"tab\" aria-controls=tab-56952 aria-selected=true tabindex=0>\n\t\t\t\t\t<span class=\"tab_title_area\"><H4 class=\"sp-tab__tab_title\">SPLatOS C<\/H4><\/span>\n\t\t\t\t<\/span>\n\t\t\t<\/li>\n\t\t\t\t\t\t<li class=\"sp-tab__nav-item\" role=\"presentation\">\n\t\t\t\t<span class=\"sp-tab__nav-link\" data-sptoggle=\"tab\" for=\"#tab-56953\" role=\"tab\" aria-controls=tab-56953 aria-selected=true tabindex=0>\n\t\t\t\t\t<span class=\"tab_title_area\"><H4 class=\"sp-tab__tab_title\">Ladder<\/H4><\/span>\n\t\t\t\t<\/span>\n\t\t\t<\/li>\n\t\t\t\t\t\t<li class=\"sp-tab__nav-item\" role=\"presentation\">\n\t\t\t\t<span class=\"sp-tab__nav-link\" data-sptoggle=\"tab\" for=\"#tab-56954\" role=\"tab\" aria-controls=tab-56954 aria-selected=true tabindex=0>\n\t\t\t\t\t<span class=\"tab_title_area\"><H4 class=\"sp-tab__tab_title\">Statement list<\/H4><\/span>\n\t\t\t\t<\/span>\n\t\t\t<\/li>\n\t\t\t\t\t\t<li class=\"sp-tab__nav-item\" role=\"presentation\">\n\t\t\t\t<span class=\"sp-tab__nav-link\" data-sptoggle=\"tab\" for=\"#tab-56955\" role=\"tab\" aria-controls=tab-56955 aria-selected=true tabindex=0>\n\t\t\t\t\t<span class=\"tab_title_area\"><H4 class=\"sp-tab__tab_title\">Dynamic C<\/H4><\/span>\n\t\t\t\t<\/span>\n\t\t\t<\/li>\n\t\t\t\t\t\t<li class=\"sp-tab__nav-item\" role=\"presentation\">\n\t\t\t\t<span class=\"sp-tab__nav-link\" data-sptoggle=\"tab\" for=\"#tab-56956\" role=\"tab\" aria-controls=tab-56956 aria-selected=true tabindex=0>\n\t\t\t\t\t<span class=\"tab_title_area\"><H4 class=\"sp-tab__tab_title\">Basic<\/H4><\/span>\n\t\t\t\t<\/span>\n\t\t\t<\/li>\n\t\t\t<\/ul>\n<div class=\"sp-tab__tab-content\">\n\t\t\t\t<div id=\"tab-56951\" class=\"sp-tab__tab-pane sp-tab__show sp-tab__active\" role=\"tabpanel\">\n\t\t\t\t\t<div class=\"sp-tab-content animated fadeIn\"><pre class=\"programlisting\">Start:\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;LaunchTask&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A MultiTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;SPLat contains a built-in multitasking system to make your programming life easier. That means a SPLat program can be written to do many &quot;things&quot; at once, with very little effort.Each &quot;thing&quot; is called a task (other languages use terms like thread or co-task). The LaunchTask instruction sets up the named task, in this case FirstIn, to be run.&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">\r\nLaunchTask      FirstIn<\/a>\r\n    LaunchTask      PushOnPushOff\r\n    LaunchTask      LongShort\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;RunTasksForever&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A MultiTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;Once you have listed all the tasks you want to run in LaunchTask instructions,a RunTasksForever will start them running. It is possible, by the way, to have tasks dynamically launched and to have them kill themselves, so the SPLat MultiTrack system will support quite elaborate schemes if required. However, as with everything in SPLat programming the simple case is always made as simple as possible to program.&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">RunTasksForever<\/a>\r\n\r\n** First button pressed (Sale of the Century) **\r\nFirstIn:\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;YieldTask&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A MultiTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;The YieldTask instruction forces a task to relinquish use of the processor, so other tasks can get processor time. Note that delay and wait instructions like for example Pause and WaitOn automatically yield the processor, so if one of those is being executed there is no need for an explicit yield.&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">YieldTask<\/a>\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;GoIfInOn 4, FirstIn_Got_4&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A MultiTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;The GoIfInOn instruction simply tests the nominated input, in this case 4 and redirects program execution to the named line, in this case FirstIn_Got_4, if the input is found to be on. This is a FastTrack instruction. FastTrack is a set of just 14 instructions that can be used for a large range of the relatively simple timing and sequencing jobs. Combine these with just two more instructions for MultiTrack, and you can be writing sophisticated multitasking programs in a few hours. The total instruction repertoire of SPLat is over 400 instructions. You wont learn them all in the first day, but its nice to know that as you expand your skills you wont suddenly get &quot;dead ended&quot;, which is what happens with many competing controller products in a similar price range.&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">GoIfInOn 4,      FirstIn_Got_4<\/a>\r\n    \r\n    GoIfInOn        7, FirstIn_Got_7\r\n    GoTo            FirstIn\r\n\r\nFirstIn_Got_4:\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;On&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A FastTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;The On instruction simply turns on the named output, in this case 4. That output will then stay on until it is programmed off again. This is a FastTrack instruction. FastTrack is a set of just 14 instructions that can be used for a large range of the relatively simple timing and sequencing jobs. Combine these with just two more instructions for MultiTrack, and you can be writing sophisticated multitasking programs in a few hours. The total instruction repertoire of SPLat is over 400 instructions. You wont learn them all in the first day, but its nice to know that as you expand your skills you wont suddenly get &quot;dead ended&quot;, which is what happens with many competing controller products in a similar price range.&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">On            4<\/a>\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;Pause&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A FastTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;The Pause instruction introduces a programmed delay of the nominated multiple of 10mS (0.01S). In this case the delay is 1000mS (1 second). When executed as part of a MultiTrack task, as is the case here, the current task will stop for 1S but other tasks will continue to run.&lt;\/p&gt; &lt;p&gt; Pause is the simplest of the timing functions in SPLat. It can produce program delays from 10mS to about 46 hours in one instruction. There are a range of other timing functions that cover the same range. They allow interval measurement, fixed or variable timers and event timouts. In addition some models have built in real time clock with a versatile 7-day clock function.&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">Pause           100<\/a>\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;Off&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A FastTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;The Off instruction simply turns off the named output, in this case 4. That output will then stay off until it is programmed on again. This is a FastTrack instruction. FastTrack is a set of just 14 instructions that can be used for a large range of the relatively simple timing and sequencing jobs. Combine these with just two more instructions for MultiTrack, and you can be writing sophisticated multitasking programs in a few hours. The total instruction repertoire of SPLat is over 400 instructions. You wont learn them all in the first day, but its nice to know that as you expand your skills you wont suddenly get &quot;dead ended&quot;, which is what happens with many competing controller products in a similar price range.&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">\r\nOff            4<\/a>\r\n    GoTo            FirstIn_WaitBothOff\r\n\r\nFirstIn_Got_7:\r\n    On              7\r\n    Pause           100\r\n    Off             7\r\n\r\nFirstIn_WaitBothOff:\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;WaitOff&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A FastTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;The WaitOff instruction simply waits until the named input, in this case 4, is off. Once that happens the program moves on to the next instruction. If executed in a MultiTrack task, the task is held up (blocked) until the condition is met, but other tasks continue normally. Most machine controllers spend most of their time waiting for something to happen, be it in the outside world or in another program task. We have therefore created a number of instructions in SPLat that wait for something to happen (not just on inputs), and we will be adding more as time goes by. This is one of the reasons SPLat is so easy to program for controller applications: We are constantly thinking about what things are done frequently in the real world of machine controls and then devise features to address those things.(Which may also explain why, unlike one of our competitors, we do not support 8 dimensional arrays!)&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">WaitOff        4<\/a>\r\n    GoIfInOn        7, FirstIn_WaitBothOff\r\n    GoTo            FirstIn\r\n\r\n** Push ON\/Push OFF button **\r\nPushOnPushOff:\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;WaitOnK&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A FastTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;The WaitOnK instruction waits for an off to on transition on the named input, in this case 5. Once that happens the program moves on to the next instruction. If executed in a MultiTrack task, the task is held up (blocked) until the condition is met, but other tasks continue normally. The &quot;K-class&quot; input instructions were initially devised to simplify reading of operator push buttons (the K stands for Key). SPLat pioneered the concept of a controller with built in operator interface, with the MMi88 in 1998. They were the worlds most cost-effective HMI solution then, and remain so today, with a range of products that support LCD and real time clock.&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">WaitOnK           5<\/a>\r\n    On              5\r\n    WaitOnK         5\r\n    Off             5\r\n    GoTo            PushOnPushOff\r\n\r\n** Short pulse = ON, Long pulse = OFF **\r\nLongShort:\r\n    WaitOnK         6\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;WaitOffT&lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A FastTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;The WaitOffT instruction waits for the named input, in this case 6, to be off,but it will only wait for a maximum time. The time limit is specificed in multiples of 10mS, in this case 100 (1 second). The instruction will complete either when the expected input condition occurs or the time limit expires. Control then passes to the next instruction along with an indicator to tell it what the outcome was. This is another example of how we create instructions that are relevant to machine control. Does any other controller product have a single instruction that will wait for an input and has built in timeout, and which can be invoked by typing a simple instruction?&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">WaitOffT        6,100<\/a>\r\n    <a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;GoIfT &lt;\/h3&gt; &lt;p&gt; &lt;strong&gt;A FastTrack instruction&lt;\/strong&gt; &lt;\/p&gt; &lt;p&gt;In this instance GoIfT tests the outcome of the preceding WaitOffT instruction. It will go to the named line, LongShort_1, if the expected input condition was met within the time allowed. Otherwise the instruction directly under the GoIfT is executed. In general GoIfT (Go If True) does a conditional jump depending on the True\/False outcome of a previous logical operation. There is a complementary instruction GoIfF (Go If False).&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">GoIfT           LongShort_1<\/a>\r\n    Off             6\r\n    GoTo            LongShort\r\n\r\nLongShort_1:\r\n    On              6\r\n    GoTo            LongShort\r\n<\/pre>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div id=\"tab-56952\" class=\"sp-tab__tab-pane \" role=\"tabpanel\">\n\t\t\t\t\t<div class=\"sp-tab-content animated fadeIn\"><pre class=\"programlisting\"><a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;SPLatOS C&lt;\/h3&gt; &lt;p&gt; &lt;\/p&gt; &lt;p&gt;This C program uses the SPLatOS operating system.SPLatOS is a fully preemptive multi-tasking operating system. Therefore it includes traditional real time OS features like Mutexes, Semaphores, Messages, Threads and an application manager. However, one key differentiator between off the shelf Embedded Real Time Operating Systems and SPLatOS is the inclusion of functions that permit immediate access to on board peripherals such as the LCD and modules that provide high level software functionality such as a Menu System and Flash Permanent Storage. To make the example program work, the following items must also be made before compilation&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">\/\/SPLatOS C<\/a>\r\nvoid main(void)\r\n{\r\n   SPLAT_vInitialise();\r\n   THREAD_vIgnite();\r\n   mFOREVER\r\n   {\r\n   }\r\n}\r\n\r\n\/\/** First button pressed (Sale of the Century) **\r\nvoid APP_vMsgGameShow( APPtbMSG bMsg, uint8 bData )\r\n{\r\n   switch( bMsg )\r\n   {\r\n   case APPkeMSG_Timer_GameShowLight:\r\n      DIGITAL_vClrLed1();\r\n      DIGITAL_vClrLed4();\r\n      break;\r\n\r\n   default:\r\n      if( !TIMER_oIsRunning( APPkeMSG_Timer_GameShowLight ) &amp;&amp; bData == DIGITALkeS_Pressed )\r\n      {\r\n         DIGITAL_vWrite( bMsg == APPkeMSG_IP_BtnLeft ? DIGITALkeOP_Led1 : DIGITALkeOP_Led4, TRUE );\r\n         TIMER_vStart( APPkeMSG_Timer_GameShowLight, 1000, FALSE );\r\n      }\r\n      break;\r\n   }\r\n}\r\n\r\n\/\/** Push ON\/ Push OFF button **\r\nvoid APP_vMsgPushy( APPtbMSG bMsg, uint8 bData )\r\n{\r\n   if( bData == DIGITALkeS_Pressed )\r\n      DIGITAL_vToggle( DIGITALkeOP_Led2 );\r\n}\r\n\r\n\/\/** Short pulse = ON, Long pulse = OFF **\r\nvoid APP_vMsgShorty( APPtbMSG bMsg, uint8 bData )\r\n{\r\n   if( bData == DIGITALkeS_Released )\r\n      DIGITAL_vSetLed3();\r\n\r\n   else if( bData == DIGITALkeS_Held )\r\n      DIGITAL_vClrLed3();\r\n}<\/pre>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div id=\"tab-56953\" class=\"sp-tab__tab-pane \" role=\"tabpanel\">\n\t\t\t\t\t<div class=\"sp-tab-content animated fadeIn\"><p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-5679 aligncenter\" src=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/05\/rll1-93x300.gif\" alt=\"\" width=\"93\" height=\"300\" srcset=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/05\/rll1-93x300.gif 93w, https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/05\/rll1-316x1024.gif 316w, https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2025\/05\/rll1-64x207.gif 64w\" sizes=\"auto, (max-width: 93px) 100vw, 93px\" \/>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div id=\"tab-56954\" class=\"sp-tab__tab-pane \" role=\"tabpanel\">\n\t\t\t\t\t<div class=\"sp-tab-content animated fadeIn\"><pre class=\"programlisting\"><a class=\"tt\" title=\"&lt;\/p&gt; &lt;h3&gt;Statement List program&lt;\/h3&gt; &lt;p&gt;Statement list is an alternative view of ladder logic. Essentially, a ladder diagram gets translated into a series of low level instructions for the target processor, and the result is the statement list. There are times when a ladder logic PLC is programmed directly in statement list, for example using a hand held programming terminal. Some ladder programmers maintain it is quicker to program using statement list than constructing ladder diagram on a computer screen. This statement list was generated by the Keyence Ladder Builder software from our ladder diagram.&lt;\/p&gt; &lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">Statement list<\/a>.\r\n* First button pressed (Sale of the Century) *\r\nLD      0004\r\nANB     0507\r\nLD      0504\r\nAND     1004\r\nORL\r\nOUT     0504\r\nLD      0007\r\nANB     0504\r\nLD      0507\r\nAND     1004\r\nORL\r\nOUT     0507\r\nLD      0004\r\nOR      0007\r\nLD      1004\r\nANB     T002\r\nORL\r\nOUT     1004\r\nLD      0504\r\nOR      0507\r\nTMR     002    #00040\r\nLDB     T002\r\nAND     0507\r\nOUT     1010\r\nLDB     T002\r\nAND     0504\r\nOUT     1009\r\n\r\n;****** Push on\/ Push off function ***\r\nLD      0005\r\nANB     1006\r\nAND     0512\r\nOUT     1005\r\nLD      0005\r\nANB     1006\r\nOR      0512\r\nANB     1005\r\nOUT     0512\r\nLD      0005\r\nOUT     1006\r\nLD      0512\r\nOUT     0505\r\n\r\n;** Short pulse = ON, Long pulse = OFF **\r\nLDB     0000\r\nANB     1008\r\nAND     1001\r\nOUT     1007\r\nLDB     0000\r\nOUT     1008\r\nLD      0000\r\nOUT     1001\r\nLD      1007\r\nANB     T000\r\nSET     1003\r\nLD      1007\r\nAND     T000\r\nRES     1003\r\nLD      0000\r\nTMR     000    #00030\r\nLD      1003\r\nOUT     0500\r\nEND\r\nENDH<\/pre>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div id=\"tab-56955\" class=\"sp-tab__tab-pane \" role=\"tabpanel\">\n\t\t\t\t\t<div class=\"sp-tab-content animated fadeIn\"><pre class=\"programlisting\"><a class=\"tt\" title=\"&lt;\/p&gt;\r\n&lt;h3&gt;Dynamic C&lt;\/h3&gt;\r\n&lt;p&gt;The C program is written in Dynamic C\u2122.This version of C is designed specifically for embedded control systems based on a well-known brand of controller products, and provides built in multitasking.The sample program was provided by Mike Randall of &lt;a href=&quot;http:\/\/www.monitorsoftware.com.au&quot;&gt;Monitor Software&lt;\/a&gt;,a leading Australian supplier of industrial control and programming solutions. Mike is an extremely experienced C programmer, and has worked with Dynamic C for somewhat longer than he really cares to admit. Thanks Mike!&lt;\/p&gt;\r\n&lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">\/\/Dynamic C\u2122<\/a>\r\nmain()\r\n{\r\n   char SwitchStateA;\r\n   char SwitchStateB;\r\n   char LastStateA;\r\n   char LastStateB;\r\n   char LampState;\r\n   char Running;\r\n   char Changed;\r\n   char FlashCount;\r\n\r\n   char LastStateSL;\r\n   char SwitchStateSL;\r\n   char LampStateSL;\r\n   unsigned long LastPressSL;\r\n   unsigned long DiffSL;\r\n\r\n   char LastStateT;\r\n   char SwitchStateT;\r\n   char LampStateT;\r\n\r\n   brdInit();\r\n\r\n   LastStateA=1;\r\n   LastStateB=1;\r\n   Running=0;\r\n\r\n   LastStateSL=1;\r\n   LampStateSL=0;\r\n\r\n   LastStateT=1;\r\n   LampStateT=0;\r\n\r\n   while(1)\r\n   {\r\n   \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/Sale of the Century\r\n   costate\r\n   {\r\n      SwitchStateA=digIn(1);\r\n      SwitchStateB=digIn(2);\r\n      if( Running==0 )\r\n      {\r\n         Changed=0;\r\n         if( SwitchStateA==0 &amp;&amp; SwitchStateA!=LastStateA &amp;&amp; SwitchStateB==1 )\r\n         {\r\n            Running=1;\r\n            Changed=1;\r\n         }\r\n\r\n         if( SwitchStateB==0 &amp;&amp; SwitchStateB!=LastStateB &amp;&amp; SwitchStateA==1 )\r\n         {\r\n            Running=2;\r\n            Changed=1;\r\n         }\r\n\r\n         if( Changed==1 )\r\n         {\r\n            LampState=1;\r\n            FlashCount=0;\r\n            digOut( Running,1 );\r\n         }\r\n      }\r\n      LastStateA=SwitchStateA;\r\n      LastStateB=SwitchStateB;\r\n   }\r\n\r\n   costate\r\n   {\r\n      waitfor(DelayMs(500));\r\n      if( Running &gt; 0 )\r\n      {\r\n         if( FlashCount++ &lt; 4 )\r\n         {\r\n            LampState=LampState==0 ? 1 : 0;\r\n            digOut(Running,LampState );\r\n         }\r\n         else\r\n         {\r\n            digOut(Running,0);\r\n            Running=0;\r\n         }\r\n      }\r\n   }\r\n\r\n   \/\/\/\/\/\/\/\/\/\/\/\/\/Push ON-Push OFF button\r\n   costate\r\n   {\r\n      SwitchStateT=digIn(3);\r\n      if( SwitchStateT==0 &amp;&amp; SwitchStateT!=LastStateT )\r\n      {\r\n         LampStateT=LampStateT==1 ? 0 : 1;\r\n         digOut( 3, LampStateT );\r\n      }\r\n      LastStateT=SwitchStateT;\r\n   }\r\n\r\n   \/\/\/\/\/\/\/\/\/\/\/ Short pulse = ON, Long pulse = OFF\r\n   costate\r\n   {\r\n      SwitchStateSL=digIn(0);\r\n      if( SwitchStateSL!=LastStateSL )\r\n      {\r\n         if( SwitchStateSL==0 )\r\n            LastPressSL=MS_TIMER;\r\n         else\r\n         {\r\n            DiffSL=labs( MS_TIMER-LastPressSL );\r\n            if( DiffSL &gt;= 1000 )\r\n               LampStateSL=0;\r\n            else\r\n               LampStateSL=1;\r\n            digOut(0,LampStateSL);\r\n         }\r\n      }\r\n      LastStateSL=SwitchStateSL;\r\n   }\r\n\r\n}<\/pre>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div id=\"tab-56956\" class=\"sp-tab__tab-pane \" role=\"tabpanel\">\n\t\t\t\t\t<div class=\"sp-tab-content animated fadeIn\"><pre class=\"programlisting\"><a class=\"tt\" title=\"&lt;\/p&gt;\r\n&lt;h3&gt;Basic&lt;\/h3&gt;\r\n&lt;p&gt;The Basic program was written by Jonathan Tulley from Guildtown, Scotland.The Basic version Jonathan used is for the Trio range of motion controllers, and supports intrinsic multitasking. With this particular controller the commands that set the multiple tasks running are not part of the  executable code, so you canot see them here. Rather, the procedure for downloading to the controller includes instructions on how to assign individual programs to separate execution windows.&lt;\/p&gt;\r\n&lt;p&gt;\r\nThank you Jonathan!&lt;\/p&gt;\r\n&lt;p&gt;\" href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" data-bs-html=\"true\">Trio Basic\u2122<\/a>\r\n*** Prog Sale_Century: Run on Process 0\r\nWHILE 1=1\r\n   WAIT UNTIL IN(8,9)=0\r\n   WAIT UNTIL IN(8,9)&lt;&gt;0\r\n\r\n   IF IN(8,9)=1 THEN\r\n      GOSUB set_10\r\n   ELSEIF IN(8,9)=2 THEN\r\n      GOSUB set_11\r\n   ENDIF\r\nWEND\r\n\r\nset_10:\r\n   OP(10,1):WA(1000):OP(10,0)\r\nRETURN\r\n\r\nset_11:\r\n   OP(11,1):WA(1000):OP(11,0)\r\nRETURN\r\n\r\n**** Prog Push_on_off: Run on Process 1\r\nWHILE 1=1\r\n   IF IN(12,13)=1 AND allow_switch=1 THEN\r\n      OP(13,1)\r\n      allow_switch=0\r\n   ENDIF\r\n\r\n   IF IN(12,13)=3 AND allow_switch=1 THEN\r\n      OP(13,0)\r\n      allow_switch=0\r\n   ENDIF\r\n\r\n   IF IN(12)=0 THEN allow_switch=1\r\nWEND\r\n\r\n*** Prog Pulse_control: Run on Process 2\r\ntiming=0\r\nWHILE 1=1\r\n   IF IN(14)=ON AND timing=0 THEN GOSUB start_timing\r\n   IF IN(14)=OFF AND timing=1 THEN GOSUB output_decision\r\nWEND\r\n\r\nstart_timing:\r\n   t2=TICKS\r\n   timing=1\r\nRETURN\r\n\r\noutput_decision:\r\n   IF t2-TICKS&lt;=500 THEN OP(15,1)\r\n   IF t2-TICKS&gt;500 THEN OP(15,0)\r\n   timing=0\r\nRETURN<\/pre>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t<\/div><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>We believe SPLat&#8217;s programming language is the easiest in the world for embedded OEM control applications. SPLat&#8217;s language was originally devised, and has evolved over&#8230;<\/p>\n","protected":false},"author":1,"featured_media":930,"parent":5063,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-5075","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Compare with other languages - SPLat Controls<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Compare with other languages - SPLat Controls\" \/>\n<meta property=\"og:description\" content=\"We believe SPLat&#8217;s programming language is the easiest in the world for embedded OEM control applications. SPLat&#8217;s language was originally devised, and has evolved over...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/compare-with-other-languages\/\" \/>\n<meta property=\"og:site_name\" content=\"SPLat Controls\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-11T12:26:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/11\/product-banner-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1400\" \/>\n\t<meta property=\"og:image:height\" content=\"354\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/compare-with-other-languages\/\",\"url\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/compare-with-other-languages\/\",\"name\":\"Compare with other languages - SPLat Controls\",\"isPartOf\":{\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/compare-with-other-languages\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/compare-with-other-languages\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/11\/product-banner-1.jpg\",\"datePublished\":\"2024-10-24T10:14:19+00:00\",\"dateModified\":\"2025-07-11T12:26:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/compare-with-other-languages\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/compare-with-other-languages\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/compare-with-other-languages\/#primaryimage\",\"url\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/11\/product-banner-1.jpg\",\"contentUrl\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/11\/product-banner-1.jpg\",\"width\":1400,\"height\":354},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/compare-with-other-languages\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How SPLat works\",\"item\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Compare with other languages\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/#website\",\"url\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/\",\"name\":\"SPLat Controls\",\"description\":\"OEM Embedded Machine Controllers\",\"publisher\":{\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/#organization\",\"name\":\"SPLat Controls\",\"url\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/10\/logo.svg\",\"contentUrl\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/10\/logo.svg\",\"caption\":\"SPLat Controls\"},\"image\":{\"@id\":\"https:\/\/webprojects.cloud\/wordpress\/splatco\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Compare with other languages - SPLat Controls","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"Compare with other languages - SPLat Controls","og_description":"We believe SPLat&#8217;s programming language is the easiest in the world for embedded OEM control applications. SPLat&#8217;s language was originally devised, and has evolved over...","og_url":"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/compare-with-other-languages\/","og_site_name":"SPLat Controls","article_modified_time":"2025-07-11T12:26:18+00:00","og_image":[{"width":1400,"height":354,"url":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/11\/product-banner-1.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/compare-with-other-languages\/","url":"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/compare-with-other-languages\/","name":"Compare with other languages - SPLat Controls","isPartOf":{"@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/#website"},"primaryImageOfPage":{"@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/compare-with-other-languages\/#primaryimage"},"image":{"@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/compare-with-other-languages\/#primaryimage"},"thumbnailUrl":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/11\/product-banner-1.jpg","datePublished":"2024-10-24T10:14:19+00:00","dateModified":"2025-07-11T12:26:18+00:00","breadcrumb":{"@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/compare-with-other-languages\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/compare-with-other-languages\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/compare-with-other-languages\/#primaryimage","url":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/11\/product-banner-1.jpg","contentUrl":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/11\/product-banner-1.jpg","width":1400,"height":354},{"@type":"BreadcrumbList","@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/compare-with-other-languages\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/webprojects.cloud\/wordpress\/splatco\/"},{"@type":"ListItem","position":2,"name":"How SPLat works","item":"https:\/\/webprojects.cloud\/wordpress\/splatco\/how-splat-works\/"},{"@type":"ListItem","position":3,"name":"Compare with other languages"}]},{"@type":"WebSite","@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/#website","url":"https:\/\/webprojects.cloud\/wordpress\/splatco\/","name":"SPLat Controls","description":"OEM Embedded Machine Controllers","publisher":{"@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/webprojects.cloud\/wordpress\/splatco\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/#organization","name":"SPLat Controls","url":"https:\/\/webprojects.cloud\/wordpress\/splatco\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/#\/schema\/logo\/image\/","url":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/10\/logo.svg","contentUrl":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-content\/uploads\/2024\/10\/logo.svg","caption":"SPLat Controls"},"image":{"@id":"https:\/\/webprojects.cloud\/wordpress\/splatco\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/pages\/5075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/comments?post=5075"}],"version-history":[{"count":12,"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/pages\/5075\/revisions"}],"predecessor-version":[{"id":6239,"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/pages\/5075\/revisions\/6239"}],"up":[{"embeddable":true,"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/pages\/5063"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/media\/930"}],"wp:attachment":[{"href":"https:\/\/webprojects.cloud\/wordpress\/splatco\/wp-json\/wp\/v2\/media?parent=5075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}