6 N* Z4 O" s& d, L) r
# s! W5 F3 W8 V- `$ Z: {) Q
: e' l* c; @' b# B
在PSSE中使用Python脚本:简要介绍 translated by Jackain
0 x+ N* ^$ y, \- E7 D- Y/ E2 x- x
; L" r3 m: }% L2 IPSSE30提供了Python的API接口,使在PSSE中使用Python脚本语言成为了可能,这不仅使PSSE批量运行,同时可以根据你的Python代码,使处理功能更强大,更灵活。 $ H; r2 q: S: V* x) j! ~我没有找到很好的关于在PSSE中使用Pyhton的资料,我把我能找到的东西写在这里供初学者入门。/ O" s. S0 o+ _( I8 C/ V; H
前面的一些资料能在使用说明书USERS.pdf的第12章找到,其他资料是通过API.pdf和IPLAN.pdf综合而来的,可以从中找到。" j- ~3 E# |. h. h7 z& X2 k
我发现使用Adobe的搜索功能非常有用,你可以根据一个关键词同时搜索在一个文件夹下面的所有的pdf文件,这样寻找某个函数的IPLAN和API的描述遍得很简单。IPLAN的描述一般在查找详细描述“某些传递数据的参数”的解释时非常有用。IPLAN函数的名称同API文档中Python的那些函数相同,只是后者是大写字母而已。 ' {9 t3 L& d3 L( l6 K9 K3 z& m, x我使用的是30版本的PSSE,和2.3版的Pyhton,这篇文章的前提是你了解一些基本的Python,Mack Lutz和David Ascher写的《Learning Pyhon》非常不错。: g4 X G: ^3 k/ m- H Python, W: J$ X, \! R: C' T" ~ Python.org homepage 3 \% l% M2 A" E: Z3 q PSSE9 L! a7 E" c- o: E' C% o \ Power System Simulator for Engineering. ; s5 D, [9 d$ V7 u
; @+ i2 ]5 Q7 G+ ]* `& l [ 在PSSE中使用Python简介: i' i4 [* b4 G9 x
PSSE说明文档说:根据你在PSSE中的操作可以生成Python代码。这花了我一段时间才理解,因为我是PSSE和Python的初学者。根据以下步骤,可以生成你的第一个python代码,用来进行潮流计算分析。前提是你有一个包含有网络信息的.raw文件,格式符合PSSE30要求。 5 l- p% E2 k# H2 x* F- }% N1、 - N1 [. i) |, W ^打开PSSE。 4 i" a2 W2 |8 d0 f$ Q. Z2、 . X. |; q7 @& W选择“I/O Control”中的“Start Recording”菜单,输入一个PSSE写入的文件名。PSSE会自动地添加.py后缀。 ' @/ f3 J! F/ s$ r! M. ~4 J3、 4 k5 r$ D8 E3 d使用“File”菜单中的“Open”按钮,读入网络信息。将文件类型设定为.raw告诉PSSE你在给他的是raw文件(不知道是原文傻还是我翻译的傻:’() : A% `" I3 k# z$ s* p, r4、 ! X) w' a; F" C- m( E0 S选择“Power Flow”中“Solution”,选择“Solve”,运行潮流计算。选择所需要的设置模式,点击“Solve”按钮。 S# l$ e7 W" J: _# C% }! j2 D1 @5、 5 K! g. ?4 I: L( K选择“File”菜单中的“Save or Show”保存运算结果。选择“Power Flow Raw Data”选项卡,点击“Data File”单选按钮,并在旁边的文本框中输入文件名。点击OK按钮。 & W& Z1 h" \ N, p3 C* |使用你最喜欢的python浏览器查看生成的python代码。 * `# { N) {; [6 y3 V0 I9 \) \
# 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""")/ ~/ M) `6 Y2 p
psspy.fdns([0,0,0,1,1,0,99,0]) # l7 E: @4 U, k# j2 H6 b2 s7 D* w9 [psspy.rawd(0,1,[1,1,1,0,0,0],0,r"""C:\Documents and Settings\jbo\MySensibleFolderName\SOLVEDtestCase_30EV30test.raw""")
注意,所有的方法都是通过一个叫做psspy的对象调用的。这个对象包括所有可用的方法和对象。他们看起来只不过是通过一个列表来组织的。我还没有写任何接口对象来组织和调用psspy方法时,就是这么想的。(瞎翻译的)# g$ e; O& l- H- b8 ^3 [
注意声称路径字符串的方法,这不是python提倡的格式,下面的写法更好:8 B+ C& u5 z h; S
"C:\\Documents and Settings\\jbo\\MySensibleFolderName\\testCase_30EV30test.raw".
& V9 ^% R5 w, C0 P4 J/ X# \( F* S怎样来运行python代码' N" x4 J( m& u0 X2 A$ |; C* W; o0 R
我试过三种方式. H: T- a# M' r' G- p
1、$ b5 b# ^/ D) @9 i
在PSSE中打开命令输入窗口(command line input, CLI)任务。9 q7 ^0 W1 M$ C& B& i
2、 ' C; Q& T3 {! ~% C8 @在PSSE中选择“Run Automation File”按钮运行一个python文件。6 E% b* `2 w; n0 ]: X% H5 S+ u
3、. T: Z- z# m8 g8 A! r) C
在PSSE30中python文件作为一个命令行变量。你可以指定图形界面只有在完成之后才出现。这可以为机器节省内存。在这种情况下,你可以指定仿真的母线数量。可以参照PSSE Users Manual中的PSSE Overview。7 d1 M `- n* Y- K; y! V( f$ B' O 在PSSE中打开CLI8 v: [/ x6 Q; N1 r- K
1、" Q. s) O6 K }5 {
在“I/O Control”菜单中选择“Begin command line input session”。7 N) n/ a# }9 D' ?8 V9 J* o
2、4 [' M; G' ?: e- r' N3 l* n
使用“Command Language”选择框将语言更改为python。 3 _) B5 ?: Z1 F ~' M2 l2 S1 {3、* X9 J0 Z- s4 v' l5 U7 S
选择“RunAuto”按钮并选择一个python文件,PSSE会运行那个文件。 ; U( _3 b5 s2 V$ h注意python命令可以直接在控制台输入。控制台动作同编译python的交互式平台不同,它不自动显示调用方法所返回的结果。要想显示的话必须使用python的print命令,例如:print(psspy.aMethod(myParameters))。 Q: x- G* e b7 {" X& s
一个重要的点是所有列出的方法都是psspy方法。所以使用要使用totbus方法返回母线数量时,输入CLI时不能使用ival=totbus(),而应该使用ival=psspy.totbus()。在CLI中使用print(ival)来显示ival。Python语法也可以使其简化,如:from psspy import * 。采用何种编程风格由用户决定。 - @& T$ H" s* h5 a8 P# X 8 T' s4 s: l+ \1 _/ N在IDLE编译平台测试python代码# J% s6 v* O: q* l) M) h3 K) V
我花了让人崩溃的长时间来寻找下面这个加入到python路径的方法。 ) I7 A( `$ Y& K* K当你想将自己写的一个模块导入python,或者要把一个处在其他文件夹下的模块加入到python文件中去,那么下面的方法就大有用啦: 3 H: @: r1 ]& x5 j1、 ' l( v, o; V# E* \, z1 y创建一个扩展名为.pth的文件。我们起个很漂亮比尔盖茨又很喜欢的名字myconfig.pth。当你在使用记事本之类的编辑器时就要小心了,不要保存成myconfig.pth.txt哦。 * S) k/ Y4 X* ?: i* @2、 " M* Y- E8 c( l, ^. @: H: m把这个文件放到python根目录下面去,比如我的就是C:\Python23。+ B3 `% T% J) k! ]0 b3 m
3、 1 p& @8 q" f& u( A) U- ]把每个你想加入PYTHONPATH的文件夹全路径,单独一行的加入到这个文件中去。例如,第一行可能就是:C:\aFolder\work\Python。 " G2 c# m: |2 x) H0 p. H这样可以解决下面的错误,当你导入Spam这个模块的时候就不会出现:ImportError: No module named Spam.6 L \; S- E4 Y1 i: _- ]& R
我把这些对象做一个列表来标识整个的网络。Python在快速和简化处理对象列表方面非常擅长。选择或者增加方法可以用于大批bus和branch类,这些类包含有用于对象中所有参量的处理方法。这样可以提供一种便利:一个部分的任何参量,通过大量的方法均可以对其他部分可见。可是呢,我正在有目的的在我的工作中避免出现这种情况。 3 d( U2 y: G0 ^3 s' B! n注意当在Python中创建一个PSSE模型的拷贝时,这些拷贝还处于同步状态。因为潮流计算的原因,一些参数会改变而其他参数不会,例如,改变线路参数并重新计算,貌似改变了复杂(复数)的母线电压,但是不改变负荷。这样必须把从PSSE模型里观察到的数据同存储在python模型中但是在PSSE模型中使用的数据区分开来。% j7 U% n A3 G, ]4 w8 Q8 f
" g. n( [" N2 N; z. I; k编译更复杂的Python程序# L3 v# |6 ]7 p7 i
我保留了一个叫做PSSPYStub.py的python文件,它包含一个仿冒的psspy类,其中对应于每个所使用的psspy方法均创建一个短小的仿冒方法。这样当我进行简单测试编译python代码时把这个PSSPYStub类代替psspy类,这样就避免了开启PSSE,可以允许python调试工具的简单使用。3 H) L2 S& n J7 p
这个短小的仿冒方法对于psspy函数来说是微不足道的,但是在使用一些函数时需要注意,例如nxtbus函数,这个函数用来返回 $ v) B; t4 A( s4 m6 c调用inibus函数之后还没有输出的下一个载入PSSE的母线节点号。为在这个仿冒方法中实现这个函数,需要在inibus函数中创建一个count变量,并且在nxtbus函数中对这个变量进行递减,并返回一个母线节点号直到其达到0。' ?3 b& i/ ~# N 注意!更难的python内容' T* D$ ?* h2 ^0 g% f+ I
调试过后的代码如果能在PSSE中运行同样可以使用IDLE界面。打开PSSE和CLI界面并且输入并运行Runldle.py,不出意外地话会打开IDLE编程环境。通过打开这个调试器运行你的python代码。 # \. b; O2 x- M! Y8 \使用这个方法有点不同,当你使用import命令时,主要的psspy对象和伴随的_i和_f将在你运行中的模块中不能访问。在PSSE中的“Run Auto”按钮不同于标准python 中的import命令。“”按钮允许运行一个python模块时把psspy作为一个全局变量。但是在你得到的IDLE解释器中的import命令不会把psspy作为导入模块的全局变量。在python中一个全局变量只能在本模块中可见。 # \. X8 X- ]; Y+ }. X为了解决这个问题,我在本应在“Run Auto”按钮运行的代码之外创建了一个类,__init__的定义会将psspy对象作为一个参数分配到一个类变量中。这样他在整个类中都会可见。. k2 Q4 L0 m k
包含这个类的模块被导入后,一个这种类的对象会被创建,这样这个类的所有函数都能被调用。例如,这个类可能包含如下的函数: $ z- n2 i, ^/ q& v( B, u& m! m! B9 d