LUAはシリアルポートデータ収集とTCPの一方向伝送を実現する
2184 ワード
前言:
LUAはゲーム業界で広く使用されており、特にいくつかの拡張モジュールとC言語の間の協調作業を作成しています.他の多くのスクリプト言語よりも効率的で、私は工業制御方向のソフトウェア開発に従事しています.このスクリプト言語を自分の職場環境に適応させたいと思っています.はなぜシリアルポートとネットワークの双方向伝送ではなく転送されたのですか?テストの時は「rb」シリアルポートを開けてこそデータを読むことができ、理論的には「wb」で双方向にシリアルポートを読み書きすることができ、この問題をどのように解決するか知っていれば教えてください. luaシリアルポートパラメータはどのように設定しますか?ボーレートのように?minicomでパラメータを設定してluaスクリプト を実行します.ネットワークモジュールサポートluasocketライブラリ(luasocket-2.0.2)Lua 5.2.2 Copyright(C)1994-2013 Lua.org, PUC-Rio
LUAはゲーム業界で広く使用されており、特にいくつかの拡張モジュールとC言語の間の協調作業を作成しています.他の多くのスクリプト言語よりも効率的で、私は工業制御方向のソフトウェア開発に従事しています.このスクリプト言語を自分の職場環境に適応させたいと思っています.
--init sock
socket = require("socket")
if nil == socket then
print( "socket environment load fail.")
os.exit();
end
--init server socket
net_host = "192.168.17.7"
net_port = 8888
server = socket.bind(net_host,net_port)
if nil == server then
print( "server socket bind fail.")
os.exit();
end
::io_ret::
--wair connect
print("wait tcp client connect...")
client = server:accept(1)
if nil == client then
print("tcp client connect fail")
os.exit()
else
print("tcp client connect succ")
end
client:settimeout(0)
--init serial port
serial_port = "/dev/ttyS2"
serial = io.open(serial_port,"rb")
if nil == serial then
print( "serial port open fail.")
os.exit();
else
print("serial port open succ")
end
--serial to tcp proc
while true do
local ser_byte = nil
local net_byte = nil
--network data proc
net_str,net_state = client:receive(1)
--check socket
if net_state ~= "closed" then
--check serial port
ser_str = serial:read(1)
if ser_str then
--serial data valid
ser_byte = string.byte( ser_str )
--serial to tcp
client:send( string.char(ser_byte) )
--debug output
io.write( string.format("
SER:[%02X]
",ser_byte) )
end
--[[
if net_str then
--network data valid
net_byte = string.byte( net_str )
--tcp to serial
serial:write(100)--string.char(net_byte) )
--debug output
io.write(string.format("
NET:[%02X]
",net_byte) )
end
]]--
else
print("tcp client closed")
client = nil
serial = nil
goto io_ret
end
end
serial:close()
client:close()