串行通信在永磁同步电机控制系统中的应用
2.2 上位机程序设计
Delphi是一种面向对象的可视化编程工具,拥有功能强大的集成开发环境和速度极快的编译器,兼具Visual C++的强大功能和VB易学易用的特点。通过安装MSComm控件,可在Delphi环境下方便地实现串行通信[2]。MSComm提供了两种处理通信问题的方法:一种是事件驱动法,一种是查询法。本系统选用事件驱动法,该方法程序响应及时,可靠性高。只要了解使用MSComm的属性及事件的用法就可以实现对串口的操作。
其主要属性有 :
(1)eommport属性,用于设置并返回连接的串行端口号;
(2)settings属性,以字符形式设置并返回串口的波特率、奇偶校验、数据位、停止位参数;
(3)po~open属性,用于设置或返回通信连接端口的状态;
(4)input属性,用于从输入缓冲区返回并删除字符;
(5)output属性,用于将要发送的数据输入传输缓冲区;
(6)inputlen属性,用于指定由串行端I:I读入的字符串长度或字节数;
(7)handshaking属性,用于指定通信双方的握手协议;
(8)rthreshold属性,用于设置或返回引发接收事件的字节数;
(9)sthreshold属性,用于设置并返回传输缓冲区中允许的最小字符数;
(10)commevent属性,在通信错误或事件发生时都会产生oncomm事件;
(11)inbufercount属性,用于接收缓冲区中的字符数;
(12)inputmode属性,用于设置或返回input属性取回数据的类型。
程序设计中首先要对MSComm进行初始化,可以双击MSComm控件设置,也可以在程序中修改。
本系统根据需要自行设计了通信协议。
(1)帧分为两类,即控制帧和数据帧。控制帧为上位机发出的控制命令,数据帧为上、下位机的实时数据。
(2)上位机对下位机通信中的控制帧,格式都是一个字节,定义如下:AA为下位机发送数据;AB为下位机接收数据;AC为下位机停止发送
(3)数据帧为两个字节,数据范围是0~65535,满足了数据要求。
例如,把电机磁链设置为200,该通信命令由4个字节组成,数据格式为AB0400C8。其中:AB为控制帧,04代表磁链,00C8为数据帧。每个字节包含1个起始位、1个停止位、8个数据位,这些都是隐藏在底层程序中的,在实际应用中用户只需在通信界面上设置磁链值200,然后单击“n发送”按钮即可实现该命令。图3为PC机发送数据流程图。
2.3 下位机程序设计
TMS320LF2407中包含一个串行通信模块(SCI),SCI的寄存器是8位的。可编程的SC1支持CPU和其他使用标准非归零(NRZ)格式的异步外设之间的串行数字通信,SCI的接收器和发送器是双缓冲的,每个都有它自己的独立使能和中断位。波特率可以通过一个16位的波特率选择寄存器进行编程 。为了保证串行通信的成功,在通信前必须对DSP的SCI模块进行初始化,设置通信的波特率、奇偶校验、停止位及每个字节包含的位数等,这些参数的设置必须与PC机上的设置一致,否则会引起传输错误。在DSP与PC机的通信中,对于DSP来说,通信的主要功能是接收Pc机传来的数据和发送数据给Pc机。可采用查询和中断两种方式接收数据,查询方式需要程序循环检测通信端口,浪费DSP资源,因此本系统接收数据时采用中断方式;但在发送数据时由于要发送的数据比较多,如果也用中断方式就会干扰到电机的控制,电机不能平稳运行,因此采用查询方式。在中断子程序中设置发送标志位,通过在主程序中查询该标志位来决定是否发送数据。在发送数据过程中,下位机需要发送多组数据,每组数据对应不同的电机参数,如何正确区分这些数据是通信能否成功的关键。本系统利用已设定的下位机发送参数的顺序、MSComm控件的inputlen属性及rthreshold属性的配合使用来解决这个问题。另外下位机接收和发送寄存器是8位的,需要设定标志变量来区分、合并高低字节。图4为下位机通信程序框图。
评论