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

基于 VB 的伺服驱动器串口通信的实现
【摘要】:本文介绍了博世力士乐的伺服驱动器 IndraDrive 的 SIS 协议。在分析其通信原理的基础上.利用 面向对象的编程语言 VB 6.0 的 HSComm 通信控件,实现了实时配置驱动器参数的目的.并给出了具体配置参 数实例及注意事项。可应用于地铁站台屏蔽门系统和安全门系统以及自动门的驱动控制。 【作者单位】: 【关键词】: 伺服驱动器 SIS 协议 MSComm 控件 站台屏蔽门系统 控制参数 用户数据 通信协议 串行 通信 注意事项 字节 【正文】

伺服驱动器是构成伺服系统的基本部件, 广泛应用于各种电力传动自动控制 系统中,如:数控机床、柔性制造系统、机器人驱动、火炮随动系统、雷达控制、 舰船推进、车辆驱动、印刷设备、纺织设备、缝纫设备等。在应用伺服驱动器的 过程中,实时读取和修改各个控制参数来达到实时控制,是对伺服系统的基本要 求。 本文即针对德国博世力士乐的伺服驱动器 indradrive,采用灵活易用的 vb 6.0 编程语言,通过 indradrive 本身所带的 rs232 串行通信接口,实现了上位 pc 机与伺服驱动器的串行通信,完成了对伺服驱动器内部各控制参数的实时控 制。 indradrive 的通信协议 indradrive 采用 sis 通信协议,它是一种二进制通信协议,含有完整的报 文格式和返回校验格式。针对博世力士乐的各种产品(plc、伺服驱动器等),sis 协议的通信格式是统一的。 sis 协议采用的数据格式为:1 位起始位,8 位数据,1 位或 2 位停止位,无 校验位;通信传输数据的波特率为 115200 bps。sis 协议采用十六进制数据格式 来表示各种指令代码及数据,其软件通信指令经过优化设计后,只有两条,一条 为读指令,一条为写指令,两条指令使得上位机软件编写非常方便。 sis 协议的报文格式如附表所示。 附表 sis 协议的报文格式

其中报头由 8 个字节组成,它们的意义如下: 第一个字节 stz:起始位,默认为 0x02; 第二个字节 cs:用于校验数据,它的值是除此字节外,所有的数相加后的低 8 位值异或 ff,再加 1 后的值; 第三个字节 datl:除去报头后所有数据的长度(字节的个数);
1

第四个字节 datlw:重复第三个字节的内容; 第五个字节 cntrl:决定错误返回类型,默认为 0x00; 第六个字节 service:服务类型(读参数写 0x80,写参数写 0x8f); 第七个字节 adrs:驱动器地址; 第八个字节 adre:驱动器地址。 用户数据头包含 5 个字节,意义如下: 第一个字节 control byte:操作参数值,默认为 0x3c; 第二个字节 device address(unit address):驱动器地址; 第三个字节 parameter type:参数类型,对于驱动器其值为 0x00; 第四、五字节 parameter number:参数号,对于驱动器的 s 参数,直接写参 数号的十六进制值;对于 p 参数,写“215+参数号”的十六进制值。 用户数据的数据长度取决于操作参数的数据类型,如操作参数为 int 型,写 2 个字节;为 dword 型,写 4 个字节。写的时候注意低位字节在前,高位字节在 后。 vb 实现 pc 机与 indradrive 的串行通信 pc 机与 indradrive 的通信常采用主从问答方式, 机始终具有初始传送优 pc 先权, 所有的通信均由 pc 机来启动。 每次通信都是由 pc 机通过发送(读/写参数) 命令启动通信,indradrive 在接到 pc 机发送的命令后,首先检查命令中的起始 标志, 然后检查命令中的驱动器地址是否与自己的驱动器地址相符, 如果不一致, 说明计算机是与其它的驱动器进行通信,从而忽略该命令;如果一致,就响应该 命令,并将执行结果回送到 pc 机,一次通信过程结束。 在 vb 的控件工具箱中提供了一个使用非常方便的串行通信控件 mscomm,它 全面地提供了使用串行通信上层开发的所有细则, 串行通信的实现既可以采用中 断方式,又可以采用查询方式。mscomm 控件提供了实现串行端口中断功能的 oncomm 事件,该事件是唯一的,可以截取串口的任何消息,当有串口事件或错 误发生时,vb 程序就会自动转入 oncomm 事件处理程序中。commevent 属性存有 串口最近的事件或错误的数值代码, 可以在程序中随时读取 commevent 属性值来 了解通信情况,oncomm 事件是和 commevent 属性密切相关、一起使用,当任何 一个 oncomm 事件或错误发生时,都会使得 commevent 属性值改变。在 oncomm 事件处理过程中,可以通过判断 commevent 属性值,对于不同的属性值转入不同 的事件处理过程。 根据 sis 通信协议的规定,vb 程序中主要是针对 mscomm 控件的操作,主要 有 mscomm 控件的初始化和 oncomm 事件的处理。 mscomm 控件的主要初始化代码如下: mscomm_com1.commport = 1 ‘设定需要使用的串口 mscomm_com1.settings = “115200,n,8,1” ‘设定传输的波特率和校验方式 mscomm_com1.portopen = true ‘打开通信串口 mscomm_com1.rthreshold = 1 ‘设置输入缓冲区字符输入门限 oncomm 事件的处理程序主要代码如下: private sub mscomm_com1_oncomm()
2

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,即在用户数据头的第四、五两个字节分别写入 33 00(注意:高字节 在后,低字节在前);其它字节可以相继得出,因是读参数值,所以不需写用户数 据;从而发送内容应为: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(参数模式)。通过置位参数
3

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 伺服 驱动器的实验中,灵活方便,达到了实时修改驱动器的参数的要求;适当改进即 可应用于地铁站台屏蔽门系统和安全门系统以及自动门系统的上位机监控, 具有 较好的实际价值和可扩展性。

4


相关文档

基于VB60的串口通信实现
基于VB的串口通讯及其软件实现
基于VB串口通信的跟踪导航仿真
基于VB的串口通讯及其软件实现 报告书
基于 VB 实现 PLC 与PC 机的多状态串口通信
用VB实现基于USB的虚拟串口通讯
基于VB实现PC机与单片机的串行通讯
浅谈基于MSComm控件实现VB串口通信
基于VB的PLC与PC机串行通信的实现
王松基于VB的串口通讯及其软件实现
电脑版