EC機(jī)器人TCPIP通訊(通訊助手)
1. 簡(jiǎn)介
本文簡(jiǎn)單介紹EC機(jī)器人通過Socket通訊與通訊助手連接進(jìn)行測(cè)試。
2. 操作流程
1、首先在電腦上準(zhǔn)備(SocketTool)通訊助手工具

2、然后電腦與EC機(jī)器人通過網(wǎng)線相連接,設(shè)置為同一網(wǎng)段
電腦IPV4設(shè)置:

機(jī)器人IP設(shè)置


3、 機(jī)器人運(yùn)行加載Socket通訊lua腳本

選擇寫好的lua腳本保存并運(yùn)行,當(dāng)后面狀態(tài)為綠色時(shí)就是腳本已運(yùn)行

3. 示例
3.1. EC機(jī)器人做客戶端連接服務(wù)器
Socket Tool 工具做服務(wù)器設(shè)置,端口為6666

機(jī)器人做客戶端lua腳本
3.1.1、連接服務(wù)器,接收和發(fā)送數(shù)據(jù)
lua腳本示例:
sleep(0.2)
ip="192.168.1.169" --服務(wù)器的IP
port=6666 --服務(wù)器的端口
mode="D2" --獲取機(jī)器人D2變量的值
--連接服務(wù)器--
function Connection()
repeat ---repeat循環(huán),until條件滿足跳出循環(huán)
conn = connect_tcp_server(ip,port) --連接TCP語句
if conn ~=1 then ---判斷是否連接上去,連接上去返回1,失敗返回-1
elite_print("TCP連接失敗,重連中",conn)---失敗后先斷開連接一次
disconnect_tcp_server(ip,port)
sleep(0.1)
end
until conn==1
elite_print("TCP連接成功")
end
Connection()--連接服務(wù)器
---接收數(shù)據(jù)---
while true do
mode1=get_global_variable(mode) ---獲取機(jī)器人mode(D2)里面的值
sleep(0.1)
if mode1==2 then
repeat
---接收數(shù)據(jù),ret判斷得到的是返回的結(jié)果-1還是其他,recv里保存的是獲取的值
ret,recv =client_recv_data(ip,0.1,0,port)
elite_print(recv) --打印出來接收到的內(nèi)容
sleep (1)
until (ret~=-1)
sleep(0.01)
set_global_variable(mode,0) --復(fù)位機(jī)器人D2的值為0
end
---發(fā)送數(shù)據(jù)---
if mode1==3 then
ret = client_send_data(ip,"OK",0,port) --發(fā)送數(shù)據(jù)給服務(wù)器
if ret ==-1 then
elite_print("發(fā)送數(shù)據(jù)錯(cuò)誤")
end
sleep(0.02)
set_global_variable(mode,0) --復(fù)位機(jī)器人D2的值為0
end
end
連接服務(wù)器時(shí),當(dāng)機(jī)器人未連接會(huì)在日志上一直打印內(nèi)容

連接上去后也會(huì)打印一次

機(jī)器人觸發(fā)接收數(shù)據(jù)后,服務(wù)器發(fā)送數(shù)據(jù),會(huì)在日志上顯示接收到的數(shù)據(jù),之后就可按需求來使用。


機(jī)器人觸發(fā)發(fā)送數(shù)據(jù)后,會(huì)給服務(wù)器發(fā)送設(shè)定的字符串,服務(wù)器會(huì)顯示接收到的數(shù)據(jù)

3.2. EC機(jī)器人做服務(wù)器連接客戶端
通訊助手做客戶端設(shè)置

機(jī)器人做服務(wù)器lua腳本
3.2.1、初始化TCP服務(wù)器,向客戶端發(fā)送和接收客戶端的數(shù)據(jù)
lua腳本示例:
sleep(1) -- 等待1秒
port = 6666 -- 設(shè)置服務(wù)器端口
ip ="192.168.1.169" -- 設(shè)置客戶端IP地址
init_tcp_server(port) -- 初始化TCP服務(wù)器
while(1)do -- 無限循環(huán)
ret=is_client_connected(ip) -- 檢查客戶端是否連接
if(ret==1)then -- 如果客戶端已連接
elite_print("客戶端已連接")
server_send_data(ip,"1") -- 向客戶端發(fā)送數(shù)據(jù)"1"
recv="1"
while(recv ~= "2") do
sleep(1) -- 等待1秒
Ret,recv=server_recv_data(ip,0,port,0.5) -- 接收客戶端數(shù)據(jù)
elite_print(recv,Ret) -- 打印接收到的數(shù)據(jù)和狀態(tài)
end
else
elite_print("客戶端未連接")
end
end
客戶端未連接和連接上都是在日志上打印信息

連接上后,機(jī)器人會(huì)發(fā)送字符串“1”給客戶端,通訊助手上接收到數(shù)據(jù)
客戶端發(fā)送字符串“2”給機(jī)器人,機(jī)器人接收到數(shù)據(jù)把數(shù)據(jù)和接收到的數(shù)量打印出來


3.3.數(shù)據(jù)處理
在做服務(wù)器與客戶端時(shí)都會(huì)碰到接收的數(shù)據(jù)是字符串,在腳本中無法直接使用,這時(shí)就需用到字符串分割的功能。

字符串分割可以把接收到的字符串根據(jù)定義的字符來分割,返回一個(gè)數(shù)組供我們使用。
下面就是一個(gè)示例把接收到的字符串通過","進(jìn)行分割。
recv1=string.split(recv,",")