Topic: DMD0168
Help File Version: 2.10.0.636
String Scripting Language Reference
|
|
The Do-more String Scripting language was designed to allow for maximum
flexibility in generating ASCII text strings. The Text Field of the various
String Output instructions will accept almost any combination of characters
and data from the CPU's memory. This data can simply be the CPU
data elements themselves, or formatted versions of the data using the
formatting functions or casting operators.
What follows is a listing of the various types of data that can be entered
into the Text Field of the Print
to String (STRPRINT) and Send Email
(EMAIL) instructions:
|
|
String Literals (double quoted text)
String literals are any printable ASCII characters enclosed within a pair of double quotes.
These string literals will be sent to the selected output device exactly as entered.
"This string is being sent from an H2-DM1E CPU"
|
|
CPU Data Elements
Any data element in the CPU can be sent to the selected device.
The CPU element's value will be sent using the elements default
display format. The elements are separated by spaces, not commas. You
can optionally use the data formatting functions to change how these data
values will be displayed.
"The values of D0, R10, V27 & Y39 are"
D0 R10 V27 Y39
Because structures such as Counters, Ramp/Soak Profiles, PID loops,
etc. have multiple fields, you must specify the structure name and the
desired field of the structure, for example, you must
specify CT0.Acc, MyPID.SP, or MyRampSoak.Step.
"The current count of CT0 is" CT0.Acc "and
the current step of Ramp/Soak Profile #0 is" MyRampSoak.Step
There is one notable exception and it is the Timer instruction. The
Text Field will allow you to enter just the Timer name, for example, T0.
The result will be the Timer's Accumulator value (the .Acc field) displayed
in the TIME format (HH:MM:SS.mmm).
"The current value of T0 is" T0 " and
the SetPoint of loop #5 is" MyPID.SP
|
|
Control Characters - ($-based escape sequence for control codes)
$-based escape sequences are used to insert control characters in the
Text Field. Each of the codes is preceded by the '$' character. Refer
to the '$-based' Code chart below for a complete list of the available
control characters that can be entered in the Text Field.
$-based escape sequence
|
Resulting Text
|
Description
|
$$
|
$
|
dollar sign
|
$"
|
"
|
double quote
|
$L
|
<LF>
|
line feed
|
$N
|
<CR>< LF>
|
carriage return & line feed
|
$P
|
<FF>
|
form feed
|
$R
|
<CR>
|
carriage return
|
$T
|
<TAB>
|
tab
|
$hh
|
hh
|
any one-byte hex value
|
In the ladder display, the $-based control character sequences (except
for $$ and $") will be converted to their $hh form. For example, the String below was created with $-based escape codes: "The price of $"part$" #1 is $$"
R0 "$T and $"part$" #2 is $$" R1 "$N"
It will be displayed as : "The price of $"part$" #1 is $$"R0 "$09 and $"part$" #2 is $$" R1 "$0D0A"
Notice the $T was changed to $09, and $N was changed to $0D$0A, but $" and $$ remained as created. |
|
Built-in or User-defined Strings
The Text Field can consist of any of the built-in Short Strings (SS
data Block), or built-in Long Strings (SL data block), or any user defined
Strings. There are also system-defined Strings named ERR, MSG, SysDesc,
and SysName, and system-defined data blocks LastERR and LastMSG.
"The Strings SS0 and SL5 contain" SS0 SL5
Strings themselves can also be modified using the FmtString function to set the
width and text justification. If the default value for any of the modifiers
is entered through the editor, that default modifier will be removed as
part of the validation routine. The order of the modifiers may also change,
so don't be alarmed if the saved Text Field isn't exactly the same as
what was entered through the editor.:
Set the
Length and / or Text Justification of a String
FmtString(<string
element>, string
width [, right | left | center])
|
Parameters
|
Example
|
Additional Notes
|
Required
parameters:
<string element>
can be any string element
string width
can only be a constant value in the range of 0..1023
Optional Modifiers:
text justification
|
|
|
right means all characters will be moved to the right-most end of the string and padded with leading spaces.
|
FmtString(SL0, 80, right)
|
Right justified is the default.
|
left means all characters will be moved to the left-most end of the string and padded with trailing spaces.
|
FmtString(SL0, 80, left)
|
|
center means all characters will be moved to the center of the string and padded with leading and trailing spaces.
|
FmtString(SL0, 80, center)
|
|
Fill a String with a Character
Fill(hexadecimal constant [, fill length)
|
Parameters
|
Example
|
Additional Notes
|
Required parameters:
hexadecimal constant can only be a hex constant value in the range of 0x00 ... 0xFF.
fill length is the number characters to write to the string.
|
"My dog has fleas" Fill(0x20, 5) "and so does mine."
|
|
|
|
BIT Formatting Function
The default display for a BIT element is a 0 if the BIT is OFF and an
1 if the BIT is ON. This function lets you specify a word which represents
the status of the BIT instead of the values 0 or 1.
Format a BIT
FmtBit(<bit
element>, onoff | truefalse | val)
|
Parameters
|
Example
|
Additional Notes
|
Required
parameters:
<bit element>
can be any readable BIT location
|
Assuming X7 is ON:
|
|
onoff will display:
|
"The status of X7 is" FmtBit(X7, onoff)
will result in: "The Status of X7 is ON"
|
|
truefalse will display:
|
"The status of X7 is" FmtBit(X7, truefalse)
will result in: "The Status of X7 is TRUE"
|
|
val (default) will display the
numeric value.
|
"The status of X7 is" FmtBit(X7, val) will result in: "The
Status of X7 is 1"
|
|
|
|
Number Formatting Functions
These functions control how Integers and floating point (real) numbers
will appear. If the default value for any of the modifiers is entered
through the editor, that default modifier will be removed as part of the
validation routine. The order of the modifiers may also change, so don't
be alarmed if the saved Text Field isn't exactly the same as what was
entered through the editor.
Note: If the number to be formatted is NOT the correct type for the formatting string, the number will be
converted to the appropriate type then the modifiers will be applied, for example, if you use the
FmtReal() function but specify a integer (like D0), D0 will be promoted to a Real value, then the modifiers
will be applied.
Format an Integer Value
FmtInt(<numeric
element>, dec
| oct | hex | ipaddr [,
<#digits> [, right
| left | zeropad]]
[, commas [, eu
| us]] [, prefix]))
|
Parameters
|
Example
|
Additional Notes
|
Required
parameters:
<numeric element>
can be any readable numeric location.
|
Assuming WX7 has a value of 1024:
|
|
format
-
dec
will display the value in decimal format.
-
oct
will display the value in octal format.
-
hex
will display the value in hexadecimal format.
|
"The value of WX7 is" FmtInt(WX7, hex) will result in: "The
value of WX7 is 400"
|
|
Optional
Modifiers:
#digits defines how many digits
of the number to display, from 2 to 255.
justification
-
right will
right justify the number and pad with leading spaces if needed.
-
left will
left justify the number and pad with trailing spaces if needed.
-
zeropad will
right justify the number and pad with leading zeros if needed.
|
"The value of WX7 is" FmtInt(WX7, hex, 4) will result in:
"The value of WX7 is 400"
"The value of WX7 is" FmtInt(WX7, hex, 4, left) will result
in: "The value of WX7 is 400 "
"The value of WX7 is" FmtInt(WX7, hex, 4, zeropad) will result
in: "The value of WX7 is 0400 "
|
The complete value will be displayed if the number of digits specified
is too small.
The default is right justified.
|
commas specifies whether commas will be placed in the result.
-
commas,us
is the default and places commas between each three digits of a number
-
commas,eu
specifies the use of european style separators, meaning each three digits
will be separated by a period
|
"The value of WX7 is" FmtInt(WX7, dec, 4, commas) will result
in: "The value of WX7 is 1,024"
|
The default setting is commas,us.
|
prefix will add a format specific prefix to the value.
|
"The value of WX7 is" FmtInt(WX7, hex, 4, zeropad, prefix)
will result in: "The value of WX7 is 0x0400 "
|
|
ipaddr will format the DWord
value in traditional TCP/IP Address format: that is, four numeric values
between 0 and 255, separated by decimal points.
|
"The TCP/IP Address is" FmtInt(D0, ipaddr) will result in:
"The TCP/IP Address is 192.168.0.45"
|
The numeric element must be a DWord.
No other format options are allowed when ipaddr
is used.
|
Format a
Real (floating point) Value
FmtReal(<numeric
element>, <width>,
<precision>
[, dec | exp
| smart] [,
commas] [, eu | us],
[,right | left])
|
Parameters
|
Example
|
Additional Notes
|
Required
parameters:
<numeric element>
can be any readable numeric location
|
Assuming the value of is 86.24
|
|
width defines
the minimum number of digits to display, not including the decimal point,
from 1 to 255. The value is not truncated even if the result is larger
than the specified width.
precision
has different meanings based on the format, for smart format it defines
the number of significant digits; for dec or exp format it defines the
number of digits to the right of the decimal point.
The range of valid
values is 0 to 254.
A value of 255 means "no precision".
|
"The value of R0 is" FmtReal(R0, 8, 4) will result in: "The
value of R0 is 86.24"
|
If the value to be printed is shorter than this number, the result is
padded with blank spaces.
If there are fewer digits in the number than are specified in precision, the number will be padded
with zeros. If needed, the number will be rounded up to fit the precision.
|
Optional
Modifiers:
format
-
dec will display
the value as a full number without the use of exponential notation.
-
exp will display
the value in exponential form.
-
smart will
display whichever is shorter of dec or exp.
|
"The value of R0 is" FmtReal(R0, 8, 4, dec) will result in:
"The value of R0 is 86.2400"
"The value of R0 is" FmtReal(R0, 8, 4, exp) will result in:
"The value of R0 is 8.6240e+001"
|
The default format setting is smart.
|
commas specifies whether commas will be placed in the result.
-
commas,us places commas between each three digits of the whole number and a
period to separate the whole number and the fraction, e.g. 1,000,000.00.
-
commas,eu specifies the use of European style separators, which places a period between each three
digits of the whole number and a comma between the whole number and the fraction, e.g. 1.000.000,00.
|
|
The default setting is commas,us.
eu is valid for the decimal separator even if commas are not specified; FmtReal(R1, 4, 1, dec, eu, left).
|
justification
|
|
The default setting is right justified.
|
|
|
Timer Accumulator Formatting Function
This function controls how Timer Accumulator values will appear. If
the default value for any of the modifiers is entered through the editor,
that default modifier will be removed as part of the validation routine.
The order of the modifiers may also change, so don't be alarmed if the
saved Text Field isn't exactly the same as what was entered through the
editor.
Format a
Timer Value
FmtTMR(<tmr
element> | <numeric
element> [, smart |
full], [sec
| tenths | hundredths
| thousandths])
|
Parameters
|
Example
|
Additional Notes
|
Required
parameters:
<tmr element> can be any Timer structure
|
Assuming T0.Acc has a value of 15m 43.385s
|
|
Optional Modifiers:
size
seconds resolution
-
sec will display whole numbers of seconds.
-
tenths will display tenths of seconds.
-
hundredths will display hundredths of seconds.
-
thousandths will display thousandths of seconds.
|
"The value of T0 is" FmtTmr(T0, full) will result in: "The
value of T0 is 0h 15m 43.385s"
"The value of T0 is" FmtTmr(T0, sec) will result in: "The
value of T0 is 15m 43s"
"The value of T0 is" FmtTmr(T0, hundredths) will result in:
"The value of T0 is 15m 43.39s"
|
This allows for displaying any value as a time value.
|
|
|
Date and Time Formatting Functions
These
functions control how Dates and Times will appear. If the default
value for any of the modifiers is entered through the editor, that default
modifier will be removed as part of the validation routine. The order
of the modifiers may also change, so don't be alarmed if the saved Text
Field isn't exactly the same as what was entered through the editor.
Format the
Date
FmtDate(<date / time
structure element> | <numeric
element>, us | eu | asia)
|
Parameters
|
Example
|
Additional Notes
|
Required
parameters:
<date / time structure element>
Date / Time structure element
<numeric element> the .Date field of a Date / Time structure element.
Optional Modifiers:
format
-
us (m/d/yyyy) specifies month (1 - 12) / date (1 - 31) / 4 digit year (1970 - 2038).
-
eu (d/m/yyyy) specifies date (01 - 31) / month (01 - 12) / 4 digit year (1970 - 2038).
-
asia (yyyy/m/d) specifies 4 digit year (1970 - 2038) / month (01 - 12) / date (01 - 31).
|
FmtDate($now, us)
FmtDate($now.Date, us)
Assuming the current date is March 23, 2012:
"The value of $$now is" FmtDate($now, asia) will result in: "The value of $now is 2012/3/23"
|
for example: $now, SDT0, UDT5
When specifying a numeric element, the element must be the .Date field
of a Date / Time structure element or a DWord sourced by the .Date field
of a Date / Time structure.
|
Format the
Time
FmtTime(<date / time
structure element> | <numeric
element>, 12h | 24h)
|
Parameters
|
Example
|
Additional Notes
|
Required
parameters:
<date/time structure element> Date / Time structure element
<numeric element> the .Time field of a Date / Time structure element.
Optional Modifiers:
format
|
FmtTime($now, 24h)
FmtTime($now.Time, 12h)
Assuming the current time is 3:16 PM:
"The value of $$now is" FmtTime($now, 12h) will result in: "The value of $now is 3:16:00 PM"
|
for example: $now, SDT0, UDT5
When specifying a numeric element, the element must be the .Time field
of a Date / Time structure element or a DWord sourced by the .Date field
of a Date / Time structure.
|
Generate a Time Stamp
TimeStamp(<resolution>, <clock-time-type>)
|
Parameters
|
Example
|
Additional Notes
|
Required
parameters:
<resolution>
- min will not display seconds at all.
- sec (default) will display whole numbers of seconds.
- tenths will display tenths of seconds.
- hundredths
will display hundredths of seconds.
- thousandths will display thousandths of seconds.
<clock-time-type>
- local (default) will use $Localtime which has been adjusted for time zone and daylight saving mode.
- utc will use UTC time with no adjustments.
-
|
Assuming the current Date / Time is October 3, 2016 / 3:15 PM
"The current Date / Time is" TimeStamp() will result in :
"The current Date / Time is 2016/10/3 15:15:04"
"This event occurred at " TimeStamp(thousandths,utc) will result in :
" This event occurred at 2016/10/3 19:15:04.524"
|
Display the local date / time to the whole number of seconds.
Display UTC date / time (GMT) to the thousandths of a second.
|
|
|
Select (Lookup) a String based on a Value
Will select the string at the position
indicated by the selector's value from the given list of strings. The first string in the list is selected when the selector's value is 0. The last string in the list is
selected if
the selector value is negative, or if the selector value is greater than
the total number of strings in the list. The list of strings can contain any valid
string, that is, either string literals or other string elements.
Lookup(<numeric
element>, <any
string> [, <any string>])
If there are N strings listed in the Lookup function
if value = 0 then select string 0
else if value <= N-1 then select string ( value )
else select string N (i.e. default)
|
Parameters
|
Example
|
Additional Notes
|
Required
parameters:
<numeric
element> can be any readable numeric memory location
<any string> can be any
valid <string literal> or <string element>
|
Lookup (MyRS.step, "initializing", "preheat",
"cook", "chill", "soak", "done")
Lookup (Y1, "Motor Off", "*Motor ON*")
|
|
|
|
Copy Raw Data to a String
This function
is used to place bytes of data from numeric data blocks in a String. A typical use of this is when implementing a protocol driver that does not use
ASCII characters for data, for example DirectNET protocol.
Raw(<start element>,
<#bytes>, swap)
|
|
|
Parameters
|
Example
|
Additional Notes
|
Required parameters:
<start element> can be any readable (<Byte element> or <Word element> or <DWord element>)
<#bytes> constant in range of 1 to 1023, or any readable numeric memory location.
<swap> can be either:
- none means the Bytes will be placed into the String in the same order the appear in the memory block.
- bytes means the Bytes in each Word will be swapped.
- words means the Words in each DWord will be swapped.
- both means the Bytes in each Word will be swapped and the Words in each DWord will be swapped.
|
Raw(V100, 128, none) places the contents of V100 through V163 in the specified string.
Raw(V100, 128, bytes) places the contents of V100 through V163 in the specified string with the bytes swapped.
Raw(V100, 128, both) places the contents of V100 through V163 in the specified string with the bytes and words swapped.
|
<start element> must resolve to the address of a Byte memory location, so you cannot specify a Bit
element, and cannot specify a constant value. You can however use a BYTE Cast to send 8 consecutive bits, for example X0:B would send bits X0- X7.
|
|
|
See Also:
String Reference Topics:
String Functions Overview
Scripting Language Reference
Instructions for Strings containing ASCII data:
STREAMIN - Stream In Data from Device
STREAMOUT - Stream Out Data to Device
STRPRINT - Print to String
STRSUB - Get Sub-String
STRCLEAR - Clear Strings
STRTRIM - Trim String
STRTRUNC - Truncate String
STR2INT - Convert String to Integer
STR2REAL - Convert String to Real
STRCMP - String Compare
STRFIND - Find within String
Instructions for Strings containing simple byte data:
CHECKSUM - Checksum Algorithm
STRGETB - Get Bytes Out of a String
STRPUTB - Put Bytes Into a String
PACKETIN - Input Data from Packet Device
PACKETOUT - Output Data to Packet Device
|
|
Related Topics:
Data View (ASCII, Quoted ASCII, or Hex/ASCII)
Memory View (ASCII Format)
|
|