基于VB的伺服驱动器串口通信的实现

时间:2015-06-02来源:网络

  dim input_buffer as variant dim upper_limit as integer dim input_to_hex as string dim i as integer input_buffer = mscomm_com1.input‘从接收缓冲区copy字符upper_limit = ubound(input_buffer)

  ‘收到数据的个数for i = 0 to upper_limit input_to_hex = hex(input_buffer(i))

  ‘将接收到的数据转化为十六进制if len(input_to_hex)《2 then’将不满两位的十六进制值前补0 input_to_hex =“0”input_to_hex end if if i = 0 then‘每开始新的一次接收,清空显示文本框txtreceivedata.text =“”

  end if txtreceivedata.text = txtreceivedata.text input_to_hex“”

  ‘显示接收的内容next end sub读写命令实例及注意事项有了上面的基础,就可以根据sis协议的数据格式来实时读写indradrive的内部参数,如读取位置反馈值参数s-0-0051的值,首先将参数号51转化为十六进制数33,即在用户数据头的第四、五两个字节分别写入3300(注意:高字节在后,低字节在前);其它字节可以相继得出,因是读参数值,所以不需写用户数据;从而发送内容应为:02 02 05 05 00 80 01 01 3c 01 00 33 00.如果通信正常,则会接收到类似的字节内容:02 20 07 07 10 80 01 01 00 3c 01 4e ac 07 00,其中后4个字节即为位置反馈值(注意:高字节在后,低字节在前),十六进制表示应为7ac4e,将其转化为十进制为502862,实际的位置值应为50.2862(位置值的分辨率为0.0001)。在写参数时,和读参数的不同的地方就是用到用户数据,也就是将欲写入的值写到用户数据的位置。如将100.0000写入最大行程值参数s-0-0278,首先将参数号278转化为十六进制数116,即在用户数据头的第四、五两个字节分别写入16 11;再将1000000(注意不是100.0000)转化为十六进制为f4240,即在用户数据的四个字节依次写入40 42 0f 00;其它字节可以相继得出;发送内容应为:02 76 09 09 00 8f 01 01 3c 01 00 16 01 40 42 0f 00.如通信正常,则会接收到:02 1a 03 03 10 8f 01 01 00 3c 01,表示改写参数成功。

  值得注意的是,除了在数据格式上遵从sis协议之外,操作过程中还应注意以下几点:通信波特率应为115200 bps.写参数时,应先使indradrive处于pm(参数模式)。通过置位参数s-0-0420(激活参数模式)的bit1、bit0,就可以将indradrive切换到pm;而在改写参数s-0-0420时,不需在pm;在将s-0-0420的bit1和bit0置位后,不要忘了再将其复位,这样便进入pm,便可以随意改写参数了。在配置完参数后,应该跳出pm,进入om(操作模式),通过参数s-0-0422(跳出参数模式)来完成,配置过程与s-0-0420类似。

  (3)读参数时无论indradrive处于pm和om均可读取,没有限制。

  (4)读参数时,接收到内容的第11个字节以后的内容为用户数据;而写参数时,接收到的内容中没有用户数据部分,只要通信正常,均会收到相同内容02 1a 03 03 10 8f 01 01 00 3c 01.(5)如果正在上位机用indraworks调试indradrive,则读写参数时,应使indraworks离线,否则会提示串口被占用。

  结语

  本文所阐述的串口通信方法已成功应用于调试博世力士乐indradrive伺服驱动器的实验中,灵活方便,达到了实时修改驱动器的参数的要求;适当改进即可应用于地铁站台屏蔽门系统和安全门系统以及自动门系统的上位机监控,具有较好的实际价值和可扩展性。

1 2

关键词: 伺服驱动器 indradrive

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版