西莫电机圈

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

查看: 4175|回复: 9

[原创] Python调用Flux第一讲: 启动FluxServer

[复制链接]

该用户从未签到

发表于 2014-12-31 15:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 dnawujun 于 2014-12-31 23:26 编辑

今天与大家分享下如何用Python调用Flux的问题
这里讲的Python并非Flux自带的Jython环境,而是独立的Python环境
Flux安装目录中有个Api的目录,里面有用Excel、C、Matlab调用Flux的例子,唯独没有Python的,既然Python被称为胶水语言,本人就想着Python一定能够调用Flux。

有些朋友可能会问了,为毛不直接使用pyflux?因为pyflux是基于jython 2.2的,要二次开发个图形界面必须使用java的GUI库,而java的
GUI本人实在不敢恭维。我一直用PyQT做界面,那个方便啊爽啊谁用谁知道。所以需要采用外部调用的方式

这是第一讲,如何启动FluxServer

一.        开发环境:
        1.        Python 2.7 x64(x32也行,我这里用的是Anaconda,大家可以选择自己喜欢的
                见h--t--t--ps://w-w-w.python.org/download/alternatives/)
        2.        PyCharm 4.0.3(这个IDE比较爽)
        3.        Cedrat Flux 11.2
二.        Python调用C语言写的DLL
        在讲如何用Python启动FluxServer前,先讲讲这个问题。
        在Python 2.5之后,Python标准库中有个ctypes的东东,这东西可以让Python调用C语言写的dll。
        先上个例子:

        from ctypes import *
        user32=CDLL(‘user32.dll’)
        user32.MessageBoxW(0,u’你好’,u’例子’,0)
        ss.png
        关键是这句CDLL(‘user32.dll’),这句加载user32.dll,之后就可以调用其中的函数了
        也可以用cdll.LoadLibrary("user32.dll ")
        参见Python 2.7 帮助文档15.17.1.1. Loading dynamic link libraries
三.        ctypes数据类型
        ctypes定义一些和C语言兼容的数据类型,
        见Python 2.7 帮助文档15.17.1.4. Fundamental data types
四.        用Python启动FluxServer
        用Python启动FluxServer的关键在于用ctypes去调用flux_mp.dll中的各种函数
        Flux_mp.dll在Flux安装目录\Bin\dll\win64中(或者win32)。
        该dll的导出函数说明参考Api\help\API_Flux_V11.2.doc,但是需要注意的是,这文档里面有些函数的说明有错,需要配合Api\win32\include\ flux_mp.h来看

        涉及到启动FluxServer,有3个函数需要介绍

        H_ERROR CEDCALL FMP_arg(TCHAR* argName,TCHAR* valArg , TCHAR** arg)
        这个函数设置启动参数
        参数说明:
        argName:参数名称,字符串。各种参数见API_Flux_V11.2.doc
        valArg:参数值,字符串
        arg: 输出的参数,供FMP_startLocaleServer使用的,字符串指针

        H_ERROR CEDCALL FMP_init(TCHAR* configFile,CEDINT32 debugFlag);
        初始化,启动前必须先调用这个
        参数说明:
        configFile:配置文件,可以为空字符串
        debugFlag:以调试模式还是发布模式启动

        H_ERROR CEDCALL FMP_startLocaleServer(TCHAR* server,TCHAR* wrkDir,TCHAR** args,CEDINT32 nbArgs, CEDDWORD *serverUid);
        参数说明:
        server: 需要启动的FluxServer,字符串类型。比如”FLUX2D_11.2_32”、 “FLUXSKEWED_11.2_32”等。这些server可以在flux_mp.h中第59行可以找到,全部为宏定义
        wrkDir: 工作路径,字符串类型
        args: 启动参数,字符串数组。附加的参数,如内存给多大,用几个CPU,什么语言等
        nbArgs: 上面那个args数组的个数,整数
        serverUid:整数指针,函数执行无错误后,返回唯一的Server ID


        1.        无参数直接启动
        Import ctypes as _ct
        import os
        import platform

        __FLUX_INSTALL_DIR = os.environ['INSTALLFLUX'] #使用环境变量找Flux的安装目录,Flux安装后会建立这个环境变量.
        __arch = platform.architecture()  #__arch[0]为当前使用的Python解释器的位数”64bit”或”32bit”
        __FLUX_MP_PATH = __FLUX_INSTALL_DIR + r'\bin\dll\win' + __arch[0][:2] + r'\flux_mp.dll'
        #flux_mp.dll的位数必须和当前Python一致,32bit的Python不能调用64bit的Flux_mp.dll,64bit的Python也不能调用32bit的Flux_mp.dll
        __FLUX_MP = _ct.CDLL(__FLUX_MP_PATH)
        errorId =__FLUX_MP.FMP_init("",0) #初始化
        __serverUid = _ct.c_int()
        errorId = __FLUX_MP.FMP_startLocaleServer("FLUX2D_11.2_64","C:\temp", 0, 0, _ct.byref(__serverUid))

        这样就启动了一个啥也没干的Server,但是脚本执行完后并不会关闭FluxServer,这样只能用任务管理器结束之
        所以一般在程序最后会调用FMP_stopServer结束之,函数很简单,参见API文档
       
        2.        带参数启动
        上面        的无参数启动,其实还是默认参数启动。比如Numeric Memory为600MB
        CPU个数为系统全部的CPU个数,语言为英语等
        这些信息可以在工作目录下查看*.log得到
        下面以配置两个参数为例讲述:

        LOCALEWRKDIR=r"D:\Work\Python\FluxAPI\TestProject"
        NUMERICAL_MEMORY_LABEL = "MEMSIZN3"
        LANGUAGE_LABEL="CAO_DEFLAN"

        arg1= _ct.c_char_p()
        herror = __FLUX_MP.FMP_arg(NUMERICAL_MEMORY_LABEL,"800000000",_ct.byref(arg1)) #配置Numerical Memory 为800000000字节
        arg2= _ct.c_char_p()
        herror = __FLUX_MP.FMP_arg(LANGUAGE_LABEL,"1",_ct.byref(arg2)) #配置语言为法语
        herror=__FLUX_MP.FMP_init("",0) #初始化
        serverUid= _ct.c_int()
        args=(_ct.c_char_p*2)(arg1,arg2) #含有2个字符串指针的数组,这个关键
        herror = __FLUX_MP.FMP_startLocaleServer("FLUX2D_LATEST",LOCALEWRKDIR,args,2,_ct.byref(serverUid))
        __FLUX_MP.FMP_stopServer(serverUid)

好了,今天就到这里
附上我写好的Python文件,里面用类包装了下




FluxServer.rar

1.42 KB, 下载次数: 73, 下载积分: 西莫币 -1

评分

参与人数 3西莫币 +45 收起 理由
wshf + 15 原创内容
y1949b + 15 精品文章
e=mc^2 + 15 我很赞同

查看全部评分

西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过

签到天数: 5 天

连续签到: 3 天

[LV.2]偶尔看看I

发表于 2014-12-31 16:16 | 显示全部楼层
版区内关于Python在flux中使用的资料非常少,这段时间想偷懒,学用Python,但是都没什么资料,希望楼主能把这个帖子坚持下去。
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2014-12-31 18:18 | 显示全部楼层
这个算是神贴了啊!希望继续下去!
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2014-12-31 19:30 | 显示全部楼层
好铁 。。。。。。。。。。。。。强顶
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

签到天数: 4 天

连续签到: 1 天

[LV.2]偶尔看看I

发表于 2014-12-31 20:31 | 显示全部楼层
高大上啊,,,,,,,
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2014-12-31 21:46 | 显示全部楼层
Python是FLUX的命令语言,能直接调用将给二次开发带来方便
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

签到天数: 31 天

连续签到: 16 天

[LV.5]常住居民I

发表于 2014-12-31 22:38 | 显示全部楼层
2014年最后的超强贴!!!
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2015-1-1 10:48 | 显示全部楼层
好东西,学习学习,谢谢楼主分享!
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2015-1-3 08:33 | 显示全部楼层
Thank u for the script
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2015-1-4 16:33 | 显示全部楼层
菜鸟路过    但是感觉好高大上的感觉
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|西莫电机圈 ( 浙ICP备10025899号-3 浙公网安备:33028202000436号

GMT+8, 2024-11-25 06:04 , Processed in 0.180186 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表