分布式发电机励磁监控系统的设计
6H”表示“调节器正忙”。可读取的励磁调节器寄存器内容如表1所示。
表1可读取的寄存器的内容
数据地址内容00H
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可设置的寄存器的内容
数据地址内容00H
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”下的子菜单“ImportActiveXControl”,在“ImportActiveX”页内选择“MicrosoftCommControl”,点击“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实现的函数如下:
functionCRC16?CRC_Data?arrayofByte?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)
fori?=0toDATA_Len-1do//各字节数据
begin
CRC16Lo?=CRC16LoxorCRC_Data?i??//各字节数据
与CRC寄存器进行异或
forFlag?=0to7do
begin
SaveLo?=CRC16Lo?
SaveHi?=CRC16Hi?
CRC16Hi?=CRC16Hishr1?/ 《分布式发电机励磁监控系统的设计(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/168928.html
表1可读取的寄存器的内容
数据地址内容00H
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可设置的寄存器的内容
数据地址内容00H
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”下的子菜单“ImportActiveXControl”,在“ImportActiveX”页内选择“MicrosoftCommControl”,点击“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实现的函数如下:
functionCRC16?CRC_Data?arrayofByte?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)
fori?=0toDATA_Len-1do//各字节数据
begin
CRC16Lo?=CRC16LoxorCRC_Data?i??//各字节数据
与CRC寄存器进行异或
forFlag?=0to7do
begin
SaveLo?=CRC16Lo?
SaveHi?=CRC16Hi?
CRC16Hi?=CRC16Hishr1?/ 《分布式发电机励磁监控系统的设计(第2页)》