^' d6 j p9 C" A2 ?5 i1 N0 z( I: \ v5 T7 o+ l ?# u1 Y
在PSSE中使用Python脚本:简要介绍 translated by Jackain
* P" P5 D- \, V# I* n4 B: w! R7 R T% u3 z o
PSSE30提供了Python的API接口,使在PSSE中使用Python脚本语言成为了可能,这不仅使PSSE批量运行,同时可以根据你的Python代码,使处理功能更强大,更灵活。% M+ p/ N' Y9 u! @/ _6 D, ?& P
我没有找到很好的关于在PSSE中使用Pyhton的资料,我把我能找到的东西写在这里供初学者入门。 6 N m: ~6 L+ d! W前面的一些资料能在使用说明书USERS.pdf的第12章找到,其他资料是通过API.pdf和IPLAN.pdf综合而来的,可以从中找到。 m% \, H; B+ ? X我发现使用Adobe的搜索功能非常有用,你可以根据一个关键词同时搜索在一个文件夹下面的所有的pdf文件,这样寻找某个函数的IPLAN和API的描述遍得很简单。IPLAN的描述一般在查找详细描述“某些传递数据的参数”的解释时非常有用。IPLAN函数的名称同API文档中Python的那些函数相同,只是后者是大写字母而已。 ! m% q& N% E- S& O. x b2 a a1 [我使用的是30版本的PSSE,和2.3版的Pyhton,这篇文章的前提是你了解一些基本的Python,Mack Lutz和David Ascher写的《Learning Pyhon》非常不错。, x- h |. f& i2 |+ L6 }; \" K Python 7 |+ @+ ~7 B( a! ]% @ y, fPython.org homepage $ M4 {2 |; _8 F' l, i6 WPSSE7 j5 H3 S8 o( ` Power System Simulator for Engineering. 6 \. q- x! U+ }8 G7 h, } % J4 y/ `+ {% q' j1 W 在PSSE中使用Python简介" o+ x% t' z% j8 H
PSSE说明文档说:根据你在PSSE中的操作可以生成Python代码。这花了我一段时间才理解,因为我是PSSE和Python的初学者。根据以下步骤,可以生成你的第一个python代码,用来进行潮流计算分析。前提是你有一个包含有网络信息的.raw文件,格式符合PSSE30要求。7 ?) \4 \9 Y! q t
1、9 t" B6 q- q! z0 {' B; X: P
打开PSSE。 7 [9 L! ~; v; O2、 # Z6 \( R" _2 J选择“I/O Control”中的“Start Recording”菜单,输入一个PSSE写入的文件名。PSSE会自动地添加.py后缀。$ a; o. L1 ~: W' a+ X
3、+ v3 u6 r$ q& o8 q
使用“File”菜单中的“Open”按钮,读入网络信息。将文件类型设定为.raw告诉PSSE你在给他的是raw文件(不知道是原文傻还是我翻译的傻:’() : D. c+ Z9 w7 s1 G9 Y3 [# I: W) K4、' f( q( \- Y, @) t: j/ o( Y
选择“Power Flow”中“Solution”,选择“Solve”,运行潮流计算。选择所需要的设置模式,点击“Solve”按钮。1 F0 o& X5 ], x6 o5 R7 x4 H
5、5 ?5 k% F* \: p, }
选择“File”菜单中的“Save or Show”保存运算结果。选择“Power Flow Raw Data”选项卡,点击“Data File”单选按钮,并在旁边的文本框中输入文件名。点击OK按钮。 9 H! @4 q. @. D A使用你最喜欢的python浏览器查看生成的python代码。9 b* x& i5 a2 [4 s7 C0 y* \
# File:"C:\Documents and Settings\jbo\MySensibleFolderName\pssetest.py", generated on TUE, FEB 08 2005 14:11 psspy.read(0,r"""C:\Documents and Settings\jbo\MySensibleFolderName\testCase_30EV30test.raw""")9 n7 s6 b8 X( ^
psspy.fdns([0,0,0,1,1,0,99,0]) / g/ t# P9 Y' Z, J6 @5 t( l: lpsspy.rawd(0,1,[1,1,1,0,0,0],0,r"""C:\Documents and Settings\jbo\MySensibleFolderName\SOLVEDtestCase_30EV30test.raw""")
注意,所有的方法都是通过一个叫做psspy的对象调用的。这个对象包括所有可用的方法和对象。他们看起来只不过是通过一个列表来组织的。我还没有写任何接口对象来组织和调用psspy方法时,就是这么想的。(瞎翻译的)$ K( E' ?7 v; ^! T
注意声称路径字符串的方法,这不是python提倡的格式,下面的写法更好:: d* d$ z7 h) e
"C:\\Documents and Settings\\jbo\\MySensibleFolderName\\testCase_30EV30test.raw".
; ]; a0 D- C! q7 o怎样来运行python代码' @' Y% l# b- U" Z; r
我试过三种方式 " ]; n) m5 v% m+ c& b! b1、. i+ A& V4 g# B! S1 l D
在PSSE中打开命令输入窗口(command line input, CLI)任务。 1 X- R, @! U( N$ \& Y) n2、 \1 C2 R% W% y
在PSSE中选择“Run Automation File”按钮运行一个python文件。 9 `" t5 t8 X) X X+ F7 [/ u3、 2 c. `8 H& v/ S9 i在PSSE30中python文件作为一个命令行变量。你可以指定图形界面只有在完成之后才出现。这可以为机器节省内存。在这种情况下,你可以指定仿真的母线数量。可以参照PSSE Users Manual中的PSSE Overview。3 j# r4 j5 M. A" b; y 在PSSE中打开CLI / T7 }/ {, ^% m2 t% p' M1 L- |1、! N: U4 P* J! b; V; l1 \
在“I/O Control”菜单中选择“Begin command line input session”。 ; V7 _( v' A6 o& @2、7 f; d# i! D1 ]( i% T K9 g+ s2 h
使用“Command Language”选择框将语言更改为python。 5 c2 d; j( p% i( V3、; d- L$ @- Q/ j2 o" C
选择“RunAuto”按钮并选择一个python文件,PSSE会运行那个文件。 / I. G1 R! [# E1 t c$ b注意python命令可以直接在控制台输入。控制台动作同编译python的交互式平台不同,它不自动显示调用方法所返回的结果。要想显示的话必须使用python的print命令,例如:print(psspy.aMethod(myParameters))。 3 f5 b0 ^9 c+ G" x一个重要的点是所有列出的方法都是psspy方法。所以使用要使用totbus方法返回母线数量时,输入CLI时不能使用ival=totbus(),而应该使用ival=psspy.totbus()。在CLI中使用print(ival)来显示ival。Python语法也可以使其简化,如:from psspy import * 。采用何种编程风格由用户决定。 9 B$ N* w V2 ]- N# M! H : C8 e' l2 ]4 X在IDLE编译平台测试python代码" d$ k& P I5 l# o+ ~
我花了让人崩溃的长时间来寻找下面这个加入到python路径的方法。& |% v) m) R6 }
当你想将自己写的一个模块导入python,或者要把一个处在其他文件夹下的模块加入到python文件中去,那么下面的方法就大有用啦:6 h4 ^/ ]4 S& A( C( y* S3 b
1、 + B+ a, _& s) E4 _9 G) b; \9 s% h创建一个扩展名为.pth的文件。我们起个很漂亮比尔盖茨又很喜欢的名字myconfig.pth。当你在使用记事本之类的编辑器时就要小心了,不要保存成myconfig.pth.txt哦。 " L* h: J- S. x$ l3 l* K2、. @9 W) I# L( Z9 r- |; w
把这个文件放到python根目录下面去,比如我的就是C:\Python23。9 A& ?' H( O+ c: `! O# A3 L3 ~
3、8 {0 a6 B5 p! G
把每个你想加入PYTHONPATH的文件夹全路径,单独一行的加入到这个文件中去。例如,第一行可能就是:C:\aFolder\work\Python。+ r* B! u; z4 h6 D, V; l+ _
这样可以解决下面的错误,当你导入Spam这个模块的时候就不会出现:ImportError: No module named Spam.4 S0 ]4 B! \8 \2 {, o, T+ B' x
; B9 w: J0 I! f 获取和设置网络数据 # C% S w( D6 u/ I1 l+ ?直接获取数据是很费力费时的事情。在网络中的每个部分都有几个不同的参量,比如负荷。每个参量均必须分别通过函数调用来访问。所以如果要找出每个母线的电压,那么必须对每个母线通过psspy对象调用方法busdat。它的参数通过一个字符串来解释,就如一开始所说的,这些参数可以在IPLAN说明书里找到,同Python里的命令名字相同。 4 e5 B( a% D) S' B; M! Z+ Y生成2 D$ l/ S& A2 l' z% U# i
字符/文件 . l! p: f- l4 H' z格式的报告是可以的,我曾经试图寻找转存这些变量的方法,这样就可以不通过文件系统直接可以通过python代码来访问了,但是没找到。如果有谁找到了这种方法请告诉我。如果西门子能改进一下API的话这将变得很简单,但是我们现在只能根据已有的东西来做。$ ~( _- i( ?8 v4 \4 P% i
反过来,也令人郁闷的是,要设置数据,每个部分的所有参量都要提供出来。幸运的是,有默认的对象_i 和_f,当你不想改变某个值时,插入这些对象即可。当运行和导入我自己的主模块时,我把这些对象存储在psspy对象中,这样每当psspy对象使用的时候,他们就能使用。对于整形和浮点数参数分别有个默认值(对象),我想他们与各自能取到的最大值相等。( B! k/ o/ d# K4 v
* |1 r2 y/ ^! q1 ] 在Python中组织PSSE数据" c i; l% J6 l6 p$ g
当使用Python扩展PSSE时,经常没有必要抽取所有的PSSE使用的数据。我创建了两个主要的类,一个与一个母线有关,叫做Bus,另一个与两条母线有关,叫做Branch。我所使用的所有层次如下所示:! }; x, w8 E/ T" s& S