The Productivity PLC ASCII Input Task handles the ASCII input received at the RS-232 port of the
CPU. This example assumes the ASCII sending device is terminating each message with a carriage
return (0xD)
The Serial Port needs to be set up. This example assumes Baud Rate = 9600, Parity = Odd,
Data Bits = 8, and Stop Bits = 1, but any conguration can work.
The CLICK programming example is a three-step process that (1) receives the data from the scanner
and (2) places that data in holding register before (3) moving it to the nal register.
Main Program
The EnableReceive bit is triggered automatically with the First Scan and during the
"CycleReceiveEnable" subroutine. Therefore, after each successful read of the incoming ASCII string,
the EnableReceive bit will be reset and set again, allowing the RECEIVE instruction to be re-enabled
for the next incoming string.
In order to keep shorter strings from inheriting residual characters from previous strings of a longer
length, TXT130 through TXT257 (128 bytes) are temporary holding registers for the incoming ASCII
string and will be cleared once the data has been moved from TXT130 (128 bytes) to TXT1 (128
bytes.)
"ASCII_RxSuccess" – This subroutine is called after success of the RECEIVE instruction below.
Move ASCII data from the 128 bytes of temporary registers (TXT130-257) to TXT1-128.
Fill the 128 bytes of temporary registers (TXT130-257) with the null from TXT129.
The RECEIVE instruction needs to see a transition from OFF to ON in order to be re-enabled. So
RESET the "Success" bit and the "EnableReceive" bit, and SET the "Cycle" bit that will trigger a
subroutine to SET the "EnableReceive" bit once again.
Move the "Port2 Data Length" from the system data register, SD50, to user register "CharReceived."
"CycleReceiveEnable" – After the "ASCII_RxSuccess" subroutine, the "EnableReceive" bit is
RESET. The "CycleReceiveEnable" subroutine SETS the bit once again, allowing the OFF to ON
transition the RECEIVE instruction requires to execute again.
"ErrorHandling" – This subroutine is placed here for the user to write code to handle any errors
encountered from the RECEIVE instruction (First Character Timeout, Character Interval Timeout, and
Overow.)
Below are the bits that are used in the code shown above:
The ASCII Input program (Pgm_ASCII_Input) handles the internal serial input. On rst scan RUN this
program.
Pgm_ ASCII_Input
Upon initially running the program, CLEAR the internal serial port. This will delete any data in the Input
Queue data storage, as well as reset the .InQueue value.
IF the character count at the internal Serial buffer (IntSerial.InQueue) is greater than zero, THEN
execute the STREAMIN Instruction and populate SL0 (sInputString) element
This stage serves two purposes:
1) It allows the user to write any code required for parsing the input string and placing the parsed
content to other memory elements
2) Once the stage is complete, a jump is executed back to stage 1, allowing for a new evaluation of
the IntSerial.InQueue value.
This stage is placed here for the user to write any required code for handling any errors encountered
during the execution of this program.
The Serial Port needs to be set up. This example assumes Baud Rate = 9600, Parity = Odd,
Data Bits = 8, and Stop Bits = 1, but any conguration can work.
The ASCII input (AIN) instruction is used to receive the ASCII data through port 2 of the DL06 PLC.
This example is using the termination code 0xD. Ensure that the barcode scanner is set up to send
the termination code.