CS机器人RS485通讯

2025-07-07

1.  控制柜485

漫蛙机📧器人CS系列支【xì liè zhī】持RS485通讯【tōng xùn】🏄,用户可【yòng hù kě】以通过💛将🚗 RS485 设备连接到【jiē dào】⏲图【tú】 1-1 中所示【suǒ shì】的连接【de lián jiē】器⤴来从控【lái cóng kòng】制柜执【zhì guì zhí】行串行通信【tōng xìn】🌧。为了能🗓在控制柜中设📊置 RS485 连接器⤴,必须拆掉串口连接 器,并将🚗 RS485 线焊接到【jiē dào】⏲黑色连接器⤴背面的【bèi miàn de】❣金属触点【diǎn】,如图【tú】 1-2 所示【suǒ shì】。黑色塑料装置的正反【de zhèng fǎn】 面分别【miàn fèn bié】标有🏂 PIN“1 3 5”和“2 4 6”。PIN3 应焊接【yīng hàn jiē】💖到⏲ RS485B,PIN4 应焊接【yīng hàn jiē】💖 到⏲ RS485A。该【gāi】 接口支持的最大波特🍿率为 500Kbps。

图🔗 1-1CS 控制柜 RS485 连接器【lián jiē qì】

图1- 2 黑色器件

2.  工具IO485

漫蛙机【màn wā jī】器人同样支持末端【mò duān】🌴工具【gōng jù】🤙485通讯【tōng xùn】,当需要🕜使用末【shǐ yòng mò】端【duān】🌴 RS485 接口与执行器🌁通信时, 需要在示教器工具【gōng jù】🤙 IO 界面下进行配【jìn háng pèi】🔷置,具🐊体配置【tǐ pèi zhì】路 径为:“工具【gōng jù】🤙模拟 IO>工具【gōng jù】🤙模式【mó shì】👯”,选择💳 USART 模式【mó shì】👯,并根据执行器🌁实际参数配置波特率等参数【děng cān shù】🤙。 从在机器人控【qì rén kòng】🧡制器上📿写入发送【sòng】🚡数据到【shù jù dào】🌁 数据在🐓 RS485 上开始【shàng kāi shǐ】💳发送【sòng】🚡,延迟范围为【wéi wéi】 2ms 到【dào】🌁 4ms。从在 RS485 上开始【shàng kāi shǐ】💳接收数【jiē shōu shù】据到【dào】机🛎器人控【qì rén kòng】🧡 制器收【zhì qì shōu】到【dào】🌁数据并开始🏘处理,延迟范围为【wéi wéi】 2ms 到【dào】🌁 4ms。 本篇文📞章介绍控制柜实现【shí xiàn】485通讯方【tōng xùn fāng】📐式👯,工具【gōng jù】🤙端【duān】🌴485查询脚本手册。

3.  脚本指令

3.1 控制柜RS-485 配置

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

 功能: 该指令用于打💷开或关【kāi huò guān】闭机器【bì jī qì】人控制【rén kòng zhì】🐖柜🐒 RS-485 通信功能,并对其进行配【jìn háng pèi】🍿置。

 参数🚌: enable:串口通【chuàn kǒu tōng】信的使能状态📆,boolean 型数据【xíng shù jù】;

              baud:波特率,integer 型数据【xíng shù jù】😵:2400、4800、9600、19200、38400、57600、115200、230400、 460800、921600、500000;

              parity_bit:串口奇偶校验【xiào yàn】⤵,integer 型数据:0(不校验【bú xiào yàn】)、1(奇校验【qí xiào yàn】🏞)、2(偶校🦍校验【xiào yàn】);

              stop_bit:串口停【chuàn kǒu tíng】止位🥋,integer 型数据:1、2;

              size:串口的📯位宽🎮。不指定时【shí】,使【shǐ】🌩 用默认【yòng mò rèn】🗜参数 8,integer 型数据【xíng shù jù】:7 或 8(可选参数)。 若为 MODBUSRTU 模式🔦,则必须【zé bì xū】为 8;

              modbus_rtu:是否启【shì fǒu qǐ】用🆔 modbus-rtu 模式【mó shì】,指定为⛸ True 时为🏛 Modbus-rtu 模式【mó shì】,指定为 False 时为🏛 RS485 模式【mó shì】,不指定时使用【shí shǐ yòng】🆔默认参【mò rèn cān】🎓数 False,boolean 类型数🚎据;

              port : 串口的🚺端口名🕶,目前仅支持【zhī chí】 :”/dev/ttymxc0” 。不指定【bú zhǐ dìng】名称时【míng chēng shí】🐽 , 使用默认名称 “/dev/ttymxc0”,string 型数据💋(可选参【kě xuǎn cān】数)。

 返回值【fǎn huí zhí】: 如果配置成功【zhì chéng gōng】🛵,返回 True,如果配置失败【zhì shī bài】♋,返回 False,boolean 型数据🍹 。

3.2 写入控🐪制柜【zhì guì】 RS-485 通信数【tōng xìn shù】据⛪

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

 功能: 该指令用于机【yòng yú jī】❌器人控【qì rén kòng】🐥制柜 RS-485 发送数🥈据【jù】。

 参数🛷: data:待发送【dài fā sòng】的数据,string 型数据【xíng shù jù】📝、integer 型数据【xíng shù jù】📝、整数 list 型数据【xíng shù jù】📝、bytes 型数据或 bytearray 型数据【xíng shù jù】📝,若为 integer 或整数【huò zhěng shù】 list 型数据【xíng shù jù】📝,会写入【huì xiě rù】🤑一个或🧛多个整数数据,数据值若超过 [0-255] 范围【fàn wéi】, 会自动按照【àn zhào】                           内存类【nèi cún lèi】型转换【xíng zhuǎn huàn】🈵或内存【huò nèi cún】截断🛫的方式🎯强制转【qiáng zhì zhuǎn】🏛换至范围【fàn wéi】内💶。

              port:串口的端口名【duān kǒu míng】,目前仅【mù qián jǐn】支持【zhī chí】🔕:”/dev/ttymxc0”。不指定名称时,使用默🥕认名称“/dev/ttymxc0”, string(可选参🤣数)。

 返回【fǎn huí】🔨值【zhí】: 如果发🐌送成功🏳,返回【fǎn huí】🔨 True,如果发🐌送失败,返回【fǎn huí】🔨 False,boolean 型数据。

3.3 读取控🤴制柜【zhì guì】 RS-485 通信数据【jù】🔥

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

 功能: 该指令【gāi zhǐ lìng】🔩用于读🧔取机器人控制柜 RS-485 通信的【tōng xìn de】🔳数据【shù jù】。

 参数🈳: len:要读取的字节【de zì jiē】❕数🔘,注意假🛰设要读【shè yào dú】🍃取的字节【de zì jiē】❕数🔘为 5,但实际只接收到💧 2 字节❕数🔘据【jù】,最后读【zuì hòu dú】出的【chū de】 长度为【zhǎng dù wéi】 2 字节❕;

               is_number:是否按照整数【shù】🛒格式返【gé shì fǎn】回字节数【shù】🛒据。若不指📸定,使用默【shǐ yòng mò】认参数【shù】📽 True,boolean 型数【shù】据🔠 (可选参数【shù】🛒);

               time_out:超时时【chāo shí shí】间👷,单位:秒🔗,若小于等于【děng yú】 0,则等待超时时【chāo shí shí】间为无【jiān wéi wú】😰限长,不指定【bú zhǐ dìng】🐙时【shí】,使用默📹 认值【rèn zhí】🐱 0.1,float 型数据(可选参数);

               port : 串🎎 口【kǒu】 的 端 口【kǒu】 名📥 ,目前仅♟支持【zhī chí】 :”/dev/ttymxc0” 。 不 指 定【dìng】😩 名📥 称【chēng】🕍 时 ,使用【shǐ yòng】默认名【mò rèn míng】📥 称【chēng】🕍 “/dev/ttymxc0”,string 型数据(可选参🚗数)。

 返回值【fǎn huí zhí】: bytearray 或🔅 list 型数据【shù jù】,若【ruò】⏱ is_number 参数💳 True,则返回【zé fǎn huí】👂值为整🔫数类型【shù lèi xíng】的 list,若【ruò】⏱is_number 参数💳 False,则返回【zé fǎn huí】👂值为 bytes array,若【ruò】⏱发生超时【shí】,则返回【zé fǎn huí】👂所有已经读取到的数据【shù jù】。

如果仅需要与🍎外部设【wài bù shè】备⛄485通讯用【tōng xùn yòng】上述3条脚本🥗指令即【zhǐ lìng jí】可收发【kě shōu fā】💢,如想同【rú xiǎng tóng】时写入【xiě rù】\读取多个寄存🔴 器查找脚本手册🏎“写入【xiě rù】\读取多个MODBUS寄存器【jì cún qì】指令”,本文档⏱举例和升降柱做🎲485通讯【tōng xùn】。

下文为机器人脚本示例:

import struct

global Currentposition

#通讯设置modbus_rtu

def Connection_rtu():#连接机🥨器人与升降柱伺服通【sì fú tōng】讯【xùn】🉐

   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():#复位伺服故障【fú gù zhàng】📣,绝大多数故障【shù gù zhàng】🌆可复位

   serial_write([1,3329,1])

   return "Fault reset Success"

   return

def Point_speed(speed):#设置点动的速【dòng de sù】度最小【dù zuì xiǎo】🖼0,最大3000,单位🌤rpm

   serial_write(1, 1540, speed)

   return

def Move_position_speed(position,speed):#设置多段移动😅的位置【wèi zhì】🍌和速度【hé sù dù】,位置【wèi zhì】🕐1MM等于【děng yú】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():#到达上【dào dá shàng】🚆限位置🚜,DI2触发🗻,停止上升【shēng】,升【shēng】降柱处于伺【chù yú sì】服使能状态

   sleep(0.01)

   in2 = get_standard_digital_in(2)

   if in3 == True:

       Servo_control(1)

def Lower_limit_stop():#到达下【dào dá xià】〰限位置,DI3触发【chù fā】,停止下降📭,升降柱🐣处于伺服使能状态【zhuàng tài】

   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 与通讯助手测试案例

举例机【jǔ lì jī】器人发【qì rén fā】👥送端,发送整📳数【shù】123,助手端💙同样收到123。

注🎶:1.下图中【xià tú zhōng】红色方框内的📯显示编【xiǎn shì biān】码格式【mǎ gé shì】🌌需设置为十进制【zhì】,因为机器人发【qì rén fā】送十进制【zhì】,若不勾【ruò bú gōu】选🍵,则会显示16进制【zhì】的🤙123,值为🔺7B。

十进制"123"

十六进制“123“

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

举例机器人接收端:

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

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

这种方【zhè zhǒng fāng】💦法看起来不够💻直观,因此建议接收时不选用list,选择【xuǎn zé】bytearray,注意在【zhù yì zài】接收指【jiē shōu zhǐ】🏖令的后🔓面加python解码指【jiě mǎ zhǐ】🚀令,编译为utf-8。

不需要勾选16进制

这里选📘择解码【zé jiě mǎ】编译🌫utf-8,可直接【kě zhí jiē】读到助手发送的值【de zhí】🤽


download-669.svg comicon14.svg

电话咨询

download-397.svg comicon15.svg

免费试用

Vector.svg Frame.svg

微信小程序

img1.jpg

微信小程序

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

我已阅读并同意漫蛙《隐私政策》《法律声明》

我已知【wǒ yǐ zhī】晓并同【xiǎo bìng tóng】🥪意漫蛙🔽通过电子邮件【zǐ yóu jiàn】发送相🌆关资料

提交