本帖最后由 Hippop 于 2019-7-13 19:33 编辑
链接: https://pan.baidu.com/s/1xmMDZDvasJvV-0Vs1oF2rA 提取码: hi9a
说说特点:
1、UI美观漂亮
2、使用LUA语言实时编程控制串口,网络端口进行数据收发,解析,自动化处理,复杂交互处理,多端口同时工作
3、执行程序可随时停止、暂停、恢复
4、支持GUI以及脚本程序管理端口创建,配置修改,连接断开,端口移除等
5、多任务高并发处理,可同时处理几千至上万的端口,本地串口数量支持任意多个
6、完全支持易用强大的LUA原生库(支持字符串和文件处理),借助LUA自带的string库,可拥有字符串正则处理拆分匹配,数据拆包解包等。
7、工具提供40多个相关的API,可非常方便的实现端口管理,配置,数据收发,事件监听,多任务,电脑串口列表枚举,拔插监听等等
8、采用多任务阻塞式编程,更加易用,便捷
9、串口支持,流控线单独控制,任意波特率以及其他的配置,流控支持RTS/CTS, DTR/DSR, XON/XOFF,可设置XON/XOFF流控字符。
10、支持创建表格,数据实时展示,更新
11、接口尽量简单,功能正交
12、可实现你想的或者想不到的功能
13、自带一个词法高亮的脚本编辑器,代码看起来很爽
14、支持Windows XP及以上
以下是程序截图:
主界面及说明:
运行效果图1:
运行效果图2:
运行效果图3:
使用这个工具你可以:
1、做端口双向透传,并抓取中间的数据
2、搭建一个服务器
3、远程操控单片机
4、自动化测试,自动控制等等
5、集中化管理多台设备,多设备自动化控制控制中心
最后:本工具没有任何病毒,杀毒软件报毒请通过。为了实现单文件无依赖绿 {MOD}程序,我将动态库集成到了程序本体中,并动态加载,这个行为比较容易被杀毒软件误报。
- --构造一个65507的数据
- big_data = string.rep("1", 65507)
- --测试端口名
- test = "test"
- --移除同名端口
- portRemove(test)
- --创建UDP端口并打开
- portCreate(test, "Udp", {port_num = 4000})
- portConnect(test)
- --压力发送数据
- function sendTask(port)
- --记录上次时间和数据量
- local len = 0
- local lastTime = gettime()
- while true do
- --发送数据
- local sbytes, err = portSend(port, "127.0.0.1:2000", big_data)
- --失败处理
- if err ~= 0 then
- print("发送失败!")
- return
- end
- --发送数据量统计
- len = len + sbytes
- --超过300M做一次速率统计
- if len > 300 * 1024 * 1024 then
- --获取当前时间
- local cur = gettime()
- --计算间隔
- local spec = cur - lastTime
- lastTime = cur
- --打印速率
- printf(port..": 当前速率为:%.2f KB/S
", len * 1000 / 1024 / spec)
- len = 0
- end
- end
- end
- --创建发送任务
- taskStart(sendTask, test)
复制代码UDP接收器:
- test = "test"
- --创建名为test的UDP端口,为确保创建成功,先尝试移除同名端口
- portRemove(test)
- portCreate(test, "Udp", {port_num = 2000})
- --打开这个端口
- portConnect(test)
- --接收任务
- function recvTask(port)
- --记录时间和数据量
- local len = 0
- local lastTime = gettime()
- while true do
- --接收端口发来的数据
- local data, err, ip = portRecv(port)
- --错误处理
- if err ~= 0 then
- print("接收错误:"..err)
- return
- end
- --统计数据量
- len = len + #data
- --超过300M打印一下速率
- if len > 300 * 1024 * 1024 then
- --获取当前时间,精确到ms
- local cur = gettime()
- --计算间隔
- local spec = cur - lastTime
- lastTime = cur
- --打印速率
- printf(port..": 当前速率为:%.2f KB/S
", len * 1000 / 1024 / spec)
- len = 0
- end
- end
- end
- --启动接收任务
- taskStart(recvTask, "test")
复制代码串口自动监听:
当串口插入电脑后,创建任务自动监听其数据并存入文件,串口拔出后,进入等待,串口再次插入后自动连接,并继续接收数据
- --串口配置
- config = {
- baudrate = 115200, --115200波特率
- dataBits = 8, --8位数据位
- stopBits = 1, --1位停止位,当使用1.5时请使用字符串"1.5"
- parity = "N", --无校验
- flowctl = 0 --无流控
- }
- --获取已连接的端口列表
- local connList = portConnectedListGet()
- --遍历当前已连接的端口,断开其中的串口端口
- for k, v in pairs(connList) do
- --断开类型为串口的端口
- if portInfo(k).type == "Serial" then
- portRemove(k)
- end
- end
- --串口数据接收任务
- function recvTask(port)
- --记录数据到文件中
- local dataRecordFile = io.open(port.."_RECORD", "wb")
- if dataRecordFile == nil then
- --文件打开失败
- printf("文件%s打开失败,无法记录当前串口的数据!
", port.."RECORD")
- end
- --不停的接收来自串口的任务
- while true do
- local data, err = portRecv(port)
- --发生错误
- if err ~= 0 then
- while true do
- --等待端口连接
- local info = portInfo(port)
- --被销毁
- if info.state == "destroyed" then
- print(port..": 已销毁!")
- dataRecordFile:close()
- return
- --已连接上
- elseif info.state == "connected" then
- print(port..": 已连接!")
- break
- end
- --等待状态变化
- portEventWait(port)
- end
- else
- --记录数据
- dataRecordFile:write(data)
- --打印数据
- print(port..":"..data)
- end
- end
- end
- --为当前插上的串口创建接收任务
- while true do
- --获取串口列表
- local serialList = serialListGet()
- --创建名为端口号的端口
- for k, v in pairs(serialList) do
- --获取将要创建的端口的信息
- local info = portInfo(k)
- --这个端口没有创建
- if info.state == "destroyed" or info.type ~= "Serial" then
- --尝试移除这个端口
- portRemove(k)
- --创建这个串口
- config.port = k
- portCreate(k, "Serial", config)
- --连接这个端口
- portConnect(k)
- --创建接收任务
- taskStart(recvTask, k)
- --连接断开的端口
- elseif info.state == "disconnected" then
- portConnect(k)
- end
- end
- --等待串口列表改变
- serialListChangedWait()
- --WinXP需要延时一下才能操作
- sleep(200)
- end
复制代码TCP回显服务器:
客户端连接上后,发送的所有数据将回显至客户端,支持任意多个客户端
- --服务器名称
- server = "test"
- --创建TCP服务器,并打开
- portRemove(server)
- portCreate(server, "TcpServer", {port_num = 4000})
- portConnect(server)
- --TCP客户端回显任务
- function client_echo_task(client)
- --print(client.."已连接!")
- while true do
- --等待客户端发送数据
- local data, err = portRecv(client)
- --回显
- if err == 0 then
- portSend(client, data)
- --print(client..":"..data)
- else
- --print(client.."读出错:"..err)
- break
- end
- end
- end
- while true do
- --等待客户端接入
- local client, err = portRecv(server)
- if err == 0 then
- --创建回显任务
- taskStart(client_echo_task, client)
- else
- print(server.."服务器错误:"..err)
- break
- end
- end
复制代码TCP客户端:
- --测试客户端
- client = "test"
- --创建端口,并连接服务器
- portRemove(client)
- portCreate(client, "TcpClient", {host = "localhost", port_num = 4000})
- portConnect(client)
- --接收服务器数据任务
- function recvTask(port)
- while true do
- local data, err = portRecv(port)
- if err ~= 0 then
- print("客户端接收出错!")
- exit()
- return
- end
- print(data)
- end
- end
- --启动接收任务
- taskStart(recvTask, client)
- while true do
- --每隔1s发送一包数据
- portSend(client, "Hello..")
- sleep(1000)
- end
复制代码每个1s自动向服务器发送 "Hello .."
更多示例代码请见分享
一周热门 更多>