1. 编写XML格式通讯配置文件
配置文件示例(KUKA_EKL.xml):
<ETHERNETKRL>
<CONFIGURATION>
<EXTERNAL>
<IP>192.168.0.1</IP>
<PORT>8080</PORT>
</EXTERNAL>
<INTERNAL>
<ALIVE Set_Flag="100"/>
</INTERNAL>
</CONFIGURATION>
<RECEIVE>
<RAW>
<ELEMENT Tag="recv" Type="STREAM" EOS="13" Set_Flag="101"/>
</RAW>
</RECEIVE>
<SEND>
<RAW>
<ELEMENT Tag="send" Type="STREAM" EOS="13"/>
</RAW>
</SEND>
</ETHERNETKRL>
配置文件结构如下:
配置文件完成后需要拷贝到机器人的C:/KRC/ROBOTER/Config/User/Common/EthernetKRL文件夹内。
2. 编写机器人SRC程序
通讯使用到的EKI函数:
EKI_STATUS=EKI_Init(CHAR[]) ; 初始化连接
EKI_STATUS=EKI_Open(CHAR[]) ; 打开连接
EKI_STATUS=EKI_Close(CHAR[]) ; 关闭连接
EKI_STATUS=EKI_Clear(CHAR[]) ; 删除连接
EKI_STATUS=EKI_Send(CHAR[],CHAR[],INT) ; 发送数据
EKI_STATUS=EKI_GetString(CHAR[],CHAR[],CHAR[]) ; 读取数据
案例程序流程:
案例程序代码:
_ret=EKI_Init(XML_KRL[])
_ret=EKI_Open(XML_KRL[])
wait for $flag[100]
Offset = 0
SWRITE(_byte_send[], State, Offset,"%d,%d,%d", 100, 200, 300)
_ret = EKI_Send(XML_KRL[], _byte_send[])
wait for $flag[101]
_ret=EKI_GetString(XML_KRL[],"recv",_byte_recv[])
halt
;parse received data
cnt=-1
i=1
indx=1
while(cnt<>0)
delim=44
cnt=StrFind(i, _byte_recv[], delim, #NOT_CASE_SENS)
if cnt<>0 then
for j=1 to cnt-1
_recv_buffer[j]=_byte_recv[i+j-1]
endfor
ok=STRTOREAL(_recv_buffer[], _recv_data[indx])
if ok then
indx=indx+1
else
halt
endif
for j=1 to cnt-1
_recv_buffer[j]=0
endfor
i=i+cnt
halt
else
6
cnt=StrLen(_byte_recv[])
for j=1 to cnt-i+1
_recv_buffer[j]=_byte_recv[i+j-1]
endfor
ok=STRTOREAL(_recv_buffer[], _recv_data[indx])
if ok then
indx=indx+1
else
halt
endif
for j=1 to cnt-i+1
_recv_buffer[j]=0
endfor
cnt=0
halt
endif
ENDWHILE
_ret=EKI_Close(XML_KRL[])
_ret=EKI_Clear(XML_KRL[])