励磁软件编程培训讲义精品课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

错误分析
分析 dRef·Ki 、dAlpha·Ki小于212时,Vav和 Alphaav不再变化。积分常数Ki小于212 ,导 致稳态时Vav≠V,此时虽然dAlpha ≠ 0,但 Alphaav不再变化。
改进措施
增大Kv或Ki以降低V与Ref的偏差,但对系 统控制性能产生不利影响。
实际采用的措施 当dRef小于5%时,直接按dRef增加Alphaav Alphaav=Alphaav+(Kref·dRef)>>16
*****************************************************
* 3阶矩阵乘法Result=A*B
*
*输入:浮点矩阵A->ar0,B->ar1, Result->ar2 *

*输出:无
*
**************************************************** MatrixMpy
编译成汇编语言
cmp ax, 0
jnz loop
mov ax, y
inc ax
mov y, ax
jz
loop
……
loop:
……
实例:3阶矩阵乘法(C语言版)
/****************************************************
* 3阶矩阵乘法Result=A*B
*
*输入:浮点矩阵*A,*B,*Result
*
*输出:无
*
***************************************************/
Void MatrixMpy(float *A, float *B, float Result)
{
函数体 }
3阶矩阵乘法(DSPC32汇编版)
便于后期维护、原理分析以及合作开发 自用到模块级 新人接手则必须到具体的函数实现
细节
RS232编程(16C550) 问题:芯片说明书指出16C550可以使用 FIFO接收指定长度数据。实际测试时DSP 连续读出的都是第一个字符。后来没有使 用FIFO中断,每次只读一个字节。
原因:16C550使用FIFO接收时读取间隔 不小于4ms。而DSP主频30MHz,连续读 取时间隔仅33ns。
还是RS232编程
循环读写串口, 只能实现单工 通信。
错误原因:连 续读取导致芯 片无法正常响 应。
开始 读串口 写串口 延时等待
模块化编程
C语言:字符缩进,先输入{、},再输入模 块内容。
VB:打开文件open语句后接着输入Close 语句关闭文件,最后输入中间的处理部分。
汇编:象C语言一样对寄存器进行压栈保护, 使各个函数模块化,调用时不必考虑保护 寄存器内容。
内容
规划 逻辑 风格 高级语言与低级语言 细节 资源 错误
规划
任何大型软件都是由模块构成的。 由主干到分支,由整体到细节,逐步细化。
好处:明确软件如何实现,便于分工、实 现以及后期维护。
励磁控制
初始化
主循环
中断服务程序
主循环
与本地监控通信 与集控室通信 与另一通道通信
限制、保护 通信 录波 控制
汇编语言的模块化编程
小的程序不需要 函数需要在入口对需要使用的寄存器进行
压栈操作,在出口弹出。保证函数的调用 不会影响寄存器的内容(保存参数的寄存 器可以例外)。 没有模块化编程的程序,改动一处程序, 可能引起其他部分的异常。
高级语言和低级语言
高级语言 编程效率高、可读性好、移植性好
低级语言 直接处理硬件资源,执行效率高
push r0
pushf r0
……
函数体 …… popf r0 pop r0 rets
资源
技术支持
网上资源
技术支持
面对新的硬件很难迅速提出可行的方案,甚至连 硬件体系是否满足要求都不知道。
硬件供货商的技术支持人员对硬件的了解程度远 胜于己,可以提供相关解决方案甚至是核心代码。 对于一些具体功能的实现也可以提供建设性意见。
编程风格
变量命名 函数命名 流程图 注释 模块化编程
命名、注释
建议使用有意义的英语单词,如
Cal_Alpha( )
//控制角计算函数
Auto_Ex_Fail_Flag //起励失败标志
每一个变量、函数声明时都需要对其功能、 应用范围进行注释。
匈牙利命名法
nOverExCount
流程图
谢谢!
在X86CPU上运行的几种语言
ASM 速度第一,可读性差,调试麻烦。
PL/M 不支持浮点,速度略高于C。可读性好。
C 运行速度逊于汇编,可读性好,编程效率高,模块化编程。 Basic
不能生成可执行文件,编译器边解释边执行,速度最慢。 可读性好,
了解低级语言有利于理解高级语言
C++示例 a=1; y=0; if (a || y++) { ……//与y无关的代码 } //此时y=0
硬件相关的开发环境通常带有丰富的库函数,没 有可能也没有必要去全部了解。对于实现某种功 能,还是咨询技术支持需要调用哪些函数为好。
硬件供货商可以修改部分函数源代码以满足客户 要求。
PCC励磁实现方案
关键:输出控制脉冲、交流采样 能达公司准备了两个CPU模块,一个专门用于实 现交流采样。
贝加莱公司的支持: 控制脉冲输出部分的原理和代码 交流采样的实现原理
3 / 2 0.8660254
相对误差:0.0214%
排查错误
利用成熟的程序检验新的算法程序 错误定位
断点 跳过部分函数
功能缺陷:达不到的给定值
P.U. 1.0
--Vt ——Ref
t
错误原因
浮点计算定点化 dRef=V-Ref dAlpha=(Kv·dRef)>>12 Vav=Vav+(dRef·Ki)>>12 Alphaav=Alphaav+(dAlpha·Ki)>>12 Alpha=Alphaav+dAlpha
原来的算法
If
If2 Ifx If1 If0
H1
Hx
H2
H
步长取法:求出限制曲线各个节点对应的步长,然后根据
If大小插值取得新步长。
错误分析
H1×T1=H2×T2=Hmax
步长:Hx=H1+(H2-H1)/(If2-If1)×(Ifx-If1)
限制时间:Tx=T1+(T2-T1)/(If2-If1)×(Ifx-If1)
If2 Ifx
与其相联系统发生短
路故障,励磁系统为 If1
保证电力系统稳定和 If0
继电保护可靠动作自
动强行励磁所致。设
置这一限制的目的是
防止励磁绕组较长时 间过电流而过热。
T2
Tx
T1
T0 t(s)
实现原理
设置热量积分Hsum。If>If0时,根据If大小计 算热量积分步长,对Hsum进行累加。If<If0 时递减。如果Hsum>Hmax则触发限制。
其他硬件相关功能: 参数固化 CAN通信(PCC模块不支持1M波特率,CAN读 写函数中的id属性含义不同)
网上资源
硬件供货商通常在自己的主页提供了大量 示范程序、相关软件升级包。
对于某些常用功能网上通常也有相关代码 和说明。 CAN通信(Sja1000) 定点开方
浮点与定点
IP161定点CPU中定点乘除仅几个指令周期, 而浮点乘除约几十个周期,浮点开方接近 ms级。
RS232通信:PC←→V40
定时下发命令
开始 下发命令
返回
V40上传数据 触发事件
开始
设置数据处理标志 数据处理
返回
延时0.6秒清 除接收缓冲
开始
是 有数据处理标志
否 清除接收缓冲
返回
改进后
定时下发命令
开始 清除接收缓冲
下发命令
返回
V40上传数据 触发事件
开始
数据处理
返回
过励限制
If
励磁系统强励的原因 大部分是由发电机或
浮点DSP可以直接使用浮点操作数。
错误
所有软件都存在错误! 错误可分成两种:
影响正常执行功能的错误; 不影响功能,只对性能有一些影响。
定点CPU中的浮点算法
a=a*0.866 a=(a>>1)+(a>>2)+(a>>3)-(a>>7)-(a>>10)
即 0.5+0.25+0.125-0.0078125-0.0009765625 =0.8662109375
振荡 功率柜退出 空载过压
V/F限制 PT断线 断路器 过无功限制 欠励限制 强励限制
短路
中断服务程序
付氏采样 输出控制脉冲
外部信号输入 同步中断
内部设置中断 定时器中断
测频 原方同步断线检测 副方同步断线检测
启动控制脉冲
逻辑
软件能否正常实现其功能的基础 几个失败的例子
RS232通信:PC←→V40 无功过载限制
Hx×Tx=H1×T1+……=Hmax+……>Hmax 如果按照原来的算法,限制曲线仅在节点 处准确,其余区域限制时间略小于限制要 求。
过励限制
If 2.5
2.0
1.5
1.0
0.5
0
t
0
20
40
60
修改后
正确取法:根据If插值求取对应的限制时间, 然后根据时间取步长。
步长与时间的关系:Step=Hmax/t
相关文档
最新文档