温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-07-27 22:23:29 来源:亿速云 阅读:272 作者:chen 栏目:云计算

本篇内容主要讲解“LUA怎么实现串口数据采集与TCP单向透传”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“LUA怎么实现串口数据采集与TCP单向透传”吧!

前言:    

    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怎么实现串口数据采集与TCP单向透传”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

lua
AI