升级FORTRAN源代码——FORTRAN与VB混合编程
2(x】5年3月 中南水力发电 第1期
升级 FORTRAN源代码
.FORTRAN与 VB混合编
蒋椰林
(中南勘测设计研究院,湖南 长沙 410014)
程
摘 要 介绍了用 Microsoft FORTRAN PowerStation 4.0(FPS4.0)和 Microsoft Visual Basic 6.0(VB6.0)建 32位
Windows FORTRAN应用程序的方法和技巧。并编写演示程序加以说明,为 DOS环境下运行的 FORTRAN应用程
序升级至 WINDOWS环境下运行...
2(x】5年3月 中南水力发电 第1期
升级 FORTRAN源代码
.FORTRAN与 VB混合编
蒋椰林
(中南勘测
研究院,湖南 长沙 410014)
程
摘 要 介绍了用 Microsoft FORTRAN PowerStation 4.0(FPS4.0)和 Microsoft Visual Basic 6.0(VB6.0)建 32位
Windows FORTRAN应用程序的方法和技巧。并编写演示程序加以说明,为 DOS环境下运行的 FORTRAN应用程
序升级至 WINDOWS环境下运行,提供一种方便快捷的方法。
关键词 动态链接库 声明 参数传递
l 引 言
FORTRAN是一种适用于数值计算的语言 ,在科
学计算和工程
领域 ,目前该语言效率最高。在
DOS时代 ,许多水电专业程序用 FORTRAN语言编
写 ,这些源代码 由于经历 了时间的考验 ,因此是成
熟 、稳定的代码。如何继承前人的 FORTRAN程序资
源 ,扩充数值计算以外的数据成图等功能,并使得应
用程序同时具有 Windows环境图形用户界面的友好
性呢?面向对象的编程语言 VB作为基于 WindoWS
平台的开发工具 ,以其灵活简便 、易学易用的特点 ,
成为广大水电工作者的首选编程工具。因此较好的
解决办法是 FORTRAN与 VB混合语言编程,这样就
能 充 分 发 挥 VB 强 大 的 图 形 界 面 开 发 功 能 和
FORTRAN的高效数值计算特点,设计出具有专业水
准的软件。
本文以笔者的编程实践 ,介绍通过动态链接库
的方法实现 FORTRAN与 VB混合编程。具体做法
是 :用 Microsofl FORTRAN PowerStation 4.0,将
FORTRAN 程 序 编 译 成 Windows的 动 态 链 接 库
(DLL), 以 供 Microsoft Visual Basic 6.0调 用 。
FORTRAN源代码主要采用带参数的子例子程序,以
这种方法创建 DLL文件 ,不用改动 FORTRAN源程
序 ,十分方便快捷。在 VB中完成程序界面设计及程
序功能整合。
2 用 FOR] AN PowerStation 4.0建 立动 态
链接 库
2.1编写 FORTRAN源文件
可用任何编辑器建立 FORTRAN源文件 ,文件由
函数和子程序构成 ,由于 FORTRAN只与VB交换数
据,因此,要去掉针对键盘和屏幕的交互式输入输出语
句。对于每一个 VB将直接调用的子程序,在说明语句
之前 ,要加一条 FO RTRAN PowerStation的编译元命令:
! MS$ATTRIBUTES DLLEXPORT ::mysub
其中:
!MS$ATrRIBUTES 编译元命令 ,对指定的变
量声明 Microsoft F0RTRAN的扩展属性 ,用于简化
FORTRAN与 VB之间的过程与数据传递 DIJ,EXPORT
Microsofi FORTRAN的扩展属性 ,用此属性声明过
程 ,意味着该过程会出现在动态链接库的接 口函数
中 mysub要调用的 FORTRAN子程序。
2.2建立动态链接库的项目文件
在 Microsofl FORTRAN PowerStation 4.0开发
环境 中 ,选 择菜单 File—New⋯ ;在 选择 Project
Workspace后 ,单击 OK;在弹出的对话框中,选择
Dynamic--~Link Library,并指定项 目名和所在位置,
然后单击 Create,就建立了动态链接库的项 目文件。
2.3创建动态链接库
通过 Insert--~Files in Project⋯将 FORTRAN源
文件加入项 目中。
通过 Build---~build .dll将项 目编译连接为动态
链接库,其中 .dll代表动态链接库。并将 .dll文件
拷贝到 C:\WINDOWSkSYSTEM子目录下。
3 在 Visual Basic 中使 用动 态链接库
由于 DLL过程存在于 Visual Basic应用程序之
维普资讯 http://www.cqvip.com
56 中南水力发电 第 l期
外的文件 中,故必须用 Declare语句声 明外部过程
后,方可把它当作 Visual Basic过程来使用。
3.1声明动态链接库
在代码窗口的“声明”部分增加一个 Declare语
句。完整的语法如下:
Public Delcare Sub subname Lib “libname’’
Alias“aliasname”(arglist、
Delcare语句的各组成部分说明如下:
Public:用于声明在所有模块中对所有其他过程
均合法的过程;
Sub subname:指明该过程无返回值 ;
Lib“libname”:指明 DLL文件及其路径;
Alias“aliasname”:指明被调用过程在 DLL中的
别名,这一属性是必须的;
别名的命名有一定的规律可循 ,即如果子程序
名为 subname,则别名为 一subname@n ,其中 n为一
整数,n等于子程序的参数个数乘以 4。特别的,若子
程序的参数个数为 0,那么 n也为 0。
3.2使用动态链接库
在声 明 了过 程之 后 ,调 用 它 的方 式 与标 准
Visual Basic过程相同:Call subname(arglist)
4 参数传递
要使 VB正确调用 FortranDLL,必须解决子程序
参数传递问题。由于不同的语言对于不同的数据类
型 的处理方式不 同,故表 1列出 了 FORTRAN与
Visual Basic对等的数据类型。
表 1 FORTRAN与 Visual Basic对等的数据类型
FORTRAN Visual Basic
Integer 2 Integer
Integer 2 Long
Real*4 Single
Real*8 Double
Character(n) String n
如果所传递的参数是数组类型,按照 FORTRAN
PowerStation的
,则在 VB中调用 FORTRAN子
程序时,应在相应位置放上该数组的第一个元素,而
不是通常的数组名(参见示例 5.1)。
对于字符串的传递 ,考虑到实际应用中,VB 与
FORTRAN间传递的字符串主要是数据文件名,解决
的方法是用“辅助数组 ”实现字符 串的传递(参见示
例 5.1)思路如下:
●在 VB中,将字符串转换为大写,用 ASC函数
将字符 串中的每个字母转换为 ASCII码值 ,从而得
到一个对应于字符串的 ASCII码值数组。
●将数组传到 FORTRAN子程序;
●在 FORTRAN中,用 CHAR函数将 ASCII码
值数组还原为字符串。
5 应用举例
5.1数组传递示例
!FORTRAN子程序
SUBROUTINE mysub 1(n,a)
!MS@ATTRIBUTES DLLEXPORT::mysubl
INTEGER n,i
REAL(4)a(3)
DO i=l,3
a(i)=n
ENDDO
RETURN
END SIIBR0IITINE
!VB中作如下声明(模块级)
Public Delcare Sub mysubl Lib “EXAM1.dll” Alias
“
一 mysubl@8”(ByRef X AS L0ng, ByRef Y AS
Single)
!VB中调用 FORTRAN子程序
Dim a As L0ng
Dim b(1 To 3)As Single
a=10
CALL mysub1(a,b(1))
5.2字符串传递示例
本例在 VB主程序 中选择一 个原始数据文件 ,
将该文件传给 FORTRAN子程序进行计算。
!FORTRAN子程序
SUBROUTINE mysub2(a,n)
!MS@ATI’RIBUTES DLLEXPORT::mysub2
IMPLICT REAI 8(a—h,O--Z)
CHARACTER(n)cstr
DIMENSION k(n)
DO 10 i=l,n
cstr(i:i)=char(k(i))
10 continue
RETURN
END SIJBROI ITINE
维普资讯 http://www.cqvip.com
2005年3月 中南 水 力发 电 第l期
一 种引起机组振动与噪音的原因及其影响
何今盛
(永州市涔天河水利水电管理局,湖南 永州 425500)
摘 要 因在消缺改造中定子端部接线失误,造成发电机磁路不对称,引起机组振动和噪音 ,并产生负序电流,对
发电机造成不 良影响。
关键词 接线失误 振动和噪音 不良影响
为消除发电机的缺限,提高机组的健康水平 ,在
成功地进行了某水电站 2号发电机消缺改造的基础
上,2003年 8月我们又与原承接单位 (xx电机有限
责任公司,以下简称公司)签订了与 2号发电机技术
要求相同的 3号发电机的消缺改造
。3号发电
机改造后的主要数据如下:
额定容量:l0.56MVA; 额定电压 :10500V;
额定电流:580.4A; 额定转速 :187.5r/min;
额定频率:50Hz; 额定励磁电流 :440A
额定励磁电压 :178.8V; 相数 :3;
接 法:2Y。
l 振动、噪音的基本情况及原因
公司于 2003年 9月 26日完成发电机定子的消
缺改造工作。电站于 1O月 20日完成发电机组其它
部件_的装复 、调试 ,当 日开机试运行 ,机组空载状
态下无异常振动和噪音,各部位的摆度 、振动均在
规程允许范围内。空运 3-5min后加励磁电流升压,
当加上励磁 电流发电机即产生振动和噪音。人站在
发电机盖板上感到振动十分明显 ,站在距发电机定
子外壳约 3m远的中控室门边 ,也感到脚板发麻 ,
噪音沉闷;在+Y、X和 Y、+X方位的振动和噪音
业 业 业
!VB中作如下声明(模块级) f$=Right(f$,al—i)
Public Delcare Sub mysub2 Lib “EXAM2.dll” Alias next i%
“
_ mysub2@8”(ByRef X AS long, ByRef Y AS CALL mysub2(a(1),a1)
long) ···
!VB中调用 FORTRAN子程序
Private Sub Command 1
— Click0
Dim a0 As I ng
Dim al As lo ng
CommonDialog1.ShowOpen
f$=UCase(CommonDialog1.filename)
al=Len(Trim(f$))
REDIM a(1 TO a1)As long
For i%=l TO al
a(i)=Asc(Left(f$,1))
6 结束语
本文 探讨 了 Windows环 境 下 Visual Basic和
FORTRAN PowerStation4.0通过 DLL实现混合语言
编程的方法。编程实践证明,只要掌握了两种语言混
合编程中过程名 、参数的传递方法 ,就可以充分利用
VB和 FPS4.O各 自的优势 ,编制出在 WIND0WS操
作系统下运行的用户界面友好的 FORTRAN应用程
序。
收稿 ¨期 :2004-03-29
维普资讯 http://www.cqvip.com
本文档为【升级FORTRAN源代码——FORTRAN与VB混合编程】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。