Introduction: Advanced programming languages in industrial control environments
In the field of industrial automation and process control, programmable controllers (PCs) and distributed control systems (DCS) play a core role. To meet the needs of complex control logic, real-time data processing, and multi task coordination, Reliance Electric has developed an enhanced BASIC language specifically for its DCS 5000 system based on the classic BASIC language. This article aims to provide a comprehensive and in-depth technical analysis of the language, exploring its design philosophy, core grammar, enhanced functionality, and practical applications in industrial environments.
Language Overview and Design Philosophy
DCS 5000 Enhanced BASIC is not a simple scripting tool, but a high-level programming language designed specifically for real-time industrial control. It retains the easy to learn and understand features of standard BASIC, using English like statements and mathematical symbols, while extensively expanding for the specific needs of control systems. Its design goal is to provide engineers with a programming platform that can handle complex algorithms while directly interacting with hardware I/O, network modules, and multitasking systems. The language supports running multiple independent or collaborative tasks on a single or multiple processor modules, achieving software integration of control logic, motion control, data acquisition, and monitoring functions.
Program Structure and Basic Grammar
The program consists of a sequence of statements with line numbers (1-32767), which determine the execution order and provide waypoints for program jumps (GOTO, GOSUB). The statement format is flexible, supporting single line multiple statements (separated by colons ":" or slashes "") and multiple line single statements (connected by "&" hyphens).
The variable system is one of the core components of a language, and the strict definition of data types ensures the reliability and efficiency of the program. Variable names can be up to 16 characters long and must start with a letter or underscore, with the type identified by a suffix:
Single integer variable: suffix%, range -32768 to 32767, occupies 16 bits.
Double integer variable: suffix! Range -2147483648 to 2147483647, occupying 32 bits. Although supporting two types of integers, all internal integer operations are performed with 32-bit double precision.
Real valued variable: without suffix, ranging from ± 9.22 × 10 ¹⁸ to ± 2.71 × 10 ⁻² ⁰, providing floating-point operation capability but only retaining 8 significant digits.
Boolean variable: suffix @, with a value of TRUE (ON) or FALSE (OFF), used to represent the switch state.
String variable: suffix $, can store up to 31 characters.
Arrays (subscript variables) support up to four dimensions, providing an effective way to organize data tables and state collections. When defining an array, it is necessary to specify the size of each dimension, with indices starting from 0.
Mixed operations are a common scenario in practical programming. When integers and real numbers are mixed in an expression, BASIC automatically converts integers to real numbers at the operation point to maintain accuracy, but this may also result in unexpected results due to integer division (result truncation), requiring programmers to pay special attention to the operation order or explicitly introduce real factor (such as 1.0 * A%) to force the conversion.
Constants and expressions
Constants support five types: integers, hexadecimal numbers, real numbers, strings, and Boolean values. Hexadecimal constants are represented in the format of "0... H" to facilitate direct correspondence with hardware register addresses. String constants are enclosed in single or double quotes and are limited to a length of 31 characters when assigned to variables, but can reach up to 132 characters in expressions or PRIMT statements.
Expressions are divided into four categories: arithmetic, string, boolean, and relational expressions:
Arithmetic expressions support addition (+), subtraction (-), multiplication (*), division (/), exponentiation (* *), and unary positive and negative operators, following standard operator precedence.
String expressions mainly use concatenation operators (+) and relational operators (=,<>).
Boolean expressions use logical operators NOT, AND, OR, XOR to combine the results of Boolean variables or relational expressions.
Relational expressions are used to compare numerical values or strings, resulting in Boolean values, and are the basis for forming conditional branches (IF-THEN). Boolean values can perform bit level operations with integers, such as using AND for bit masking operations, which is very useful when interacting with hardware registers.

Explanation of Statement Types: From Variable Definition to Process Control
The statement architecture of DCS 5000 BASIC is clear and powerful, and can be divided into two categories: configuration tasks and application tasks.