
The Weintek Macro language has a some useful functions for stripping 32bit and 16bit numbers into words, and bytes. In this macro example, we're splitting a 32bit word into a 16bit "HIWORD" and a 16bit "LOWORD", and splitting the two resulting words into four bytes.
The syntax for HIWORD, LOWORD, HIBYTE & LOBYTE is the same format - FUNCTION(source, destination):
HIWORD(source, destination)
LOWORD(source, destination)
HIBYTE(source, destination)
LOBYTE(source, destination)
The Macro is carrying out the operation shown below, starting off with a 32bit value.
32bit binary:
aaaaaaaabbbbbbbbccccccccdddddddd
HIWORD:
aaaaaaaabbbbbbbb
LOWORD:
ccccccccdddddddd
HIBYTE (1):
aaaaaaaa
LOBYTE (1):
bbbbbbbb
HIBYTE (2):
cccccccc
LOBYTE (2):
dddddddd

macro_command main()
int inword = 0 // inword is 32 bit
short hword = 0 // hword is 16bit for use with HIWORD
short lword = 0 // lword is 16bit for use with LOWORD
short a = 0 // a is 16bit for the HIBYTE of HIWORD
short b = 0 // b is 16bit for the LOBYTE of HIWORD
short c = 0 // c is 16bit for the HIBYTE of LOWORD
short d = 0 // d is 16bit for the LOBYTE of LOWORD
GetData(inword, "Local HMI", LW, 0, 1) // get 32bit value inword from LW 0
// Syntax HIWORD(source, destination)
HIWORD(inword, hword) // put upper 16bits of 32bit inword in hword
LOWORD(inword, lword) // put lower 16bits of 32bit inword in lword
// Syntax HIBYTE(source, destination)
HIBYTE(hword, a) // put HIBYTE of the HIWORD, hword and put in a
LOBYTE(hword, b) // put LOBYTE of the HIWORD, hword and put in b
// Syntax HIBYTE(source, destination)
HIBYTE(lword, c) // put HIBYTE of the LOWORD, lword and put in c
LOBYTE(lword, d) // put LOBYTE of the LOWORD, lword and put in d
SetData(a, "Local HMI", LW, 10, 1) // set LW 10 with value a
SetData(b, "Local HMI", LW, 11, 1) // set LW 11 with value b
SetData(c, "Local HMI", LW, 12, 1) // set LW 12 with value c
SetData(d, "Local HMI", LW, 13, 1) // set LW 13 with value d
end macro_command
We have a demo project to download here.