need help Buffer polling and BAND
wolf_rueffel
Posts: 8
Hello Guys
please can you help me ?
I get a 8 bytes String as a feedback signal into my buffer calls: IO64EG_BUFF
In each byte is the information of 8 inputs.
So each of the 8 bits represents a state
8 bytes x 8 bits are the 64 states to be polled
The information of each bit, 0 or 1 should
be written into a variable.
That will work like this: ??
What about the buffer, the buffer must be cleared by querying all the 8 bytes?
DEFINE_PROGRAM (* polling*)
WAIT 3
{
SEND_STRING IO64EG, "CallOut,$01,$00" //ask all Relay ports
STR1 = left_string(IO64EG_BUFF,1) // get first Byte
STR2 = mid_string(IO64EG_BUFF,2,1) // return 1 Byte starting at location 2
STR3 = mid_string(IO64EG_BUFF,3,1) // return 1 Byte starting at location 3
// and so on:
// STR4 = mid_str...
// STR5 = mid_str...
Rel_port1_Bit_8 = (STR1[1] BAND $80) // Input 8
Rel_port1_Bit_7 = (STR1[1] BAND $40) // Input 7
Rel_port1_Bit_6 = (STR1[1] BAND $20) // Input 6
Rel_port1_Bit_5 = (STR1[1] BAND $10) // Input 5
Rel_port1_Bit_4 = (STR1[1] BAND $08) // Input 4
Rel_port1_Bit_3 = (STR1[1] BAND $04) // Input 3
Rel_port1_Bit_2 = (STR1[1] BAND $02) // Input 2
Rel_port1_Bit_1 = (STR1[1] BAND $01) // Input 1
Rel_port2_Bit_8 = (STR2[1] BAND $80) // Input 16
Rel_port2_Bit_7 = (STR2[1] BAND $40) // Input 15
Rel_port2_Bit_6 = (STR2[1] BAND $20) // Input 14
Rel_port2_Bit_5 = (STR2[1] BAND $10) // Input 13
Rel_port2_Bit_4 = (STR2[1] BAND $08) // Input 12
Rel_port2_Bit_3 = (STR2[1] BAND $04) // Input 11
Rel_port2_Bit_2 = (STR2[1] BAND $02) // Input 10
Rel_port2_Bit_1 = (STR2[1] BAND $01) // Input 9
Rel_port3_Bit_8 = (STR3[1] BAND $80) // Input 24
Rel_port3_Bit_7 = (STR3[1] BAND $40) // Input 23
Rel_port3_Bit_6 = (STR3[1] BAND $20) // Input 22
Rel_port3_Bit_5 = (STR3[1] BAND $10) // Input 21
Rel_port3_Bit_4 = (STR3[1] BAND $08) // Input 20
Rel_port3_Bit_3 = (STR3[1] BAND $04) // Input 19
Rel_port3_Bit_2 = (STR3[1] BAND $02) // Input 18
Rel_port3_Bit_1 = (STR3[1] BAND $01) // Input 17
if (Rel_port1_Bit_1 = 1)
{
// do something
}
else
{
// do something
}
}
Thanks for help !
André
please can you help me ?
I get a 8 bytes String as a feedback signal into my buffer calls: IO64EG_BUFF
In each byte is the information of 8 inputs.
So each of the 8 bits represents a state
8 bytes x 8 bits are the 64 states to be polled
The information of each bit, 0 or 1 should
be written into a variable.
That will work like this: ??
What about the buffer, the buffer must be cleared by querying all the 8 bytes?
DEFINE_PROGRAM (* polling*)
WAIT 3
{
SEND_STRING IO64EG, "CallOut,$01,$00" //ask all Relay ports
STR1 = left_string(IO64EG_BUFF,1) // get first Byte
STR2 = mid_string(IO64EG_BUFF,2,1) // return 1 Byte starting at location 2
STR3 = mid_string(IO64EG_BUFF,3,1) // return 1 Byte starting at location 3
// and so on:
// STR4 = mid_str...
// STR5 = mid_str...
Rel_port1_Bit_8 = (STR1[1] BAND $80) // Input 8
Rel_port1_Bit_7 = (STR1[1] BAND $40) // Input 7
Rel_port1_Bit_6 = (STR1[1] BAND $20) // Input 6
Rel_port1_Bit_5 = (STR1[1] BAND $10) // Input 5
Rel_port1_Bit_4 = (STR1[1] BAND $08) // Input 4
Rel_port1_Bit_3 = (STR1[1] BAND $04) // Input 3
Rel_port1_Bit_2 = (STR1[1] BAND $02) // Input 2
Rel_port1_Bit_1 = (STR1[1] BAND $01) // Input 1
Rel_port2_Bit_8 = (STR2[1] BAND $80) // Input 16
Rel_port2_Bit_7 = (STR2[1] BAND $40) // Input 15
Rel_port2_Bit_6 = (STR2[1] BAND $20) // Input 14
Rel_port2_Bit_5 = (STR2[1] BAND $10) // Input 13
Rel_port2_Bit_4 = (STR2[1] BAND $08) // Input 12
Rel_port2_Bit_3 = (STR2[1] BAND $04) // Input 11
Rel_port2_Bit_2 = (STR2[1] BAND $02) // Input 10
Rel_port2_Bit_1 = (STR2[1] BAND $01) // Input 9
Rel_port3_Bit_8 = (STR3[1] BAND $80) // Input 24
Rel_port3_Bit_7 = (STR3[1] BAND $40) // Input 23
Rel_port3_Bit_6 = (STR3[1] BAND $20) // Input 22
Rel_port3_Bit_5 = (STR3[1] BAND $10) // Input 21
Rel_port3_Bit_4 = (STR3[1] BAND $08) // Input 20
Rel_port3_Bit_3 = (STR3[1] BAND $04) // Input 19
Rel_port3_Bit_2 = (STR3[1] BAND $02) // Input 18
Rel_port3_Bit_1 = (STR3[1] BAND $01) // Input 17
if (Rel_port1_Bit_1 = 1)
{
// do something
}
else
{
// do something
}
}
Thanks for help !
André
0
Comments
How I'd approach what you're describing is to make a function that would ferret the bit values from each byte. There is not an easy way in Netlinx to quickly mine the bits from a hex char. You do have the usual bitwise operators.
So a routine that made
chr_buff=$a2. Would populate an 8 cell integer array
1,0,1,0,0,0,1,0. For example.
You'd probably need to create a data table from an array and basically evaluate the hex value and relate it to the integer array and transfer the value of the data table into the status array.
Bottom line is that there's just not a slick way to do this.
May I kindly suggest you take (or re-take) AMX's Programming 1 course. The logic you've displayed is terribly flawed, not to mention everything you're trying to do is covered in the first course of programming. Also, I'm sure tech support would be willing to help - that is if you have a valid dealer ID number when you call in. If you (or your boss) cannot afford P1 training, you can use Google to search for some documents that are (unfortunately) floating around.
Good luck!
Much neater (and easier) than explicitly assigning all those values.
I'd highly recommend having a browse through the NetLinx help files, and definitely get yourself to some AMX training, or even better some generic programming / logic training. The internet is your friend.
Also, as jjames mentioned, you might want to reconsider the way you're handling that parsing.