ABB机器人使用profinet传输real类型数据的问题
ABB机器人使用profinet传输real类型数据的问题
profinet即为实时数据通信,以IO的形式对应二进制数。
ABB机器人编程中real数据为4byte,即对应32个IO。
ABB机器人使用profinet传输该real类型数据时,需将该real数据转化为对应的32位数据编码,所以需要在配置对应signal时将Device Mapping 只包含8个IO的跨度,分为
4个输出signal:
profinet_out_byte0
profinet_out_byte1
profinet_out_byte2
profinet_out_byte3
4个输入signal:
profinet_in_byte0
profinet_in_byte1
profinet_in_byte2
profinet_in_byte3
1.定义数据
LOCAL VAR rawbytes raw_DA;
LOCAL VAR num FZ:=0;
LOCAL VAR byte byte_0:=0;
LOCAL VAR byte byte_2:=0;
LOCAL VAR byte byte_3:=0;
LOCAL VAR byte byte_1:=0;
2.设置real数据
FZ := 14.33478;//need to send
3.置位4个输出signal,即发送数据
ClearRawBytes raw_DA;
PackRawBytes FZ, raw_DA, 1\Float4;
UnpackRawBytes raw_DA, 1, byte_3\Hex1;
UnpackRawBytes raw_DA, 2, byte_2\Hex1;
UnpackRawBytes raw_DA, 3, byte_1\Hex1;
UnpackRawBytes raw_DA, 4, byte_0\Hex1;
SetGO profinet_out_byte0, byte_0;
SetGO profinet_out_byte1, byte_1;
SetGO profinet_out_byte2, byte_2;
SetGO profinet_out_byte3, byte_3;
以上即可发送标准编码的real数据,PLC端可直接使用ID数据进行real数据的判断。
(注:使用PackRawBytes 函数将发送的数据以Float4的方式编码后再用UnpackRawBytes 函数解出每一位的数据,byte_0为对应二进制的高位,byte_3为低位。以上第3步骤设置只是为了对应PLC端ID数据的容易读取,这样在PLC端才不需要将数据倒置。)
4.接收来自PLC的实数QD数据
byte_0 := profinet_in_byte0;
byte_1 := profinet_in_byte1;
byte_2 := profinet_in_byte2;
byte_3 := profinet_in_byte3;
ClearRawBytes raw_DA;
PackRawBytes byte_3, raw_DA, 1\Hex1;
PackRawBytes byte_2, raw_DA, 2\Hex1;
PackRawBytes byte_1, raw_DA, 3\Hex1;
PackRawBytes byte_0, raw_DA, 4\Hex1;
UnpackRawBytes raw_DA, 1, FZ\Float4;
接收到的数据存于FZ中。
(注:PLC端直接设置QD数据为实数,PLC端对应的IO映射到ABB机器人端的IO,则profinet_in_byte0为数据的高位,profinet_in_byte3为数据的低位,所以步骤4这样设置,才能使用UnpackRawBytes 函数解析数据)