越疆机器人TCP通讯之12点标定脚本程序

-- Version: Lua 5.4.4
-- 此线程为主线程,可调用任何指令
--必须先示教P1点位置,运行到P5点后手动暂停将当前位置保存到P2
--P2作为角度旋转标定基准位
--本程序用于越疆Robot和海康Vision master 12点标定
     VelL(20)             -- 设置线性速度
     AccL(20)             -- 设置线性加速度
     SpeedFactor(20)      -- 设置全局速度

     MovL(P1)---初始化位置

     x=50---X赋值
     y=50---Y赋值
     r=15---角度赋值
---------字符串分割----------
     function string.split(str,delimiter)
     if str==nil or str=='' or delimiter==nil then
     return nil
     end
     local result = {}
     for match in (str..delimiter):gmatch("(.-)"..delimiter) do
     table.insert(result,match)
     end
     return result
     end

------------------通讯连接---------------------

     function Connect(isServer,ip,prot)--建立TCP通信
     ::Cab_PC::  --跳转标签
     err, socket = TCPCreate(isServer,ip,prot)-- isServer:表示客户端或服务器(false: 表示创建客户端; true: 表示创建服务)  i
     print("err=",err)
     Wait(100)
     if err ~= 0 then
     print("创建链接失败,重新创建链接...\r\n")
     Wait(100)
     goto Cab_PC  --创建服务器失败跳转到create_serverCab标签继续创建
     end
     err = TCPStart(socket,0)--socket:socket对象  0:如果为0,则一直等待连接。如果不为0,则超过设定 的时间后退出连接。
     if err ~= 0 then
     print("握手失败,重新发起...\r\n")
     TCPDestroy(socket)--关闭TCP功能
     Wait(100)
     goto Cab_PC
     end
     print("握手成功...\r\n")
     end

-----------------数据交互-----------------
     function ReceiveData()          --数据接受                      
     local
     local DataArrayS={}
     err,Recbuf=TCPRead(socket,0,"string")    
     if err==0 and Recbuf~="" then
     DataArrayS=string.split(Recbuf,",")
     else   
     Connect(false,"192.168.1.90",8604) 
     end
     return DataArrayS
end    
----------数据发送-----------
     function SendData(socket,Str)   
     if Str~="" then
     err=TCPWrite(socket, Str)
     print("err=",err)
     if err==0 then
     print("Send Data OK")
     else
     Connect(false,"192.168.1.90",8604)          --接受失败,再次调用重连机制
     print("Send Data NG")
     end
     end
     end

---------------------------main-----------------------------
---P1
     Connect(false,"192.168.1.90",8604)      --建立TCP通信
     print("hello world")
     MovL(P1,{user=0,tool=1})
     Wait(500)
     currentPose_1=GetPose(0,1)
     Wait(300)
     print("currentPose_1=",currentPose_1)
     Test1="A"..","..tonumber(currentPose_1.pose[1])..","..tonumber(currentPose_1.pose[2])..","..tonumber(currentPose_1.pose[6])
     SendData(socket,Test1)
     Wait(1000)

---P2
     RelMovLUser({0,y,0,0,0,0})
     Wait(500)
     currentPose_2=GetPose(0,1)
     Wait(300)
     print("currentPose_2=",currentPose_2)
     Test2="A"..","..tonumber(currentPose_2.pose[1])..","..tonumber(currentPose_2.pose[2])..","..tonumber(currentPose_2.pose[6])
     SendData(socket,Test2)
     Wait(1000) 

     ---P3
     RelMovLUser({0,y,0,0,0,0})
     Wait(500)
     currentPose_3=GetPose(0,1)
     Wait(300)
     print("currentPose_3=",currentPose_3)
     Test3="A"..","..tonumber(currentPose_3.pose[1])..","..tonumber(currentPose_3.pose[2])..","..tonumber(currentPose_3.pose[6])
     SendData(socket,Test3)
     Wait(1000)

-- Version: Lua 5.4.4
-- 此线程为主线程,可调用任何指令
--必须先示教P1点位置,运行到P5点后手动暂停将当前位置保存到P2
--P2作为角度旋转标定基准位
--本程序用于越疆Robot和海康Vision master 12点标定
     VelL(20)             -- 设置线性速度
     AccL(20)             -- 设置线性加速度
     SpeedFactor(20)      -- 设置全局速度

     MovL(P1)---初始化位置

     x=50---X赋值
     y=50---Y赋值
     r=15---角度赋值
---------字符串分割----------
     function string.split(str,delimiter)
     if str==nil or str=='' or delimiter==nil then
     return nil
     end
     local result = {}
     for match in (str..delimiter):gmatch("(.-)"..delimiter) do
     table.insert(result,match)
     end
     return result
     end

------------------通讯连接---------------------

     function Connect(isServer,ip,prot)--建立TCP通信
     ::Cab_PC::  --跳转标签
     err, socket = TCPCreate(isServer,ip,prot)-- isServer:表示客户端或服务器(false: 表示创建客户端; true: 表示创建服务)  i
     print("err=",err)
     Wait(100)
     if err ~= 0 then
     print("创建链接失败,重新创建链接...\r\n")
     Wait(100)
     goto Cab_PC  --创建服务器失败跳转到create_serverCab标签继续创建
     end
     err = TCPStart(socket,0)--socket:socket对象  0:如果为0,则一直等待连接。如果不为0,则超过设定 的时间后退出连接。
     if err ~= 0 then
     print("握手失败,重新发起...\r\n")
     TCPDestroy(socket)--关闭TCP功能
     Wait(100)
     goto Cab_PC
     end
     print("握手成功...\r\n")
     end

-----------------数据交互-----------------
     function ReceiveData()          --数据接受                      
     local
     local DataArrayS={}
     err,Recbuf=TCPRead(socket,0,"string")    
     if err==0 and Recbuf~="" then
     DataArrayS=string.split(Recbuf,",")
     else   
     Connect(false,"192.168.1.90",8604) 
     end
     return DataArrayS
end    
----------数据发送-----------
     function SendData(socket,Str)   
     if Str~="" then
     err=TCPWrite(socket, Str)
     print("err=",err)
     if err==0 then
     print("Send Data OK")
     else
     Connect(false,"192.168.1.90",8604)          --接受失败,再次调用重连机制
     print("Send Data NG")
     end
     end
     end

---------------------------main-----------------------------
---P1
     Connect(false,"192.168.1.90",8604)      --建立TCP通信
     print("hello world")
     MovL(P1,{user=0,tool=1})
     Wait(500)
     currentPose_1=GetPose(0,1)
     Wait(300)
     print("currentPose_1=",currentPose_1)
     Test1="A"..","..tonumber(currentPose_1.pose[1])..","..tonumber(currentPose_1.pose[2])..","..tonumber(currentPose_1.pose[6])
     SendData(socket,Test1)
     Wait(1000)

---P2
     RelMovLUser({0,y,0,0,0,0})
     Wait(500)
     currentPose_2=GetPose(0,1)
     Wait(300)
     print("currentPose_2=",currentPose_2)
     Test2="A"..","..tonumber(currentPose_2.pose[1])..","..tonumber(currentPose_2.pose[2])..","..tonumber(currentPose_2.pose[6])
     SendData(socket,Test2)
     Wait(1000) 

     ---P3
     RelMovLUser({0,y,0,0,0,0})
     Wait(500)
     currentPose_3=GetPose(0,1)
     Wait(300)
     print("currentPose_3=",currentPose_3)
     Test3="A"..","..tonumber(currentPose_3.pose[1])..","..tonumber(currentPose_3.pose[2])..","..tonumber(currentPose_3.pose[6])
     SendData(socket,Test3)
     Wait(1000)
 

Read more

Java 中间件:Kafka 分区策略(自定义分区器实现负载均衡)

Java 中间件:Kafka 分区策略(自定义分区器实现负载均衡)

👋 大家好,欢迎来到我的技术博客! 📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。 🎯 本文将围绕Java中间件这个话题展开,希望能为你带来一些启发或实用的参考。 🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获! 文章目录 * Java 中间件:Kafka 分区策略(自定义分区器实现负载均衡) 🚀 * 1. Kafka 分区机制基础 🧱 * 1.1 什么是分区? * 1.2 默认分区策略 * 2. 为什么需要自定义分区器?🎯 * 场景一:避免热点分区 🔥 * 场景二:按业务维度分片 🗂️ * 场景三:动态负载感知 📊 * 3. Kafka 分区器接口详解 🛠️ * 核心方法说明: * 4. 实战:实现一个简单的自定义分区器 💻 * 4.1 项目依赖 * 4.2 自定义分区器代码 * 4.3 配置生产者使用自定义分区器

By Ne0inhk
从兼容到超越:KingbaseES 突破 MySQL 权限局限,以权限隔离筑牢数据安全防线

从兼容到超越:KingbaseES 突破 MySQL 权限局限,以权限隔离筑牢数据安全防线

前言 对于数据库安全而言,用户权限隔离是守护数据访问边界、杜绝未授权操作的核心能力。KingbaseES 作为面向企业的专业数据库产品,一方面通过兼容 MySQL 核心语法简化迁移流程,另一方面突破基础兼容局限,完成了向“功能增强”阶段的升级。依靠用户权限隔离功能为普通用户提供表、函数、视图、字段等数据库对象的精细化访问管控,以权限隔离筑牢数据安全防线。 文章目录 * 前言 * 一、用户权限隔离核心概述 * 1.1 功能定位与价值 * 1.2 核心语法:启用与禁用 * 二、功能实现原理 * 2.1 底层依赖:行级安全策略(RLS) * 2.2 关键技术组件 * 2.2.1核 心结构体与列表 * 2.2.2 权限判断函数 * 三、用户权限隔离实战操作 * 3.

By Ne0inhk
离线部署指南:本地下载MySQL 8.0.37并上传服务器Centos7.9安装

离线部署指南:本地下载MySQL 8.0.37并上传服务器Centos7.9安装

离线部署指南:本地下载MySQL 8.0.37并上传服务器安装 在生产环境中,我们常常会遇到服务器无法连接外网的情况,这时候就需要离线安装MySQL。本文详细介绍如何从官网下载MySQL 8.0.37,上传到CentOS 7.9服务器并进行完整安装配置。 环境准备 * 操作系统: CentOS 7.9 * MySQL版本: 8.0.37 * 安装方式: RPM包离线安装 第一步:下载MySQL安装包 访问MySQL官网 1. 打开 MySQL Community Server下载页面 2. 选择版本信息: * Operating System: Linux - Generic * OS Version: Linux - Generic (glibc 2.12) 下载类型:

By Ne0inhk
Spring Cloud之服务入口Gateway之自定义过滤器

Spring Cloud之服务入口Gateway之自定义过滤器

目录 过滤器执行顺序 自定义过滤器 自定义GatewayFilter 定义GatewayFilter 配置过滤器 启动服务并访问 自定义GlobalFilter 定义GlobalFilter 启动服务并访问 服务部署 过滤器执行顺序 如果⼀个项⽬中, 既有GatewayFilter, ⼜有 GlobalFilter时, 执⾏的先后顺序是什么呢? 请求路由后, ⽹关会把当前项⽬中的GatewayFilter和GlobalFilter合并到⼀个过滤器链(集合)中, 并进⾏排序, 依次执⾏过滤器. 每⼀个过滤器都必须指定⼀个int类型的order值, 默认值为0, 表⽰该过滤的优先级. order值越⼩,优先级越⾼,执⾏顺序越靠前. • Filter通过实现Order接⼝或者添加@Order注解来指定order值. • Spring Cloud Gateway提供的Filter由Spring指定. ⽤⼾也可以⾃定义Filter, 由⽤⼾指定.

By Ne0inhk