LUA实现串口数据采集与TCP单向透传

原创
2015/05/21 15:53
阅读数 3.3K

前言:    

    LUA在游戏行业使用广泛,尤其是编写一些扩展模块与C语言之间的协调工作。其效率高于其他很多脚本语言,本人从事工业控制方向的软件开发,想让这种脚本语言来适应自己的工作环境,编有了个想法。

 

  1. 为什么是转发而不是串口与网络的双向透传?

    测试的时候只有打开方式是"rb"串口才能读数据,理论上用"wb"可以双向读写串口,如果您知道怎么解决这个问题请告诉我。

  2. lua串口参数怎么设置?如波特率?

     

    我用minicom设置好参数再运行lua脚本

     

  3. 网络模块支持

    使用了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("\nSER:[%02X]\n",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("\nNET:[%02X]\n",net_byte) )
		end
		]]--
	else
		print("tcp client closed")
		client = nil
		serial = nil
		goto io_ret
	end
end

serial:close()
client:close()

 

展开阅读全文
lua
打赏
1
46 收藏
分享
加载中
串口操作直接用C封装个库给lua调用,想怎么玩就怎么玩。
2015/05/22 13:57
回复
举报
NDSM博主

引用来自“liwenhui”的评论

rb+
的确试过,连读数据也不行了。 环境:Linux version 3.4.103 (bananapi@lemaker) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #4 SMP PREEMPT Thu Dec 18 12:55:58 CST 2014
2015/05/22 10:21
回复
举报
rb+
2015/05/22 09:44
回复
举报
有rwb么20
2015/05/22 09:38
回复
举报
更多评论
打赏
4 评论
46 收藏
1
分享
返回顶部
顶部