modbus驱动电机.docx
《modbus驱动电机.docx》由会员分享,可在线阅读,更多相关《modbus驱动电机.docx(6页珍藏版)》请在冰豆网上搜索。
modbus驱动电机
使用MODBUS通讯协议连接电机及简单调试
刚好手头有两个电机,其驱动器支持MODBUS协议,用这个来学习一下。
学习目的:
搭建电机硬件环境/使用上位机发送速度指令控制电机转速。
MODBUS的粗浅理解:
1.Modbus是施耐德的
2.速度几十K没问题,跟芯片也有关系
3.可以挂247个节点
4.只有Master主动发数据,slave才能返回数据,slave不能主动说话
5.这里插一句吐槽,外国人取名太直接了,还有接插件公母也是,叫male,female,用的时候插在一起,真是让人浮想联翩
6.传输模式有RTU和ASCII两种可选,RTU传输速率更高所以更常用
7.传输距离比232远多了...
8.代码系统:
起始位,数据位,校验位,停止位.....
9.另外网上有说反应慢延时的,暂时没碰到,几十K一般也够用了。
各种介绍:
http:
//www.modbus.org/
https:
//en.wikipedia.org/wiki/Modbus
硬件环境搭建:
1.硬件:
驱动器/伺服电机两个/串口服务器(宇泰UT-6601H)/PC/网线若干
2.连线:
∙电机接驱动器;
∙驱动器出来DB9的接头,使用485半双工接线:
RS485_A,RS485_B进串口服务器的T/R+,T/R-;
∙串口服务器另一端用网线接PC。
3. 连接设置:
PC需要和串口服务器设置在同一网段,串口服务器需要设置通讯模式MCP,波特率,连接方式RS485_HALF.
4. 设置虚拟串口:
由于用的是网线进的PC,所以需要设置一下虚拟串口,这里用的是NPortWindowsDriverManager。
这时候PC到电机之间的连接就都完成了
上位机发送指令:
1.调试软件调试:
用驱动器自带的软件调试,使能,运转OK
2.使用串口助手发指令:
根据说明书,速度控制寄存器位置是20000,想让电机以500rpm的速度转,发送指令01064E20FE0CDF4D00,电机运转。
其中01表示控制的节点,06是功能指令表示写数据,4E20表示寄存器位置,FE0C是写入的数据,DF4D是CRC校验,00表示停止位,校验位可以用CRC校验工具计算出来。
CRC校验工具:
3. 使用MODBUS调试助手发送指令:
串口助手毕竟还是不太方便,可以用专门的Modbus调试工具,我用的是Modbus调试精灵。
这里有个坑是,写入的寄存器地址必须是8进制数,之前我写20000死活不转,改成47040就好了;数值是16进制的,所以我写500的时候电机飞转起来。
好处是不用自己算CRC校验之类的。
4.使用程序发送指令:
Python确实是高级高级语言,有了它确实丧失了学习其他语言的兴趣...
Modbus的库:
Modbus_tk:
完整modbus协议栈的实现,支持modbustcp/RTU{1.提供slave模拟器,即模拟modbusserver:
502),web-basedhmimaster支持}
Pymodbus:
使用twisted实现的modbus完整协议(支持异步通讯)
MinimalModbus:
只支持modbusrtu
我用的是MinimalModbus的库:
安装:
$pipinstallminimalmodbus
说明书:
https:
//minimalmodbus.readthedocs.io/en/master/readme.html
设置及写入速度:
importminimalmodbus
#setthe1stslaveaxis1=minimalmodbus.Instrument('com1',1)axis1.serial.baudrate=9600axis1.serial.timeout=1
#setthe2ndslaveaxis2=minimalmodbus.Instrument('com1',2)axis2.serial.baudrate=9600axis2.serial.timeout=1
#setaxisspeedaxis1.write_register(20000,0x1F)axis2.write_register(20000,0xDF)
电机运转成功
总结:
没有总结。
凡事浅尝辄止,电机能转就行了,学习到此结束。
(注:
可编辑下载,若有不当之处,请指正,谢谢!
)