1.开口三角形是指中性点不接地系统中电压互感器三相的三个二次绕组的接法,三相二次绕组按三角形接线连接,但最后有一点不连上,即构成开口三角。
简单说明下:就是对电压互感器三相的三个二次绕组“da-dn”、“db-dn”、“dc-dn”,开口三角就是“da-dn”的dn与“db-dn”的db相连,“db-dn”中的dn与“dc-dn”的dc相连,从“da-dn”的
da与“dc-dn”dn引出电压;这个没有完全闭合的三角形就是开口三角形,从这开口三角形引出的电压U△,就是开口三角电压。正常情况下,开口三角上没有电压,当发生系统单相接地时,电压互感器一次绕组就会有一相上无电压,造成对应的二次绕组上也无电压,则开口三角上就会出现电压。通过检测开口三角上的电压,就可以知道高压系统是否有接地现象,这在系统上被称为“接地监察”
开口三角接线的检查
(1)不能以检查3U。回路是否有不平衡电压的方法来确认3U。回路良好。indexof空格算不算
(2)不能单独依靠“六角图”测试方法确证3U。构成的方向保护的极性关系正确。
(3)可以包括电流及电压互感器及其二次回路联接与方向元件等综合组成的整体进行试验,以确证整组方向保护的极性正确。
(4)对于正常时采用自产3U。,而PT断线时采用外接3U。的保护装置一定要验证整组方向保护的极性正确。
(5)最根本的办法,是查清电压及电流互感器极性,所有由互感器端子到继电保护盘的联线和盘上零序方向继电器的极性,作出综合的正确判断。
2.开口三角电压的作用
在三相PT的二次侧接成开口三角形,用以发生接地故障时做继电保护所用。
当系统发生单相接地故障时,电压互感器一次绕组相电压一相为零,另两相升高√3倍,相应的二次绕组、剩余电压绕组的相电压也升高√3倍。剩余电压绕组的三相绕组中,一相电压为零,另两相电压为
√3×100/3伏,且两相电压夹角为60度,所以PT二次侧输出为幅值2√3×U相的两相矢量和,所以开口三角的输出为100伏。
工程竣工交接试验的试验方法是:把二次绕组的三相引出端a、b、c短接,与其中性点端子0之间加上50HZ、100/√3V的单相电压,在开口三角处测得的电压应为100V。
做为绝缘监察用的电压继电器整定值为15—20伏。
3.二次规程7.
4.10第3要求"对中性点非直接接地系统,需要检查和监视一次回路单相接地时,应选用三相五柱或三相单相式电压互感器,其剩余绕组额定电压应为100/3V.中性点直接接地系统,电压互感器剩余绕组
额定电压应为100V."对上述论述该怎样理解?
1)一般二次仪表的正常运行电压最高是100V,为了达到这个目标,就将PT变比故意作成某种形式。对于中性点绝缘的系统:发生单相接地时,非故障相对地电压升高到√3倍,且他们之间的夹角为60度,所以叠加出开口三角输出电压要变为原来的3倍。为此,开口三角变比就是100/3了。对于中性点直接接地系统,则当单相接地时由于一次电压被强制为0,所以二次侧开口绕着刚好有一相为0,所以三相和刚好缺了100,当然指的是向量和,而非简单加减。
2)电网正常运行时,三相电压对称,开口三角绕组引出端子上的电压Ua1,x1为三相二次电压之相量和,其值为零,但实际上因漏磁等因素的影响,Ua1,x1一般不为零,而有几伏的不平衡电压。当电网发生单相接地故障时,电压互感器一次侧的零序电压也感应到二次侧,因三相零序电压大小相等、相位相同,故开口三角绕组输出的电压Ua1,x1=3U0/Kμ(Kμ为电压互感器变比)。
a)把这种接线用于中性点非直接接地电网中,在电网发生单相(如A相)接地故障时,开口三角绕组两
端的3倍零序电压Ua1,x1为3倍相电压。为使此时的Ua1,x1=100V,开口三角绕组每相的电压为100/3V。因此,电压互感器的变比为(UN/√3)/(100/√3)/(100/3)V(UN为一次系统的额定电压)。
b)把这种接线用于中性点直接接地电网中,在电网发生单相(如A相)接地故障时,故障相A相的电压为零,非故障相B、C相的电压大小和相位均与故障前的相同,开口三角绕组两端的3倍零序电压Ua1,x1为
相电压。为使此时的Ua1,x1=100V,故电压互感器的变比为(UN/√3)/(100/√3)/(100)V。
第5章字符串
我们一直在使用字符串,C#中string关键字的映射实际上指向.NET 基类System.String。System.String 是一个功能非常强大且用途非常广泛的基类,但它不是.NET中唯一与字符串相关的类。其他的用来处理字符串的.NET类还有很多,如System.Text 和System.Text.Regular Expressions命名空间中的类等等。
一、System.String类
System.String是一个类,专门用于存储字符串,允许对字符串进行许多操作。由于这种数据类型非常重要,C#提供了它自己的关键字和相关的语法,以便于使用这个类来处理字符串。
使用运算符重载可以连接字符串:
string message1 = "Hello"; //return "Hello"
message1 += ", There"; // return "Hello, There "
string message2 = message1 + "!"; // return "Hello, There!"
C#还允许使用类似于索引器的语法来提取指定的字符:
char char4 = message[4]; // returns 'a'. Note the char is zero-indexed
这个类可以完成许多常见的任务,例如替换字符、删除空白和把字母变成大写形式等。可用的方法如表所示。
方法作用
Compare 比较字符串的内容,考虑文化背景(区域),确定某些字符是否相等CompareOrdinal 与Compare一样,但不考虑文化背景
Concat 把多个字符串实例合并为一个实例
CopyTo 把特定数量的字符从选定的下标复制到数组的一个全新实例中
Format 格式化包含各种值的字符串和如何格式化每个值的说明符
IndexOf 定位字符串中第一次出现某个给定子字符串或字符的位置
IndexOfAny 定位字符串中第一次出现某个字符或一组字符的位置
Insert 把一个字符串实例插入到另一个字符串实例的指定索引处
Join 合并字符串数组,建立一个新字符串
LastIndexOf 与IndexOf一样,但定位最后一次出现的位置
LastIndexOfAny 与IndexOfAny,但定位最后一次出现的位置
PadLeft 在字符串的开头,通过添加指定的重复字符填充字符串
PadRight在字符串的结尾,通过添加指定的重复字符填充字符串
Replace 用另一个字符或子字符串替换字符串中给定的字符或子字符串
Split 在出现给定字符的地方,把字符串拆分为一个子字符串数组
Substring 在字符串中获取给定位置的子字符串
ToLower 把字符串转换为小写形式
ToUpper 把字符串转换为大写形式
Trim 删除首尾的空白
注意:这个表并不完整,但可以让您明白字符串所提供的功能。
1、创建字符串
如上所述,string类是一个功能非常强大的类,它执行许多很有用的方法。但是,string类存在一个问题:重复修改给定的字符串,效率会很低,它实际上是一个不可变的数据类型,一旦对字符串对象进行了初始化,该字符串对象就不能改变了。表面上修改字符串内容的方法和运算符实际上是创建一个新的字符串,如果必要,可以把旧字符串的内容复制到新字符串中。例如,下面的代码:
string greetingText = "Hello from all the guys at Wrox Press. ";
greetingText += "We do hope you enjoy this book as much as we enjoyed writing it.";
在执行这段代码时,首先,创建一个System.String类型的对象,并初始化为文本“Hello from all the guys at Wrox Press. ”。注意句号后面有一个空格。此时.NET 运行库会为该字符串分配足够的内存来保存这个文本(39个字符),再设置变量greetingText,表示这个字符串实例。
从语法上看,下一行代码是把更多的文本添加到字符串中。实际上并非如此,而是创建一个新字符串实例,给它分配足够的内存,以保存合并起来的文本(共103个字符)。最初的文本“Hello from all the people at Wrox Press.”复制到这个新字符串中,再加上额外的文本“We do hope you enjoy this book as much as we enjoyed writing it.”。然后更新存储在变量greetingText中的地址,使变量正确地指向新的字符串对象。旧的字符串对象被撤销了引用——不再有变量引用它,下一次垃圾收集器清理应用程序中所有未使用的对象时,就会删除它。
这本身还不坏,但假定要对这个字符串加密,在字母表中,用ASCII码中的字符替代其中的每个字母(标点符号除外),作为非常简单的加密模式的一部分,就会把该字符串变成“Ifmmp gspn bmm uif hvst bu Xspy Qsftt. Xf ep ipqf zpv fokpz uijt cppl bt nvdi bt xf fokpzfe xsjujoh ju.”。完成这个任务有好几种方式,但最简单、最高效的一种(假定只使用String类)是使用String. Replace()方法,把字符串中指定的子字符串用另一个子字符串代替。使用Replace(),加密文本的代码如下所示:
string greetingText = "Hello from all the guys at Wrox Press. ";
greetingText += "We do hope you enjoy this book as much as we enjoyed writing it.";
for(int i = 'z'; i>='a' ; i--)
{
char old1 = (char)i;
char new1 = (char)(i+1);
greetingText = greetingText.Replace(old1, new1);
}
for(int i = 'Z'; i>='A' ; i--)
{
char old1 = (char)i;
char new1 = (char)(i+1);
greetingText = greetingText.Replace(old1, new1);
}
Console.WriteLine("Encoded:\n" + greetingText);
注意:
Replace()以一种智能化的方式工作,在某种程度上,它并没有创建一个新字符串,除非要对旧字符串进行某些改变。原来的字符串包含23个不同的小写字母,和3个不同的大写字母。所以Replace()就分配一个新字符串,共26次,每个新字符串都包含103个字符。因此加密过程需要在堆上有一个能存储总共2678个字符的字符串对象,最终将等待被垃圾收集!显然,如果使用字符串进行文字处理,应用程序就会有严重的性能问题。
为了解决这个问题,Microsoft提供了System.Text.StringBuilder类。StringBuilder不像String那样支持非常多的方法。在StringBuilder上可以进行的处理仅限于替换和添加或删除字符串中的文本。但是,它的工作方式非常高效。
在使用String类构造一个字符串时,要给它分配足够的内存来保存字符串,但StringBuilder通常分配的内存会比需要的更多。开发人员可以选择显式指定StringBuilder要分配多少内存,但如果没有显式指定,存储单元量在默认情况下就根据StringBuilder初始化时的字符串长度来确定。它有两个主要的属性:
●Length指定字符串的实际长度;
●Capacity是字符串占据存储单元的最大长度。
对字符串的修改就在赋予StringBuilder实例的存储单元中进行,这就大大提高了添加子字符串和替换单个字符的效率。删除或插入子字符串仍然效率低下,因为这需要移动随后的字符串。只有执行扩展字符串容量的操作,才需要给字符串分配新内存,才可能移动包含的整个字符串。在添加额外的容量时,从经验来看,StringBuilder如果检测到容量超出,且容量没有设置新值,就会使自己的容量翻倍。
例如,如果使用StringBuilder对象构造最初的欢迎字符串,可以编写下面的代码:
StringBuilder greetingBuilder =
new StringBuilder("Hello from all the guys at Wrox Press. ", 150);
greetingBuilder.AppendFormat("We do hope you enjoy this book as much as we enjoyed
writing it");
注意:
为了使用StringBuilder类,需要在代码中引用System.Text。
在这段代码中,为StringBuilder设置的初始容量是150。最好把容量设置为字符串可能的最大长度,确保StringBuilder不需要重新分配内存,因为其容量足够用了。理论上,可以设置尽可能大的数字,足够给该容量传送一个int,但如果实际上给字符串分配20亿个字符的空间(这是StringBuilder实例允许拥有的最大理论空间),系统就可能会没有足够的内存。
在调用Append()方法时,其他文本就放在空的空间中,不需要分配更多的内存。但是,多次替换文本才能获得使用StringBuilder所带来的性能提高。例如,如果要以前面的方式加密文本,就可以执行整个加密过程,无须分配更多的内存:
StringBuilder greetingBuilder =
new StringBuilder("Hello from all the guys at Wrox Press. ", 150);
greetingBuilder.Append("We do hope you enjoy this book as much as we " + "enjoyed writing it");
Console.WriteLine("Not Encoded:\n" + greetingBuilder);
for(int i = 'z'; i>='a' ; i--)
{
char old1 = (char)i;
char new1 = (char)(i+1);
greetingBuilder = greetingBuilder.Replace(old1, new1);
}
for(int i = 'Z'; i>='A' ; i––)
{
char old1 = (char)i;
char new1 = (char)(i+1);
greetingBuilder = greetingBuilder.Replace(old1, new1);
}
Console.WriteLine("Encoded:\n" + greetingBuilder);
这段代码使用了StringBuilder.Replace()方法,它的功能与String.Replace()一样,但不需要在过程中复制字符串。在上述代码中,为存储字符串而分配的总存储单元是150个字符,用于StringBuilder实例以及在最后一个Console.WriteLine()语句中执行字符串操作期间分配的内存。
一般,使用StringBuilder可以执行字符串的操作,String可以存储字符串或显示最终结果。
2 StringBuilder成员
前面介绍了StringBuilder的一个构造函数,它的参数是一个初始字符串及该字符串的容量。还有几个其他的StringBuilder构造函数,例如,可以只提供一个字符串:
StringBuilder sb = new StringBuilder("Hello");
或者用给定的容量创建一个空的StringBuilder:
StringBuilder sb = new StringBuilder(20);
除了前面介绍的Length 和Capacity属性外,还有一个只读属性MaxCapacity,它表示对给定的StringBuilder实例的容量限制。在默认情况下,这由int.MaxV alue给定(大约20亿,如前所述)。但在构造StringBuilder对象时,也可以把这个值设置为较低的值:
// This will both set initial capacity to 100, but the max will be 500.
// Hence, this StringBuilder can never grow to more than 500 characters,
// otherwise it will raise exception if you try to do that.
StringBuilder sb = new StringBuilder(100, 500);
还可以随时显式地设置容量,但如果把这个值设置为低于字符串的当前长度,或者超出了最大容量,就会抛出一个异常:
StringBuilder sb = new StringBuilder("Hello");
sb.Capacity = 100;
主要的StringBuilder方法如表所示。
名称作用
Append() 给当前字符串添加一个字符串
AppendFormat() 添加特定格式的字符串
Insert() 在当前字符串中插入一个子字符串
Remove() 从当前字符串中删除字符
Replace() 在当前字符串中,用某个字符替换另一个字符,或者用当前字符串中
的一个子字符串替换另一字符串
ToString() 把当前字符串转换为System.String对象(在System.Object中被重写) 其中一些方法还有几种格式的重载方法。
注意:
AppendFormat()实际上会在调用Console.WriteLine()时调用,它负责确定所有像{0:D}的格式化表达式应使用什么表达式替代。下一节讨论这个问题。
不能把StringBuilder转换为String(隐式转换和显式转换都不行)。如果要把StringBuilder的内容输出为String,唯一的方式是使用ToString()方法。
前面介绍了StringBuilder类,说明了使用它提高性能的一些方式。注意,这个类并不总能提高性能。StringBuilder类基本上应在处理多个字符串时使用。但如果只是连接两个字符串,使用System.String会比较好。
3、格式化字符串
前面的代码示例中编写了许多类和结构,对这些类和结构执行ToString()方法,都是为了显示给定变量的内容。但是,用户常常希望以各种可能的方式显示变量的内容,在不同的文化或地区背景中有不同的格式。.NET基类System.DateTime就是最明显的一个示例:可以把日期显示为10 June 2008、10 Jun 2008、6/10/08 (美国)、10/6/08 (英国)或10.06.2008 (德国)。
同样,第6章中编写的V ector结构执行V ector.ToString()方法,是为了以(4, 56, 8)格式显示矢量。编写矢量的另一个非常常用的方式是4i + 56j + 8k。如果要使类的用户友好性比较高,就需要使用某些工具以用
户希望的方式显示它们的字符串表示。.NET运行库定义了一种标准方式:使用接口IFormattable,本节的主题就是说明如何把这个重要特性添加到类和结构上。
在显示一个变量时,常常需要指定它的格式,此时我们经常调用Console.WriteLine()方法。因此,我们把这个方法作为示例,但这里的讨论适用于格式化字符串的大多数情况。例如,如果要在列表框或文本框中显示一个变量的值,一般要使用String.Format()方法来获得该变量的合适字符串表示,但用于请求所需格
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论