I think the stream device protocol converters %r and
%<sum> will do what you want :
out “\x01\x01\x00\x01%4r%<sum>”;
But you would probably want to pass the address information as
variables :
out $1 0x01 $2 $3 “%4r%<sum>”;
HI Tech-talk,I am trying to build an IOC to communicate with serial devices
through the serial to Ethernet Device Server.
The serial device supports the streams of hex format.
The binary command format when using RS232 or RS485 is as follows:
Bytes Meaning
1 Module address
1 Command number
1 Type number
1 Motor or Bank number
4 Value (MSB first!)
1 Checksum
total: 9 bytes
the checksum is calculated by adding up all bytes (including the module
address byte) using
8-bit addition. Here is the examples to show how to do this:
in C:
unsigned char i, Checksum;
unsigned char Command[9];
//Set the “Command” array to the desired
command
Checksum = Command[0];
for(i=1; i<8; i++)
Checksum+=Command[i];
Command[8]=Checksum; //insert checksum as last byte of the
command
//Now, send it to the module
I want to control the motor to rotate right through the serial device.
Instruction:
Rotate right, motor #1, velocity = 350
Binary:
Byte Index
0
1
2
3
4
5
6
7
8
Function
Target- Instruction
Type
Motor/
Operand Operand
Operand Operand Checksum
address
Number
Bank
Byte3
Byte2
Byte1 Byte0
Value (hex)
0x01
0x01
0x00
0x01
0x00
0x00
0x01
0x5e 0x62
By writing streamDevice protocol
file(out'\x01\x01\x00\x01\x00\x00\x01\x5e\x62';),motor will rotate. Using
"EDM" or "caput" to
input the variable,where do I do my processing (like calculating the
Checksum and convert the velocity to four bytes long)? where
write my own parsing code in C?having other approaches. Could you give any
example?
Thanks,
Yahto Dam
2010.11.16