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

  •      
    --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()