FAIRINO のTCP通信方法

ロボットプログラムでのTCP通信設定方法

本記事では、FAIRINOロボットから外部機器(PC・画像処理装置)とTCP通信を行う方法について、Luaコード例と実用上のポイントをまとめました。

スクリプト入力モードへの切り替え

”Toggle Mode”アイコン「⇆」をクリックすることでスクリプト入力モードに切り替えられます。

ウィンドウによる入力
直接記述

外部デバイスとソケット通信を実施するサンプルプログラム

-- FAIRINO制御用 Luaスクリプト(V3.9.2)

-- 接続先IPアドレス
local ip = "192.168.58.5"
-- ポート番号
local port = 50001

-- ソケット接続
local reply = SocketOpen(ip, port, "socket_0")

-- 接続確認
if reply == 0 then
    return print("Connection is failed!")
end

-- データ(文字列)送信
SocketSendString("VisionStart", "socket_0", 1)

-- データ受信(4つのfloat値)
local n, d1, d2, d3, d4 = SocketReadAsciiFloat(4, "socket_0", 0)

if d1 == 0 then
    return print("no work")
end

-- 現在位置からx方向にd2mm、y方向にd3mmオフセットした位置に移動
Lin(CurrentPos,100,-1, 0, 1, 0, d2, d3, 0, 0, 0, 0, 100, 200)

ソケット通信で使用する関数の説明

ソケットオープン関数 SocketOpen

機能: TCPソケットをオープンする
文法: SocketOpen(ip, port, socket_name)

引数:

ip IPアドレスを入力 例 “192.168.58.5”
port ポート名 例 50001
socket_name ソケット名を示し”socket_(数値)”の形にする 例 “socket_0”

戻り値: 成功で1、失敗で0を返す

ソケットクローズ関数 SocketClose

機能: TCPソケットをクローズする
文法: SocketClose(socket_name)

引数:

socket_name オープン時に作成したソケット名

戻り値: 成功で1、失敗で0を返す

メッセージ(文字列)送信関数 SocketSendString

機能: 接続したサーバーに文字列データを送信する
文法: SocketSendString(msg, socket_name, val)

引数:

msg 送信する文字列 例 “VisionStart”
socket_name オープン時に作成したソケット名 例 “socket_0”
val 不明(判明したら追記します)

戻り値: 成功で0、失敗で1を返す

メッセージ受信関数 SocketReadString

機能: サーバーから受信した文字列を取得する
文法: SocketReadString(socket_name, val)

引数:

socket_name オープン時に作成したソケット名
val タイムアウト時間(単位秒)

戻り値: str 受信した文字列データ。

メッセージ受信関数 SocketReadAsciiFloat

機能: サーバーから受信した文字列を、指定した数の数値配列データに変換し取得する
文法: SocketReadAsciiFloat(num, socket_name, val)

引数:

num 受信する数値データの配列数
socket_name オープン時に作成したソケット名
val タイムアウト時間(単位秒)

戻り値:

n … 受信したデータの配列数。引数の指定数より少ない場合は0を返す
d1, d2, d3, d4 … 受信した数値(浮動小数点)データ。

Note

メッセージ受信関数SocketReadStringSocketReadAsciiFloatで設定したタイムアウト時間内にデータを受信できなかった場合は、システムエラー(警告)が発生します

Note

SocketSendByteSocketSendIntSocketSendLineSocketReadByteListSocketReadBinaryIntegerといった関数はサジェストではでてくるものの実装されておらず、プログラム保存時にエラーが発生します。