摘要:介绍了用分布式技术设计的发电机励磁监控系统。系统中励磁调节器内的双微机采用松耦合并行通信方式进行数据交换,调节器中的励磁控制微机经由通信控制微机实现与上位PC机的通信。介绍了系统的构成、通信方案、通信协议及软件设计方法
发电机励磁系统是采集发电机电压和电流的变化及其它输入信号,并根据控制准则控制励磁功率单元输出励磁电流(供给发电机转子线圈)的系统。发电机励磁系统对于维持电力系统的电压水平、提高电力系统稳定运行的能力、改善电力系统及发电机的运行条件等起到重要的作用。微机励磁调节器是励磁系统的核心元件,除了完成控制功能外,还要实现人机交互、远方通信等功能。单微机难以实现所有功能,故采用双微机设计励磁调节器,并通过通信网络构建分布式发电机励磁监控系统。
1 硬件结构
系统硬件结构如图1所示,其中,励磁控制微机实现人机交互和励磁电流控制,通信控制微机协调上位监控PC机和励磁控制微机的数据交换。
励磁控制微机采用51单片机的应用模式,由显示、显示召唤、按键、模拟量输入、PID参数设置、看门狗电路、同步信号输入、触发脉冲输出、灭磁接点输入等单元组成。显示单元采用外接6片串入并出移位寄存器芯片 74LS164驱动发光数码管,显示内容由召唤显示拨轮开关进行选择,有巡回和召唤两种显示方式。外扩一片并行接口芯片8155,8155的A口与面板上的拨轮开关相连,用于召唤显示;B口与八位地址开关相连,用于设定PID参数;C口用于输出触发脉冲,脉冲经达林顿管放大、脉冲变压器隔离后接到主回路可控硅的触发极。灭磁接点、按键接到单片机的I/O口线,按键主要有增励、减励、运行方式恒电压/恒电流选择等。同步信号经隔离后接到单片机的INT1管脚。模拟量经ADC0809 A/D转换芯片接到单片机,采集的主要模拟量有发电机机端电压、励磁电流、发电机送出的无功电流、电压给定值、励磁电流给定值等。
通信控制微机由单片机、通信接口、波特率设置、地址编码、RAM等单元组成。波特率设置、地址编码用地址开关来实现。地址编码用于设置本子站的地址码,共有256个编码。波特率有1200bps、2400bps、4800bps、9600bps等可选。外扩一片6264RAM用于存放通信中间数据。通信接口采用MAX1487实现RS485电平的转换。
上位监控PC机可采用IPC或PC机。 *** 作系统为Windows98。PC机外接台湾研华公司的ADAM4520实现RS232/RS485的转换。
2 双微机通信方案的设计
双微机数据交换有松耦合和紧耦合两种方式。松耦合采用数据通信方式进行两机数据交换,紧耦合采用共享数据存储器方式进行两机数据交换。本系统中励磁控制微机与通信控制微机的数据交换方式为松耦合方式,通信协议自定义。在松耦合方式中可用的数据通信方式有串行异步通信、串行外设接口(SPI)、并行数据通信等,如图2所示。
串行数据通信方式为一个字节的8个位(低位在前、高位在后)依次传送,传送速度慢。为了提高数据交换的速度,采用并行数据交换。并行数据交换与串行数据交换的一个区别是通信时双微机要进行握手以保证数据可靠传输。下面以图2(c)中的CPU1向CPU2传送数据为例说明数据传输的过程。P2.0为数据准备好控制线,由CPU1控制;P2.1为数据已接收控制线,由CPU2控制。
CPU1发送数据的过程为:CPU1送数据到数据线前应置P2.0为1,并判断P2.1是否为1,为1则表示CPU2已做好接收数据的准备,CPU1可以送数据到数据线;否则CPU1等待CPU2接收数据。CPU1送数据到数据线后置P2.0为0,这表示CPU1已送数据到数据线。然后判断P2.1是否为0,若为0则表示CPU2已接收到CPU1传送的数据,CPU1可进行下一个数据的传送;否则CPU1等待CPU2接收数据。
CPU2接收数据的过程为:在CPU2接收来自CPU1的数据前置P2.1为1,并判断P2.0是否为0,为0表示CPU1已将数据送到数据线上,CPU2可从数据线上读数;否则CPU2等待CPU1发送数据。CPU2读入数据后置P2.1为0,这表示CPU2已接收到数据。然后判断P2.0是否为1,若为1则CPU2可准备接收下一个数据;否则CPU2等待。程序采用C51语言实现,流程图如图3所示。
3 上位机与下位机之间的通信协议
通信控制微机与上位PC机之间的通信采用Modbus协议。Modbus协议是一种应用于电子控制器上的协议,通过该协议,控制器之间以及控制器经由网络(例如以太网)和其它设备之间可以通信,已成为一种通用的工业标准。Modbus协议有两种传输模式:ASCII模式和RTU模式,本系统中采用RTU模式,使用RS485总线。通信格式为:数据帧共11位,1个起始位,8个数据位,两个停止位,无奇偶校验位;通信功能码为:03H(召测),16H(设置);通信时对数据域进行CRC-16校验,校验只针对数据位,不包括起始位、停止位;校验多项式为G(X)=X16+X12+X5+1;命令行格式为:地址码+功能码+数据域+CRC校验。
上位PC机要监测励磁调节器的信息时发送:地址码+功能码(03H)+起始寄存器地址+寄存器个数+CRC校验码低字节+CRC校验码高字节。正常情况下,励磁调节器回送:地址码+功能码(03H)+数据域字节数+第1个数据+第2个数据+......+第n个数据+CRC校验码低字节+CRC校验码高字节。出错时,励磁调节器回送:地址码+功能码(83H)+错误代码(02H/06H)+CRC校验码低字节+CRC校验码高字节,其中,错误代码“02H”表示“非法数据位置”,“06H”表示“调节器正忙”。可读取的励磁调节器寄存器内容如表1所示。
表1 可读取的寄存器的内容
01H
02H
03H
04H
05H
06H 机端电压(Uc)
变换电阻后的电压(Ut)
励磁电流实际值(ILc)
电压给定值(Ug)
励磁电流给定值(ILg)
可控硅触发角(a)
励磁电流额定值(ILe)
上位PC机要远方控制励磁系统时,需通过设置命令16H来实现,发送:地址码+功能码(16H)+起始寄存器地址+寄存器个数(01H)+数据(1字节)+CRC校验码低字节+CRC校验码高字节,设置时一次只能设置一种参数。正常情况下,励磁调节器回送:地址码+功能码(16H)+起始寄存器地址+寄存器个数(01H)+ CRC校验码低字节+CRC校验码高字节。出错时,励磁调节器回送:地址码+功能码(96H)+错误代码(02H/03H)+CRC校验码低字节+CRC校验码高字节,其中,错误代码“02H”表示“非法数据位置”,“03H”表示“非法数据值”。可设置的励磁调节器寄存器内容如表2所示。
表2 可设置的寄存器的内容
01H
02H
03H
04H 增励
减励
给定电压
给定电流
恒电压/电流控制
若上位PC机发送除03H和16H外的其它命令,励磁调节器则将收到的功能码逻辑或“80H”作为回送帧的功能码,回送内容为:地址码+功能码+错误代码(01H)+CRC校验码低字节+CRC校验码高字节。
4 上位机的软件设计
上位PC机完成人机交互、与励磁调节器内的通信控制微机进行通信等任务。其软件用Delphi6.0设计,其中数据库用Delphi6.0自带的Paradox数据库。人机交互功能主要有:对励磁系统各重要参数(如励磁电流、机端电压、可控硅触发角等)进行实时监测,并可进行图形化显示、报表打印、事件顺序记录、越限报警;向励磁调节器发送增励、减励等各种控制命令; *** 作人员可进行管理等。软件的另一模块为通信程序。利用Delphi设计串口通信程序一般有三种方法:一是利用Windows的通信API函数;二是利用第三方提供的通信用动态链接库;三是采用Microsoft或其它公司的通信OCX控件。本系统采用Microsoft公司的MSComm通信OCX控件来设计通信软件。MSComm是VB中的OCX控件,使用前要将其添加到Delphi中,添加方法如下:选择菜单“Component”下的子菜单“Import ActiveX Control”,在“Import ActiveX”页内选择“Microsoft Comm Control”,点击“Install”安装。编程时应注意其Input和Output属性的数据类型为OleVariant,这与VB和VC不同。
Modbus通信协议的软件设计主要为CRC-16校验码生成的实现方法。CRC-16校验码生成编写程序有两种方法:一种为计算法;另一种为查表法。上位机采用计算法。下面为CRC-16的计算过程:
(1)设置CRC寄存器,并给其赋初值FFFF?HEX?。
(2)将全部数据的第一个8bit数据与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器。
(3)CRC寄存器整体向右移一位,MSB补零,移出并检查LSB。
(4)如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。
(5)重复第(3)与第(4)步?直到8次移位全部完成。此时一个8bit数据处理完毕。
(6)重复第(2)至第(5)步?直到所有数据全部处理完毕。
(7)最终CRC寄存器的内容即为CRC值。
Delphi6.0环境下CRC-16实现的函数如下:
function CRC16?CRC_Data?array of Byte?DATA_Len?integer?? word?
var
CRC16Lo?CRC16Hi?byte? //CRC 寄存器
SaveLo?SaveHi?byte? //CRC 中间寄存器
GLo?GHi?byte? //生成多项式
i?integer? //需校验数据的字节数
Flag?integer? //移位的次数(8次)
begin
CRC16Lo?=byte?$ff??
CRC16Hi?=byte?$ff?? //给CRC寄存器赋初值
$ffff(HEX)
GLo?=byte?$01??
GHi?=byte?$a0?? //多项式码$a001(HEX)
for i?=0 to DATA_Len-1 do //各字节数据
begin
CRC16Lo?=CRC16Lo xor CRC_Data?i?? //各字节数据
与CRC寄存器进行异或
for Flag?=0 to 7 do
begin
SaveLo?=CRC16Lo?
SaveHi?=CRC16Hi?
CRC16Hi?=CRC16Hi shr 1? //高字节右移一位
CRC16Lo?=CRC16Lo shr 1? //低字节右移一位
if ?SaveHi and byte?$01??=byte?$01? then
//若高字节LSB为1,则低字节MSB置1
CRC16Lo?=CRC16Lo or byte?$80??
if ?SaveLo and byte?$01??=byte?$01? then
//若低字节LSB为1,则与多项式码进行异或
begin
CRC16Hi?=CRC16Hi xor GHi?
CRC16Lo?=CRC16Lo xor GLo?
end?
end?
end?
CRC16?=CRC16Lo?256+CRC16Hi? //CRC低字节在
前,高字节在后
end?
用双微机松耦合实现了励磁控制微机与通信控制微机之间的数据交换,并通过通信控制微机完成与上位机之间的通信,将励磁调节器的任务进行分散,增强了装置的功能和可靠性。该系统已在国内多个中、小型水电站投入运行,运行稳定,得到用户的好评。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)