Smart Ports,一个跑脚本的自动化多端口(串口,TCP,TCP服务器,UDP)通信工具,功能非常强大且好用

2019-07-20 22:40发布

本帖最后由 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及以上

以下是程序截图:
主界面及说明:
程序截图.png

运行效果图1:
]0J}X9}W5_M2}19HW7]E8]J.png
运行效果图2:
程序截图2.png
运行效果图3:
程序截图3.png

使用这个工具你可以:
1、做端口双向透传,并抓取中间的数据
2、搭建一个服务器
3、远程操控单片机
4、自动化测试,自动控制等等
5、集中化管理多台设备,多设备自动化控制控制中心

最后:本工具没有任何病毒,杀毒软件报毒请通过。为了实现单文件无依赖绿 {MOD}程序,我将动态库集成到了程序本体中,并动态加载,这个行为比较容易被杀毒软件误报。




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
Hippop
2019-07-21 02:41
示例:UDP发送器

  1. --构造一个65507的数据
  2. big_data = string.rep("1", 65507)
  3. --测试端口名
  4. test = "test"

  5. --移除同名端口
  6. portRemove(test)
  7. --创建UDP端口并打开
  8. portCreate(test, "Udp", {port_num = 4000})
  9. portConnect(test)

  10. --压力发送数据
  11. function sendTask(port)
  12.     --记录上次时间和数据量
  13.     local len = 0
  14.     local lastTime = gettime()

  15.     while true do
  16.         --发送数据
  17.         local sbytes, err = portSend(port, "127.0.0.1:2000", big_data)

  18.         --失败处理
  19.         if err ~= 0 then
  20.             print("发送失败!")
  21.             return
  22.         end

  23.         --发送数据量统计
  24.         len = len + sbytes

  25.         --超过300M做一次速率统计
  26.         if len > 300 * 1024 * 1024  then
  27.             --获取当前时间
  28.             local cur = gettime()

  29.             --计算间隔
  30.             local spec = cur - lastTime
  31.             lastTime = cur

  32.             --打印速率
  33.             printf(port..": 当前速率为:%.2f KB/S ", len * 1000 / 1024 / spec)
  34.             len = 0
  35.         end
  36.     end
  37. end

  38. --创建发送任务
  39. taskStart(sendTask, test)
复制代码

UDP接收器:

  1. test = "test"

  2. --创建名为test的UDP端口,为确保创建成功,先尝试移除同名端口
  3. portRemove(test)
  4. portCreate(test, "Udp", {port_num = 2000})
  5. --打开这个端口
  6. portConnect(test)

  7. --接收任务
  8. function recvTask(port)
  9.     --记录时间和数据量
  10.     local len = 0
  11.     local lastTime = gettime()

  12.     while true do
  13.         --接收端口发来的数据
  14.         local data, err, ip = portRecv(port)
  15.         --错误处理
  16.         if err ~= 0 then
  17.             print("接收错误:"..err)
  18.             return
  19.         end

  20.         --统计数据量
  21.         len = len + #data

  22.         --超过300M打印一下速率
  23.         if len > 300 * 1024 * 1024  then
  24.             --获取当前时间,精确到ms
  25.             local cur = gettime()

  26.             --计算间隔
  27.             local spec = cur - lastTime
  28.             lastTime = cur

  29.             --打印速率
  30.             printf(port..": 当前速率为:%.2f KB/S ", len * 1000 / 1024 / spec)
  31.             len = 0
  32.         end
  33.     end
  34. end

  35. --启动接收任务
  36. taskStart(recvTask, "test")
复制代码

串口自动监听:
当串口插入电脑后,创建任务自动监听其数据并存入文件,串口拔出后,进入等待,串口再次插入后自动连接,并继续接收数据


  1. --串口配置
  2. config = {
  3.     baudrate = 115200,  --115200波特率
  4.     dataBits = 8,            --8位数据位
  5.     stopBits = 1,            --1位停止位,当使用1.5时请使用字符串"1.5"
  6.     parity = "N",            --无校验
  7.     flowctl = 0               --无流控
  8. }

  9. --获取已连接的端口列表
  10. local connList = portConnectedListGet()

  11. --遍历当前已连接的端口,断开其中的串口端口
  12. for k, v in pairs(connList) do
  13.     --断开类型为串口的端口
  14.     if portInfo(k).type == "Serial" then
  15.         portRemove(k)
  16.     end
  17. end

  18. --串口数据接收任务
  19. function recvTask(port)
  20.     --记录数据到文件中
  21.     local dataRecordFile = io.open(port.."_RECORD", "wb")
  22.     if dataRecordFile == nil then
  23.         --文件打开失败
  24.         printf("文件%s打开失败,无法记录当前串口的数据! ", port.."RECORD")
  25.     end

  26.     --不停的接收来自串口的任务
  27.     while true do
  28.         local data, err = portRecv(port)

  29.         --发生错误
  30.         if err ~= 0 then
  31.             while true do
  32.                 --等待端口连接
  33.                 local info = portInfo(port)

  34.                 --被销毁
  35.                 if info.state == "destroyed" then
  36.                     print(port..": 已销毁!")
  37.                     dataRecordFile:close()
  38.                     return
  39.                 --已连接上
  40.                 elseif info.state == "connected" then
  41.                     print(port..": 已连接!")
  42.                     break
  43.                 end

  44.                 --等待状态变化
  45.                 portEventWait(port)
  46.             end
  47.         else
  48.             --记录数据
  49.             dataRecordFile:write(data)
  50.             --打印数据
  51.             print(port..":"..data)
  52.         end
  53.     end
  54. end

  55. --为当前插上的串口创建接收任务
  56. while true do
  57.     --获取串口列表
  58.     local serialList = serialListGet()

  59.     --创建名为端口号的端口
  60.     for k, v in pairs(serialList) do
  61.         --获取将要创建的端口的信息
  62.         local info = portInfo(k)

  63.         --这个端口没有创建
  64.         if info.state == "destroyed" or info.type ~= "Serial" then
  65.             --尝试移除这个端口
  66.             portRemove(k)

  67.             --创建这个串口
  68.             config.port = k
  69.             portCreate(k, "Serial", config)
  70.             --连接这个端口
  71.             portConnect(k)
  72.             --创建接收任务
  73.             taskStart(recvTask, k)

  74.         --连接断开的端口
  75.         elseif info.state == "disconnected" then
  76.             portConnect(k)
  77.         end
  78.     end

  79.     --等待串口列表改变
  80.     serialListChangedWait()
  81.     --WinXP需要延时一下才能操作
  82.     sleep(200)
  83. end
复制代码


TCP回显服务器:
客户端连接上后,发送的所有数据将回显至客户端,支持任意多个客户端


  1. --服务器名称
  2. server = "test"

  3. --创建TCP服务器,并打开
  4. portRemove(server)
  5. portCreate(server, "TcpServer", {port_num = 4000})
  6. portConnect(server)

  7. --TCP客户端回显任务
  8. function client_echo_task(client)
  9.     --print(client.."已连接!")
  10.     while true do
  11.         --等待客户端发送数据
  12.         local data, err = portRecv(client)
  13.         --回显
  14.         if err == 0 then
  15.             portSend(client, data)
  16.             --print(client..":"..data)
  17.         else
  18.             --print(client.."读出错:"..err)
  19.             break
  20.         end
  21.     end
  22. end

  23. while true do
  24.     --等待客户端接入
  25.     local client, err = portRecv(server)

  26.     if err == 0 then
  27.         --创建回显任务
  28.         taskStart(client_echo_task, client)
  29.     else
  30.         print(server.."服务器错误:"..err)
  31.         break
  32.     end
  33. end
复制代码

TCP客户端:

  1. --测试客户端
  2. client = "test"

  3. --创建端口,并连接服务器
  4. portRemove(client)
  5. portCreate(client, "TcpClient", {host = "localhost", port_num = 4000})
  6. portConnect(client)

  7. --接收服务器数据任务
  8. function recvTask(port)
  9.     while true do
  10.         local data, err = portRecv(port)

  11.         if err ~= 0 then
  12.             print("客户端接收出错!")
  13.             exit()
  14.             return
  15.         end

  16.         print(data)
  17.     end
  18. end

  19. --启动接收任务
  20. taskStart(recvTask, client)

  21. while true do
  22.     --每隔1s发送一包数据
  23.     portSend(client, "Hello..")
  24.     sleep(1000)
  25. end
复制代码
每个1s自动向服务器发送 "Hello .."

更多示例代码请见分享

一周热门 更多>