CS機器人RS485通訊
1. 控制柜485
艾利特機器人CS系列支持RS485通訊,用戶可以通過將 RS485 設備連接到圖 1-1 中所示的連接器來從控制柜執(zhí)行串行通信。為了能在控制柜中設置 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 接口與執(zhí)行器通信時, 需要在示教器工具 IO 界面下進行配置,具體配置路 徑為:“工具模擬 IO>工具模式”,選擇 USART 模式,并根據(jù)執(zhí)行器實際參數(shù)配置波特率等參數(shù)。 從在機器人控制器上寫入發(fā)送數(shù)據(jù)到 數(shù)據(jù)在 RS485 上開始發(fā)送,延遲范圍為 2ms 到 4ms。從在 RS485 上開始接收數(shù)據(jù)到機器人控 制器收到數(shù)據(jù)并開始處理,延遲范圍為 2ms 到 4ms。 本篇文章介紹控制柜實現(xiàn)485通訊方式,工具端485查詢腳本手冊。
3. 腳本指令
3.1 控制柜RS-485 配置
serial_config(enable, baud, parity_bit, stop_bit, size, modbus_rtu, port="/dev/ttymxc0")
? 功能: 該指令用于打開或關閉機器人控制柜 RS-485 通信功能,并對其進行配置。
? 參數(shù): enable:串口通信的使能狀態(tài),boolean 型數(shù)據(jù);
baud:波特率,integer 型數(shù)據(jù):2400、4800、9600、19200、38400、57600、115200、230400、 460800、921600、500000;
parity_bit:串口奇偶校驗,integer 型數(shù)據(jù):0(不校驗)、1(奇校驗)、2(偶校校驗);
stop_bit:串口停止位,integer 型數(shù)據(jù):1、2;
size:串口的位寬。不指定時,使 用默認參數(shù) 8,integer 型數(shù)據(jù):7 或 8(可選參數(shù))。 若為 MODBUSRTU 模式,則必須為 8;
modbus_rtu:是否啟用 modbus-rtu 模式,指定為 True 時為 Modbus-rtu 模式,指定為 False 時為 RS485 模式,不指定時使用默認參數(shù) False,boolean 類型數(shù)據(jù);
port : 串口的端口名,目前僅支持 :”/dev/ttymxc0” 。不指定名稱時 , 使用默認名稱 “/dev/ttymxc0”,string 型數(shù)據(jù)(可選參數(shù))。
? 返回值: 如果配置成功,返回 True,如果配置失敗,返回 False,boolean 型數(shù)據(jù) 。
3.2 寫入控制柜 RS-485 通信數(shù)據(jù)
serial_write(data, port="/dev/ttymxc0")
? 功能: 該指令用于機器人控制柜 RS-485 發(fā)送數(shù)據(jù)。
? 參數(shù): data:待發(fā)送的數(shù)據(jù),string 型數(shù)據(jù)、integer 型數(shù)據(jù)、整數(shù) list 型數(shù)據(jù)、bytes 型數(shù)據(jù)或 bytearray 型數(shù)據(jù),若為 integer 或整數(shù) list 型數(shù)據(jù),會寫入一個或多個整數(shù)數(shù)據(jù),數(shù)據(jù)值若超過 [0-255] 范圍, 會自動按照 內存類型轉換或內存截斷的方式強制轉換至范圍內。
port:串口的端口名,目前僅支持:”/dev/ttymxc0”。不指定名稱時,使用默認名稱“/dev/ttymxc0”, string(可選參數(shù))。
? 返回值: 如果發(fā)送成功,返回 True,如果發(fā)送失敗,返回 False,boolean 型數(shù)據(jù)。
3.3 讀取控制柜 RS-485 通信數(shù)據(jù)
serial_read(len,is_number=True,time_out=0.1,port="/dev/ttymxc0")
? 功能: 該指令用于讀取機器人控制柜 RS-485 通信的數(shù)據(jù)。
? 參數(shù): len:要讀取的字節(jié)數(shù),注意假設要讀取的字節(jié)數(shù)為 5,但實際只接收到 2 字節(jié)數(shù)據(jù),最后讀出的 長度為 2 字節(jié);
is_number:是否按照整數(shù)格式返回字節(jié)數(shù)據(jù)。若不指定,使用默認參數(shù) True,boolean 型數(shù)據(jù) (可選參數(shù));
time_out:超時時間,單位:秒,若小于等于 0,則等待超時時間為無限長,不指定時,使用默 認值 0.1,float 型數(shù)據(jù)(可選參數(shù));
port : 串 口 的 端 口 名 ,目前僅支持 :”/dev/ttymxc0” 。 不 指 定 名 稱 時 ,使用默認名 稱 “/dev/ttymxc0”,string 型數(shù)據(jù)(可選參數(shù))。
? 返回值: bytearray 或 list 型數(shù)據(jù),若 is_number 參數(shù) True,則返回值為整數(shù)類型的 list,若is_number 參數(shù) False,則返回值為 bytes array,若發(fā)生超時,則返回所有已經(jīng)讀取到的數(shù)據(jù)。
如果僅需要與外部設備485通訊用上述3條腳本指令即可收發(fā),如想同時寫入\讀取多個寄存 器查找腳本手冊“寫入\讀取多個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():#復位伺服故障,絕大多數(shù)故障可復位
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觸發(fā),停止上升,升降柱處于伺服使能狀態(tài)
sleep(0.01)
in2 = get_standard_digital_in(2)
if in3 == True:
Servo_control(1)
def Lower_limit_stop():#到達下限位置,DI3觸發(fā),停止下降,升降柱處于伺服使能狀態(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 與通訊助手測試案例

舉例機器人發(fā)送端,發(fā)送整數(shù)123,助手端同樣收到123。
注:1.下圖中紅色方框內的顯示編碼格式需設置為十進制,因為機器人發(fā)送十進制,若不勾選,則會顯示16進制的123,值為7B。

十進制"123"

十六進制“123“

超過255的數(shù)據(jù),顯示選擇Ascll
舉例機器人接收端:

助手發(fā)送需勾選16進制發(fā)送

機器人接收后會轉為10進制
這種方法看起來不夠直觀,因此建議接收時不選用list,選擇bytearray,注意在接收指令的后面加python解碼指令,編譯為utf-8。

不需要勾選16進制

這里選擇解碼編譯utf-8,可直接讀到助手發(fā)送的值