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

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

  附表 sis协议的报文格式

 

  其中报头由8个字节组成,它们的意义如下:
  第一个字节stz:起始位,默认为0x02;
  第二个字节cs:用于校验数据,它的值是除此字节外,所有的数相加后的低8位值异或ff,再加1后的值;
  第三个字节datl:除去报头后所有数据的长度(字节的个数);
  第四个字节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()
  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伺服驱动器的实验中,灵活方便,达到了实时修改驱动器的参数的要求;适当改进即可应用于地铁站台屏蔽门系统和安全门系统以及自动门系统的上位机监控,具有较好的实际价值和可扩展性。
关键字:伺服驱动器  串口通信 引用地址:基于VB的伺服驱动器串口通信的实现

上一篇:利用iCoupler隔离技术提高智能电网整合度
下一篇:浅谈机器视觉技术优化流水线上的产品质量控制

推荐阅读最新更新时间:2024-05-02 23:40

LabVIEW在串口通信中的应用
首先介绍了LabVIEW的环境及VISA串口通信函数的功能;其次引入了本文的采集对象JCZ型智能转矩转速传感器,并对其性能、物理结构及串行通信特点进行了说明,利用LabVIEW的开发平台编写通信源程序,实时采集转矩和转速,并计算功率值,最后把转矩、转速和功率数据以动态曲线的方式在同一张图表中显示出来。经过实验验证,该程序操作方便,采集数据准确,运行安全可靠,动态曲线显示直观,可真正在生产实际中使用。 LabVIEW是当今最流行的图形化编程环境,由于其采用图形化的编程方式,因此也被称作G语言(graphical language)。LabVIEW是目前国际上唯一的基于数据流的编译型开发软件,与基于文本的编程语言不同,LabVIEW的
[测试测量]
LabVIEW在<font color='red'>串口通信</font>中的应用
伺服驱动器技术原理深层次研究分析
目前,主流的伺服驱动器均采用数字信号处理器(DSP)作为控制核心,可以实现比较复杂的控制算法,实现数字化、网络化和智能化。功率器件普遍采用以智能功率模块(IPM)为核心设计的驱动电路,IPM内部集成了驱动电路,同时具有过电压、过电流、过热、欠压等故障检测保护电路,在主回路中还加入软启动电路,以减小启动过程对驱动器的冲击。 功率驱动单元首先通过三相全桥整流电路对输入的三相电或者市电进行整流,得到相应的直流电。经过整流好的三相电或市电,再通过三相正弦PWM电压型逆变器变频来驱动三相永磁式同步交流伺服电机。 功率驱动单元的整个过程可以简单的说就是AC-DC-AC的过程。整流单元(AC-DC)主要的拓扑电路是三相全桥不控整流电路。
[嵌入式]
<font color='red'>伺服驱动器</font>技术原理深层次研究分析
stm32 串口通信数据乱码
最近在写stm32的标准库的串口通讯程序,本来很简单的串口通讯,却硬生生被上位机接收到乱码的问题折磨了好久,反复百度了好几次,始终没搜到正确解决方法,不过最后终于在https://www.eeworld.com.cn/mcu/2018/ic-news081240692.html这篇帖子上找到了答案。虽然最后问题和这位大佬不太一样,但是我也是它列出的几个情况之一——外部时钟问题。正如这位大佬所说,串口通信用的是外部时钟,而在stm32f10x.h/stm32f4xx.h中的HSE的设置值HSE_VALUE默认是25MHz。因为官方的开发板是用的25MHz,但是有些开发板用的是8MHz,所以这个地方没改的话就可能出现乱码。我把这里一改,
[单片机]
stm32 <font color='red'>串口通信</font>数据乱码
【STM32】串口通信---用代码与芯片对话
前言 开发板:stm32f407VET6 开发环境:keil5 MDK 串口通信的相关知识,请参考这篇文章 【STM32】5分钟了解STM32的串口通信 这篇文章讲的都是基础知识,那么串口通信的代码该如何写呢? 一、串口通信基本知识 【STM32】5分钟了解STM32的串口通信 二、编程思路 usart.h // ============================================= # @Time : 2020-09-03 # @Author : AXYZdong # @CSDN : https://blog.csdn.net/qq_43328313 # @FileName: usart.
[单片机]
IGBT7与IGBT4在伺服驱动器中的对比测试
【导读】IGBT7作为英飞凌最新一代IGBT技术平台,它与IGBT4的性能对比一直是工程师关心的问题。本文通过FP35R12W2T4与 FP35R12W2T7在同一平台伺服驱动中的测试,得到了相同工况下IGBT4与IGBT7的结温对比。实验结果表明,在连续大功率负载工况与惯量盘负载工况的对比测试中,IGBT7的结温均低于IGBT4。 伺服驱动系统响应速度快,过载倍数高,小型化和高功率密度的趋势更是对功率器件提出了更苛刻的要求。英飞凌明星产品IGBT7凭借超低导通压降、dv/dt可控、175℃过载结温、完美契合伺服驱动器的所有需求。英飞凌—晶川—迈信联合研发基于IGBT7的伺服驱动完整解决方案,可显著提高功率密度。驱动芯片采用英
[测试测量]
IGBT7与IGBT4在<font color='red'>伺服驱动器</font>中的对比测试
STM32串口通信基本原理
介绍串口通信 按照数据传送方向分类 单工 :数据传输只支持数据在一个方向上传输 半双工 :允许数据在两个方向上传输。但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;它不需要独立的接收端和发送端,两者可以合并一起使用一个端口 全双工 :允许数据同时在两个方向上传输。因此,全双工通信是两个单工通信方式的结合,需要独立的接收端和发送端 分别如下图中的a、b、c所示。 按照通信方式分类 同步通信:带时钟同步信号传输。比如:SPI,IIC通信接口 异步通信:不带时钟同步信号。比如:UART(通用异步收发器),单总线 在同步通讯中,收发设备上方会使用一根信号线传输信号,在时钟信号的驱动下双方进
[单片机]
【ARM】2410裸机系列-uart串口通信
开发环境 (1)硬件平台:FS2410 (2)主机:Ubuntu 12.04 FS2410串口的原理图 串口UART寄存器配置 配置TXD0与RXD0(GPH2、GPH3) 设置波特率(UBRDIVn) 设置传输格式(ULCONn) 选择时钟源与中断方式(UCONn) 设置FIFO(UFCONn) 设置流控(UMCONn) 接收字符和发送字符(UTRSTATn) 源代码 //uart.c #include 2410addr.h void putc(char ch) //发送字符
[单片机]
【ARM】2410裸机系列-uart<font color='red'>串口通信</font>
STM32F1串口通信总结
1、处理器与外部设备通信的两种方式: 1.并行通信-传输原理:数据各个位同时传输。优点:速度快。缺点:占用引脚资源多。 2.串行通信-传输原理:数据按位顺序传输。优点:占用引脚资源少。缺点:速度相对较慢。 2、串行通信按照数据传送方向,分为: 1.单工:数据传输只支持数据在一个方向上传输 。 2.半双工:允许数据在两个方向上传输,但是在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信; 3.全双工:允许数据同时在两个方向上传输,因此全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。 3、串行通信的通信方式 : 1.同步通信:带时钟同步信号传输
[单片机]
STM32F1<font color='red'>串口通信</font>总结
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved