欢迎您 登录 |  注册 | 找回密码

产品与技术
产品热点
企业热点
技术热点

行业剖析
政策解读
市场分析
行业应用

总评分:简直是完美

9.9

6人评分    16关注    212823次浏览

我的评分

  

专题名称:纺织印染
热门群组:应用群组
官方网址:进入官方网站

品牌推荐:暂缺
行业精英:暂缺
相关专题:石油化工,造纸印刷

返回本专题首页

纺织印染行业基于USS协议的多电机同步调速系统的设计与实现(下)

作者:精武风云   2006-10-12   来源:中国自动化网   评论:0条    浏览:675

4  系统的软件实现
     系统的软件设计主要包括:变频器功能参数的设定,变频器控制信息的发送和运行状态的动态显示,转速和织物伸长率的设定及处理。
 4.1 交流调速器的功能参数设定
     在工程实际中,利用PMU控制面板对变频器的串口进行配置,6SE70型变频器有SCom1和SCom2两个串口,工程实际中用SCom1。变频器串口的配置如附表。
 [img]200610128205747420.gif[/img]f60ddc1【中国自动化网社区】1329b4【http://sns.ca800.com】0f3

 经过上述设置,变频器应答报文内容如图4所示。报文的总长度是20字节,PZD域5字,PKW域3字。
 [img]200610128211358538.gif[/img]2122【中国自动化网社区】8d3637【http://sns.ca800.com】7cd

 4.2 变频器运行状态的监控和数据处理的软件设计
     本项目中利用贝加莱2005系列PCC来实现变频器的监控和数据处理。贝加莱2005系列PCC除了支持标准的通信协议(如485,CAN等)之外,还向用户提供了用于与第三方产品通信的协议开发工具——帧驱动器,用户只需要了解第三方产品的通信协议细节(包括信息帧格式的组成等),并用帧驱动器写出与第三方产品通信协议一样的通信规则,就可方便地实现PCC与第三方产品之间的通信。帧驱动器存放在应用程序ROM中,它完全控制了通信的硬件部分,而不改变帧的形式。通常数据通信,对数据进行读写操作时,用户必须对端口的细节了解得很清楚,才能通过编程实现对接口各管脚进行的操作。而帧驱动器将这些操作集中起来,用户不必知道接口的细节(只须知道接口地址),就可以通过帧驱动器命令直接传输读写数据。其提供的函数如下:
     FRM_xopen:初始化接口,为帧驱动器分配缓存,安装相关的中断处理程序。
     FRM_read:读数据并将其放在读缓存区。
     FRM_rbuf:释放读缓存区。
     FRM_gbuf:申请写缓存区。
     FRM_writ:将数据写入写缓存区。
     FRM_robot:释放写缓存区。
     FRM_close:接口通信结束。
     FRM_ctrl:接口控制。
     (1)串口初始化
     串口使用前必须初始化,设置串口操作所需要的参数。程序初始化时,需使用FRM_xopen(enable,adr(device),adr(mode),adr(config),status,ident)函数。其中,enable:使能端,为1时,函数才能执行;device:定义接口设备的字符串地址;mode是用来定义接口参数的字符串地址,其字符串格式为:
     “[〈TYPE〉],[〈BAUD〉],[〈PARITY〉],[〈DATA BITS〉],[〈STOP BITS〉],[〈OPTION〉]”,TYPE为通信接口的类型,要与实际硬件相符;BAUD为波特率;PARITY为校验类型;DATA BITS为数据位的个数;STOP BITS为停止位的个数;OPTION为可定义硬件握手。Config为接口配置结构的地址;status为数据传输状态标志,0表示没有错误;ident为帧驱动识别号,供所有其它的函数使用,注意该函数对每个接口只能执行一次,应在任务的初始化中调用。
     串口初始化程序必须放在程序的初始化部分,即仅在首次扫描时运行初始化程序。本次课题串口初始化程序如下:
     strcpy(ADR(string_device),"SL2.SS1.IF2");表示模块地址2号槽的子模块上的第2个接口
     strcpy(ADR(string_mode),"RS485,38400,e,8,1");RS-485接口,波特率为38400b/s,1个偶校验位,8个数据位,1个停止位config_struct.idle=4;最大的空闲时间,单位:一个字符的传送时间
     config_struct.tx_cnt=1;发送缓冲区的数目
     config_struct.rx_cnt=1;接收缓冲区的数目
     config_struct.tx_len=20;发送缓冲区的最大长度
     config_struct.rx_len=20;接收缓冲区的最大长度
     config_struct.argc=0;argc/argv:两个相匹配参数是为定义扩展参数而设置的config_struct.argv=0;初始化接口
     FRM_xopen_01.enable=1
     FRM_xopen_01.device=ADR(string_device)
     FRM_xopen_01.mode=ADR(string_mode)
     FRM_xopen_01.config=ADR(config_struct)
     FRM_xopen_01 FUB FRM_xopen();打开接口
     status_open=FRM_xopen_01.status;获取状态
     frm_ident=FRM_xopen_01.ident;获取帧驱动器识别号
     (2)变频器控制字的发送程序设计
     为PCC编写的控制字发送程序,共有三步,其程序流程图如图5所示。2122【中国自动化网社区】8d3637【http://sns.ca800.com】7cd

 [img]200610128215265368.gif[/img]ee1ec1【中国自动化网社区】8ab38e【http://sns.ca800.com】d68

  第一步,向帧驱动器申请缓冲区,用FRM_gbuf函数;
     第二步,将要发送的数据写入发送缓冲区。只需将数据依次拷贝到第一步所申请的缓冲区中,用系统库中的函数STRCPY()或MEMCPY()函数;
     第三步,命令驱动器传输数据。调用帧驱动器库函数FRM_writ,由帧驱动器(实际上是硬件)完成写操作。如果状态返回值不为零(需判断),则用函数FRM_rbuf释放缓存。
     部分程序如下:
     ......
     FRM_gbuf_01.enable=1
     FRM_gbuf_01.ident=frm_ident
     FRM_gbuf_01 FUB FRM_gbuf();申请写缓存区 
     send_buffer=FRM_gbuf_01.buffer;获取发送缓存区地址
     send_buffer_length=FRM_gbuf_01.buflng;获取发送缓存区长度
     status_gbuf=FRM_gbuf_01.status;获取状态 
     IF(status_gbuf=0)THEN;判断状态
     write_data[0]=2;报文头     
     write_data[1]=18;报文长度
     write_data[2]=3;站地址
     write_data[3]=193;十六进制为C1
     write_data[4]=178;十六进制为B2(C1B2表示改变参数P434的值)
     write_data[5]=0;参数标号为1
     write_data[6]=1;
     write_data[7]=E;参数值来自触摸屏伸长率
     write_data[8]=F;     
     write_data[9]=149;控制字为95FF
     write_data[10]=255;
     write_data[11]=a;给定频率来自触摸屏
     write_data[12]=b
     write_data[13]=c
     write_data[14]=d
     write_data[15]=0
     write_data[16]=0
     write_data[17]=0
     write_data[18]=0
     write_data[19]=write_data[0] XOR write_data[1]XOR write_data[2] XOR write_data[3] XOR write_data[4] XOR write_data[5] XOR write_data[6]XOR write_data[7]XOR write_data[8]XOR write_data[9]XOR write_data[10]XOR write_data[11]XOR write_data[12]XOR write_data[13]XOR write_data[14]XOR write_data[15] XOR write_data[16]XOR write_data[17]XOR write_data[18] 
     memcpy(send_buffer,ADR(write_data), send_buffer_length);将数据拷贝到发送缓存区
     memcpy(send_buffer,ADR(write_data), send_buffer_length) 
 ......
     (3)变频器运行状态的接收程序设计
     由于USS通信协议由一个双向信息表组成,在向变频器写完数据后,须通过帧驱动器的读指令来读取变频器的返回报文。接收数据的过程与发送的过程基本相反,也有如下三步,其程序流程图如图6所示。
 [img]200610128221357622.gif[/img]ee1ec1【中国自动化网社区】8ab38e【http://sns.ca800.com】d68

 图6  变频器运行状态的接收程序ee1ec1【中国自动化网社区】8ab38e【http://sns.ca800.com】d68

     第一步,通过帧驱动器从接口读一帧数据并把它放在一个缓存区中,用FRM_read();
     第二步,将数据从缓存区中拷贝到工作区域,使用系统库中的函数MEMCPY()读出该缓存区中的数据。
     第三步,释放缓存区以便再使用,用FRM_rbuf()函数来释放缓存区。
 部分程序如下:
     ......
     FRM_read_01.enable=1
     FRM_read_01.ident=frm_ident
     FRM_read_01 FUB FRM_read();从接口读取数据
     read_buffer=FRM_read_01.buffer;获取读缓存区地址
     read_buffer_length=FRM_read_01.buflng;获取读缓存区长度
     status_read=FRM_read_01.status;获取状态
     IF (status_read=0) THEN
     memcpy(ADR(read_data),read_buffer, read_buffer_length);3#应答报文放入read_data3[16]
     ......
 4.3 数据处理
     通过串口向变频器设定参数和从变频器读出的实时数据都不是实际值,而是以二进制补码形式表示的,读出的二进制值应先转化为十进制。在西门子变频器参数里,有参考量这个参数,如速度参考量、电流参考量、电压的参考量。使用参考量的目的是为了使设定值和实际值以统一的方式里显示出来。如果参数是双字,如速度参数,那么参考量就相当于40000000h(1073741824),则实际值应该是(读出的二进制值/1073741824)×速度参考量;如果参数是单字,如电流参数,那么参考量就相当于4000h(16384),则实际值应该是(读出的二进制值/16384)×电流参考量。
     以下是接收触摸屏设定速度数据并处理的部分程序:
     ......
     receive=MB4[0]; 触摸屏设定速度值
     g=1500/REAL(receive);将触摸屏设定速度值转换为二进制频率给定值
     e=UDINT((REAL($40000000))/g)
     a=USINT(SHR(e,24))
     b=USINT(SHR(e,16) AND $00FF)
     c=USINT(SHR(e,8) AND $0000FF)
     d=USINT(e AND $000000FF);处理3#实时数据并送至触摸屏
     a2=read_data2[11]; 从变频器读取的频率二进制值
     b2=read_data2[12] 
     c2=read_data2[13]
     d2=read_data2[14]
     e2=((SHL(UDINT(a2),24))) or (SHL(UDINT(b2),16)) or (SHL(UDINT(c2),8)) or (UDINT(d2))
     f2=REAL(e2)/REAL($40000000); 由频率二进制值算出实际频率和转速
     MB4[9]=UINT((f2*1500)); 转速实际值给触摸屏,速度参考量为1500
     MB4[10]=UINT((f2*50)*100); 频率实际值给触摸屏
     g2=read_data2[15]; 从变频器读取的电压二进制值
     h2=read_data2[16]
     i2=((SHL(UINT(g2),8))) or (UINT(h2))
     j2=REAL(i2)/REAL($4000); 由电压二进制值算出实际电压
     MB4[11]=UINT(j2*380); 电压实际值给触摸屏,电压参考量为380
     g22=read_data2[17]; 从变频器读取的电流二进制值
     h22=read_data2[18]
     i22=((SHL(UINT(g22),8))) or (UINT(h22))
     j22=REAL(i22)/REAL($4000); 由电压二进制值算出实际电流
     MB4[12]=UINT(j22*90); 电压实际值给触摸屏,电流参考量为0.9
     ......c307【中国自动化网社区】33e4c8【http://sns.ca800.com】076d

 5  结束语
     采用USS协议进行多电机同步调速,实际运行证明:在不同的负载、不同的伸长率要求及不同的转速设定值下,系统的同步性、实时性、可靠性等相当令人满意。西门子变频器本身均配置有USS协议通过RS-485口进行串行通讯,无须购置额外的附件进行系统组态,成本大幅度下降。因此,直接利用USS协议对其组网监控,无疑是一条获得低成本、高性能的好途径。

评论

内容加载中,请稍候...
内  容:

中国自动化网 版权所有  © 2010 - 2016     经营许可证编号: 粤ICP备09051729