CS机器人RS485通讯

2024-10-15

1.  控制柜485

艾利特机器人CS系列支持RS485通讯,用户可以通过将 RS485 设备连接到图 1-1 中所示的连接器来从控制柜执行串行通信。为了能在控制柜中设置 RS485 连接器,必须拆掉串口连接 器,并将 RS485 线焊接到黑色连接器背面的金属触点,如图 1-2 所示。黑色塑料装置的正反 面分别标有 PIN“1 3 5”和“2 4 6”。PIN3 应焊接到 RS485B,PIN4 应焊接 到 RS485A。该 接口支持的最大波特率为 500Kbps。

图 1-1CS 控制柜 RS485 连接器

图1- 2 黑色器件

2.  工具IO485

艾利特机器人同样支持末端工具485通讯,当需要使用末端 RS485 接口与执行器通信时, 需要在示教器工具 IO 界面下进行配置,具体配置路 径为:“工具模拟 IO>工具模式”,选择 USART 模式,并根据执行器实际参数配置波特率等参数。 从在机器人控制器上写入发送数据到 数据在 RS485 上开始发送,延迟范围为 2ms 到 4ms。从在 RS485 上开始接收数据到机器人控 制器收到数据并开始处理,延迟范围为 2ms 到 4ms。 本篇文章介绍控制柜实现485通讯方式,工具端485查询脚本手册。

3.  脚本指令

3.1 控制柜RS-485 配置

serial_config(enable, baud, parity_bit, stop_bit, size, modbus_rtu, port="/dev/ttymxc0")

 功能: 该指令用于打开或关闭机器人控制柜 RS-485 通信功能,并对其进行配置。

 参数: enable:串口通信的使能状态,boolean 型数据;

              baud:波特率,integer 型数据:2400、4800、9600、19200、38400、57600、115200、230400、 460800、921600、500000;

              parity_bit:串口奇偶校验,integer 型数据:0(不校验)、1(奇校验)、2(偶校校验);

              stop_bit:串口停止位,integer 型数据:1、2;

              size:串口的位宽。不指定时,使 用默认参数 8,integer 型数据:7 或 8(可选参数)。 若为 MODBUSRTU 模式,则必须为 8;

              modbus_rtu:是否启用 modbus-rtu 模式,指定为 True 时为 Modbus-rtu 模式,指定为 False 时为 RS485 模式,不指定时使用默认参数 False,boolean 类型数据;

              port : 串口的端口名,目前仅支持 :”/dev/ttymxc0” 。不指定名称时 , 使用默认名称 “/dev/ttymxc0”,string 型数据(可选参数)。

 返回值: 如果配置成功,返回 True,如果配置失败,返回 False,boolean 型数据 。

3.2 写入控制柜 RS-485 通信数据

serial_write(data, port="/dev/ttymxc0")

 功能: 该指令用于机器人控制柜 RS-485 发送数据。

 参数: data:待发送的数据,string 型数据、integer 型数据、整数 list 型数据、bytes 型数据或 bytearray 型数据,若为 integer 或整数 list 型数据,会写入一个或多个整数数据,数据值若超过 [0-255] 范围, 会自动按照                           内存类型转换或内存截断的方式强制转换至范围内。

              port:串口的端口名,目前仅支持:”/dev/ttymxc0”。不指定名称时,使用默认名称“/dev/ttymxc0”, string(可选参数)。

 返回值: 如果发送成功,返回 True,如果发送失败,返回 False,boolean 型数据。

3.3 读取控制柜 RS-485 通信数据

serial_read(len,is_number=True,time_out=0.1,port="/dev/ttymxc0")

 功能: 该指令用于读取机器人控制柜 RS-485 通信的数据。

 参数: len:要读取的字节数,注意假设要读取的字节数为 5,但实际只接收到 2 字节数据,最后读出的 长度为 2 字节;

               is_number:是否按照整数格式返回字节数据。若不指定,使用默认参数 True,boolean 型数据 (可选参数);

               time_out:超时时间,单位:秒,若小于等于 0,则等待超时时间为无限长,不指定时,使用默 认值 0.1,float 型数据(可选参数);

               port : 串 口 的 端 口 名 ,目前仅支持 :”/dev/ttymxc0” 。 不 指 定 名 称 时 ,使用默认名 称 “/dev/ttymxc0”,string 型数据(可选参数)。

 返回值: bytearray 或 list 型数据,若 is_number 参数 True,则返回值为整数类型的 list,若is_number 参数 False,则返回值为 bytes array,若发生超时,则返回所有已经读取到的数据。

如果仅需要与外部设备485通讯用上述3条脚本指令即可收发,如想同时写入\读取多个寄存 器查找脚本手册“写入\读取多个MODBUS寄存器指令”,本文档举例和升降柱做485通讯。

下文为机器人脚本示例:

import struct

global Currentposition

#通讯设置modbus_rtu

def Connection_rtu():#连接机器人与升降柱伺服通讯

   while True:

       Open_RS485 = serial_config(True,57600,0,2,8,True)

       mode = serial_mode()

       if mode == "MODBUS-RTU":

           return "Connection Success"

           break

def Fault_reset():#复位伺服故障,绝大多数故障可复位

   serial_write([1,3329,1])

   return "Fault reset Success"

   return

def Point_speed(speed):#设置点动的速度最小0,最大3000,单位rpm

   serial_write(1, 1540, speed)

   return

def Move_position_speed(position,speed):#设置多段移动的位置和速度,位置1MM等于10000个脉冲

   #position = position * 10000

   getpos = struct.pack("i",position)

   posset = struct.unpack("2H",getpos)

   serial_modbus_write_registers(1,4364,[posset[0],posset[1]])

   sleep(0.01)

   serial_modbus_write_single_register(1,4366,speed)

   return

   while True:

       in3 = get_standard_digital_in(3)

       if in3 == True :

           Servo_control(17)

           sleep(0.1)

           Servo_control(49)

           sleep(0.5)

           Servo_control(17)

           sleep(0.1)

           Servo_control(49)

           break

       sync()

def Upper_limit_stop():#到达上限位置,DI2触发,停止上升,升降柱处于伺服使能状态

   sleep(0.01)

   in2 = get_standard_digital_in(2)

   if in3 == True:

       Servo_control(1)

def Lower_limit_stop():#到达下限位置,DI3触发,停止下降,升降柱处于伺服使能状态

   sleep(0.01)

   in3 = get_standard_digital_in(3)

   if in3 == True:

       Servo_control(1)

Connection_rtu()

#Fault_reset()

#sleep(0.01)

#Originsetting()

#Currentposition = Current_position()

#sleep(0.01)

#Servo_control(1)

#sleep(0.01)

#Move_position_speed(100000,500)

#sleep(0.01)

#Servo_control(9)

while True:

   Upper_limit_stop()

   Lower_limit_stop()

   Currentposition = Current_position()

3.4 与通讯助手测试案例

举例机器人发送端,发送整数123,助手端同样收到123。

注:1.下图中红色方框内的显示编码格式需设置为十进制,因为机器人发送十进制,若不勾选,则会显示16进制的123,值为7B。

十进制"123"

十六进制“123“

超过255的数据,显示选择Ascll

举例机器人接收端:

助手发送需勾选16进制发送

机器人接收后会转为10进制

这种方法看起来不够直观,因此建议接收时不选用list,选择bytearray,注意在接收指令的后面加python解码指令,编译为utf-8。

不需要勾选16进制

这里选择解码编译utf-8,可直接读到助手发送的值


download-669.svg comicon14.svg

电话咨询

download-397.svg comicon15.svg

免费试用

Vector.svg Frame.svg

微信小程序

img1.jpg

微信小程序

准备好突破增长瓶颈,开启智能制造了吗?
了解我们的机器人如何帮助您的业务增长
欢迎下载艾利特机器人资料

我已阅读并同意艾利特《隐私政策》《法律声明》

我已知晓并同意艾利特通过电子邮件发送相关资料

提交