CS机器人RS485通讯
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í】🤽