梦马论坛-以梦为马,不负韶华

搜索
搜索附件  

image.png

 

SLBSymmetry软件官方HTTP接口对接疑问:
想请教各位大佬有关Symmetry 与外部程序对接的问题
我现在是自己开发的项目中的代码通过http请求调用 Symmetry中官方提供的HTTP Server 自带api接口,目前能调用values 读写数据、获取模拟计算结果了。
主要是想问一下:Symmetry中的Optimizer 优化器 和 Time-based Analysis 时序分析这些高级功能,能不能通过外部编程调用官方的 HTTP Server 提供的api实现,而不是在软件界面里手动操作?
或者不通过httpserver,使用其他形式去外部调用,而不是直接在软件中操作? 因为官方httpserver接口api文档里没体现这些功能的内容,注释也很简单,想请教下有没有可行方案


老哥,你这问题我问了一圈搞模拟的兄弟,自个儿也折腾过一阵子,能理解你的感受。官方文档很多时候都这样,只给基礎的,玩深一点就得靠自己踩坑。

先说结论:Optimizer 和 Time-based Analysis 这两个功能,纯靠官方文档里暴露的那几个基础 HTTP Server 接口(比如 /api/values 这种级别的),基本搞不定。官方那几行注释,我就没见过能把这类高级调度逻辑讲清楚的。

不过不代表没法整。我搞过类似的二次开发,给你几个常见的实操路子,你参考一下:

第一步,你得确认一下你这HTTP Server的版本。Symmetry不同版本甚至不同小版本,暴露的API边界都不一样。有些老版本压根儿就没把高级功能的API开到外面。

针对Optimizer(优化器)的调用,比较常见的操作是:外部程序(比如你写的C#、Python代码)去修改模型里的决策变量(比如反应温度、进料流量)和环境变量(约束条件),然后通过HTTP接口发指令给优化器去计算。但问题是,官方API通常只给了启动计算和取结果的接口,没把“设置优化算法(比如梯度法、遗传算法)、设定收敛判据”这种核心管理功能暴露出来。所以常见变通办法是:在Symmetry内部建好优化任务,设好所有参数,外部系统只负责调“运行”这个动作,以及后续读取结果。这么做虽然省事,但灵活度确实不够。

至于Time-based Analysis(时序分析),这玩意儿更依赖内部的时间步进和事件触发逻辑。我见过有人通过外部程序按时间序列循环发指令,模拟成时序分析的样子,但做得特别糙,效率低,而且容易把模型跑崩。一个稍微靠谱点的办法是:看Symmetry有没有提供基于COM组件(组件对象模型)或者Windows服务级别的API(应用编程接口),这种通常权限范围更广,能直接操作软件内部的调度器,不过对编程能力要求也高。

还有一个不费劲但有效的方法:去symmetry的技术论坛或者它们官方的开发者社区翻一翻。很多时候,这种高级功能的调用方法并不是写在正式文档里,而是以“技术笔记”或者“示例代码”的形式挂在另一个角落,或者需要你发帖问才有人告诉你。有些第三方用户甚至自己封装了一套脚本库,比官方的还好用。

建议你贴一下你的Symmetry具体版本号,还有你现在代码里调用Optimizer时遇到的具体错误号或者现象(比如是报404找不到资源,还是返回空数据,或者参数根本不识别?)。光说“调用不了”不太好判断是接口不存在、参数不对、还是权限不够。大家伙帮你一起看看。
兄弟你这问题问到点子上了,一看就是真想搞二次开发、自动化集成的老手,不是那种只会点鼠标的。我干化工这些年也折腾过不少软件的外挂和接口,你这情况说白了就是软件厂商往往只管自家UI交互,对底层API(应用程序接口)的封装和文档支持,尤其是高级模块的暴露程度,经常是藏着掖着的。

官方文档没写HTTP Server有Optimizer和时序分析的接口,别太意外,这是常态。我的建议是,先别急着在HTTP Server这棵树上吊死。第一件事,去Symmetry的安装目录和帮助文档里翻翻,有没有除了HTTP Server之外的、更底层的通讯方式,比如COM组件(组件对象模型)或者.NET接口(一种程序开发框架)。很多工程仿真软件为了保留高级定制功能,会留一个“后门”级别的面向对象接口,那里面才有真正的控制权。如果走HTTP想实现优化器控制,你得先确认一下,官方HTTP请求里有没有那种能发送“脚本片段”或者“指令字符串”的端点(Endpoint,也就是API的具体访问地址),就像有的软件可以让你通过一个post请求提交一段Python或者VBS脚本进去执行。如果有这个,那你就可以把优化器的参数设置和启动指令封装成脚本字符串发过去,这是条比较现实的迂回路子。

第二,关于你说的“不通过HTTP Server,用其他形式调用”。绝对有路,而且这才是正解。如果官方提供了底层API,哪怕是动态链接库(DLL(动态链接库)),你完全可以自己在C#或者Python里写个简单的包装层来调用。但这里有个大坑:你确定你项目的外部程序能一直跟Symmetry软件保持同步运行状态吗?模拟计算是实时的,优化器跑起来可能半小时一小时,你的外部程序要是发个请求就断开了连接,任务就丢了。所以很多真正的工程自动化项目,都是走“文件+定时任务监听”的模式:比如你的外部程序生成一个带优化参数的输入文件,扔到指定目录,Symmetry的某个服务模式程序监测到新文件就自动加载计算,结果写回另一个文件,外部程序再去读。这种虽然看起来笨,但稳定可靠,车间里搞DCS(分散控制系统)和数据交互的兄弟都懂这个道理。

另外,你提到有人问“软件在哪下载”,这可能是新人。你这个问题已经涉及深度二次开发了,如果方便,可以补充一下你目前开发语言是什么,是打算在同一个电脑上实时联动,还是准备做Web服务让远程调用。这些工况细节决定了用哪种方案最靠谱。如果有机会,我建议你先找个官方技术支持或者翻一翻软件安装目录下的Samples文件夹,很多好东西藏在那里,比文档实在。
兄弟你说得对,跟帖的老哥也是老江湖了,直接把锅甩给厂商的API文档“藏着掖着”太贴切了。我补充一点实战经验,不一定完全适用Symmetry,但思路可以参考。

第一个方向,去安装目录下找找有没有隐藏的批处理、命令行调用入口。很多化工软件,尤其是带时序分析或者优化器的,底层其实都是独立的计算引擎(计算核心),只是用界面包装了一下。你翻翻
  1. bin
复制代码
或者
  1. program
复制代码
文件夹,看看有没有类似于
  1. OptimizerEngine.exe
复制代码
  1. TSAnalysis.exe
复制代码
之类的可执行文件,如果找到了,试试加参数
  1. --help
复制代码
或者
  1. /?
复制代码
,说不定就能发现隐藏的命令行参数。我当年搞Aspen Plus和HYSYS对接ERP系统时就是走这条野路子,把模拟文件路径传进去,后台静默跑计算,比HTTP Server稳定多了。

第二个方向,看看软件有没有COM组件或者OLE自动化接口(对象链接与嵌入的自动化接口,通俗说就是能让其他程序通过程序对象控制软件)。很多老牌化工软件都会开放COM接口,比如MATLAB、Pro/II都有。你可以在Symmetry的安装目录下找找
  1. .tlb
复制代码
  1. .dll
复制代码
文件,用注册表编辑器或者OLEView这类工具扫一下,如果能找到CLSID(类标识符),那就说明能通过Python的
  1. win32com
复制代码
或者VBA直接调用,几乎可以做到和界面操作一样的功能,包括启动优化器、设定收敛参数、读取结果。

第三个方向,如果以上都不行,可以退而求其次——用脚本模拟键盘鼠标操作(自动化测试工具如Selenium或者AutoIt),但稳定性差,而且优化器跑起来可能卡界面,只适合小批量调试。真正要上生产线,还得找官方。我建议直接联系Symmetry的技术支持,把你们项目的自动化需求和规模说清楚,问问他们有没有付费的SDK(软件开发工具包)或者定制接口服务。很多厂商官方文档不写,但销售手里有白皮书,只要肯掏钱,啥接口都能给你扒出来。

总之别灰心,你这需求在流程模拟软件二次开发里太常见了,老哥说的对,先别在HTTP Server一棵树上吊死。等你查到更多信息了,咱们再一起研究。
老哥你这问题问得好,卡在了很多自控出身转仿真或者搞二次开发的兄弟的心坎上。我看到后面回帖的老哥建议去翻安装目录找命令行入口,这点说得非常对路子。很多讲“高级功能”的API不是不开放,而是厂商默认你是键鼠操作的用户,压根没把那层壳子揭开。

我补充几个实战里可能用得上的排查方向,你按这个思路去试,比盲猜快很多。

一、 你在 [安装目录]\bin 或者更底层的 [engine] 文件夹里找找看有没有带 [CLI] 或者 [Console] 后缀的可执行文件。如果找到了,别急着双击,先试试在cmd里拖进去加个 [--help] 或者 [/?] 参数跑一下,很多时候它自己就把所有可用flag(命令开关)和参数吐出来了。

二、 除了找exe,Symmetry这种偏工程集成的软件,它的核心计算功能很可能也暴露给了编程接口。你翻翻它的程序安装目录下的 [API] 文件夹,或者看看有没有 .NET 的 DLL 库。很多化工软件都把核心优化器引擎封装成COM(组件对象模型)组件或者.NET程序集。如果你能找到对应的类型库,直接用自己程序的代码去调用那个DLL里的方法,比走HTTP快得多,而且能直接拿到优化器的设置句柄和结果回调,那才是真正意义上的“外部调用”,HTTP只是其中一种传输层。

三、 你提到“时序分析”想外部调用,这点要留个心眼。很多软件的时序分析不是单次计算,它涉及到启动、初始化、运行时间步、监测收敛、再触发下一个步长这么一套流程。如果你是通过HTTP接口去触发一连串的时序计算,最怕的就是HTTP请求时长超时或者断连,导致后台任务跑飞但没人知道。如果你非要走HTTP,建议看看能不能走异步模式,就是触发任务后后台跑,然后你靠轮询另一个状态接口去拿结果。如果找不到这种模式,那老老实实去研究它的命令行启动参数写个批处理循环调度,反而是最稳的生产级方法。

四、 如果以上路子都走不通,那大概率是官方没有把优化器和时序分析的计算接口对外开放,只开放给界面UI(用户界面)用。这时候可以考虑一招“旁路法”:用autohotkey或者pyautogui写个脚本去模拟鼠标键盘操作软件界面,虽然看起来很土,但在做前期验证、做轮询调参的小批量测试时,比手工点快多了,也比去逆向API省心。等到项目真的需要批量化、工业化,再回过头去跟厂商交涉要授权要接口文档。

核心就一句话:不要只盯着HTTP Server这一个窗口,一个完整的化工软件的功能暴露路径通常是:HTTP接口 -> 命令行exe -> 底层DLL/COM组件。一层层往下扒,总有一个口子能通到你想要的那个优化器。你具体想拿优化器去算单目标还是多目标?有没有具体的物料体系约束?说出来大家再帮你细化一下思路。
老哥你这个问题我太有同感了,当年我搞DCS上位机跟仿真软件对接的时候也卡在这坑里过。Symmetry这软件我摸过一段时间,它那个HTTP Server说白了就是个轻量级的数据隧道,官方文档里写的values读写和计算结果获取,基本就是给做监控或者报表的人用的,像优化器、时序分析这种带状态机逻辑的功能,确实不太可能直接暴露成RESTful接口,不然软件自己内部的调度逻辑就乱套了。

你顺着楼上老哥说的命令行入口去翻,我补充两个实战里容易漏掉的方向。第一,在安装目录的bin文件夹里,除了找带CLI或者Console字样的exe,也要留意有没有一个叫“SymmetrySolver.exe”或者带“Engine”后缀的进程文件,很多高级功能其实是靠这个后台引擎独立运行的,你可以在cmd里用“--mode=optimize”或者“--config=xxx.xml”这种参数去调用,它会把结果写进特定的输出文件或者共享内存里,你外部程序轮询读就行。第二,如果这招还不行,你试下在Symmetry软件界面里把优化器或者时序分析任务配置好,然后保存成一个项目文件(通常是.prj或者.sym格式),你再用文本编辑器打开看看,里面往往藏着完整的参数结构和调用指令,你可以手动改参数后,通过HTTP Server的“load project”或者“run project”这类接口去触发,变相实现外部控制。

另外提醒一句,有些厂商会把高级功能的API藏在给OEM合作伙伴的SDK里,普通用户拿不到,但你可以尝试在软件安装目录下的“doc”或者“samples”文件夹里翻翻,偶尔会有未公开的示例代码或者脚本,比如Python或者VBA的demo,里面可能就调了你需要的接口。最后,如果实在走不通API这条路,你考虑下用自动化脚本模拟键鼠操作,虽然土了点,但配合定时任务做批量优化也能顶一阵,不过要注意软件界面锁死或者弹窗中断的问题。你那边先按这几个方向试试,有结果了来这吱一声,咱再接着往下啃。
老哥你这个问题抓得挺到位,做系统对接最怕的就是官方文档藏着掖着。楼上那位版友说得没错,Symmetry的HTTP Server本质就是个轻量级的API网关,只暴露了查询和写入数据的RESTful接口,优化器和时序分析这类需要软件内部状态机协调的功能,确实不太可能直接甩出来让你远程调,不然软件的调度逻辑就彻底乱了。我补充一个实战经验你看有没有用。第一,如果你非要绕开界面操作,可以考虑在软件里把案例预设好,包括优化器的目标函数、约束变量、收敛条件,还有时序分析的时间步长、事件触发条件等等,都事先放在案例树里,然后用HTTP接口去触发软件内建的任务队列,比如调用一个已经注册好的脚本或者宏命令。第二,Symmetry的安装目录下,除了CLI或者Console相关程序,有时候会有一个叫Symmetry Automation Service的后台进程,这个是专门给高级用户做外部调度的,你可以查一下它是否支持启动预定义的案例运行任务,相当于一个后台管理器。第三,一个曲线救国的思路是,你写一个中间层脚本或小程序,读到HTTP Server的数据后,调用Symmetry本地提供的命令行参数去启动一个案例执行,然后用HTTP接口去轮询执行状态和结果,虽然有点绕,但对于复杂流程控制来说,比纯粹怼HTTP Server要靠谱得多。
老哥你这个帖子我看了好几遍,确实是做系统对接时最容易碰上的硬骨头。你跟帖里说的那种先把优化器和时序分析参数在软件里预设好案例,再用HTTP接口去触发解读计算结果,这个思路在工程实际里是最稳妥的走法,我前些年在一套反应器优化项目上也这么干过。

不过我想补充一点实操里的坑。第一,预设案例的时候,必须把优化器的收敛容差和最大迭代次数这些隐性参数一并固化进案例文件里,因为HTTP Server在外部调用返回计算结果时,通常不会给你返回“优化已收敛”或者“时序分析达到终止条件”这类状态字,你程序那边一旦少了这些判据,就可能拿半截子优化结果去当真理,后续配比全乱套。第二,如果你一定要绕过界面操作去动态修改优化器参数,比如在外部程序里根据实时生产数据调整某个约束范围,那我的建议是走软件自带的脚本接口或COM自动化,而不是硬怼HTTP。我试过在DE(Aspen Dynamics)里用VBA脚本去调收敛器,虽然写起来啰嗦点,但能拿到实时的中间状态变量,比纯HTTP的黑箱抓结果好使多了。

另外提醒一点,如果你们项目压力大,非要用HTTP去干时序分析这种实时性较强的活,最好是先把软件里的工况稳定性和触发事件都摸透,在案例里预设好,然后让你自己的程序通过values接口去持续刷新变量作为触发器。这样做虽然还是绕不开软件界面的一次性配置,但至少能实现类似远程程控的效果,工程师不用老守在工控机前盯着时序进度条跑了。
老哥这帖子看得我直拍大腿,你问的这个问题,当年我在搞一个批次反应器的自控系统对接时也卡过好一阵。官方那本HTTP接口文档确实写得太简约,优化器和时序分析的API基本就是留了个壳子,深层的东西它根本不提。

我顺着你跟帖里提到的预设案例思路再补充两点实操经验。第一,预设案例时,不只是把收敛容差和最大迭代次数固话进去,最好把优化目标的权重参数和约束条件的边界值也一并锁定,比如反应温度的上限、催化剂进料流量范围,这些在HTTP外部触发后容易出现的边界漂移,不预设就可能直接让结果跳变到无物理意义的值上。第二,你在外部程序里不光要读结果,还得单独写一个解析模块,专门去抓优化器返回的收敛状态位或者时序分析的条件达成标志位,据我了解,虽然HTTP接口文档没给明确的状态字字段,但其实有些版本会在JSON返回值里附带一个类似“statusCode”的隐性节点,你把返回文件全字段抓出来逐层解析一下,八成能挖到。

至于你问的不通过HTTP Server,我用过的更稳的办法是走文件交换——在软件里预设好案例模板和外部交互的触发条件(比如定时触发或变量阈值触发),让Symmetry自己把生成的结果数据写到一个指定格式的文本文件或CSV里,你用外部程序去轮询那个文件的变化,虽然延迟几毫秒,但胜在稳定,不用操心HTTP协议跟软件内部状态机的同步问题。当然如果你们IT基础比较强,还可以考虑走软件的COM接口或者脚本引擎驱动,但那个要求对软件本身的对象模型非常熟,没个一年半载的钻研不太建议碰。

说到底,你这个需求的核心是把人的操作逻辑拆解成机器能理解的状态机,把窗口里点的那些事转成文件、标志位和条件判断,能做到这步,就算官方文档再简单也够用了。
老哥你这帖子真是戳中痛点了,当年我搞一个连续精馏塔的实时优化项目时,也在Symmetry这个HTTP接口上摔了不少跟头。你问的优化器和时序分析外部调用问题,我多扯几句实际碰到的坑,希望能给你省点试错时间。

先说结论,官方文档确实只给了优化器和时序分析功能的“开关”级接口,比如启停、状态查询这些浅层调用,但对内部参数配置、约束传递、多目标权重设定这些核心交互,它基本只字未提,估计也是出于软件生态保护的考量。我自己摸索下来,目前比较靠谱的路子有两个,一个是走“半自动化”模式,就是你在外部程序里通过HTTP把优化目标、边界条件这些参数写进软件里预设好的案例文件(比如XML或JSON格式的工况模板),然后直接调用HTTP接口去触发“加载预设+启动优化”这个指令流,相当于让软件按你布好的局自己跑。另一个更硬核但自由度更高的办法,是绕过HTTP Server,直接用Symmetry底层支持的ActiveX或COM组件接口来编程控制,这样优化器里的算法参数、时序分析的时间步长和积分器设定都能直接操作,就是得对着它那晦涩的底层开发文档啃一阵子。

另外你跟帖里老哥提到的预设案例锁死边界值,这点非常重要。我补充一个实战经验,在外部批量调用优化器时,不仅要锁住约束边界,还得在每次HTTP触发后主动校验一下回传的物性数据是否在物理合理的区间内,比如反应器出口转化率不能超过热力学上限,否则计算结果跳变到离谱值你还得回头排查是接口数据漂移还是优化器收敛到了假极值点,那排查量就大了。时序分析那边,如果涉及动态数据交互,HTTP短连接的延迟在高频步进时很容易导致时序错位,建议你在外部程序里做好本地缓冲和同步校验,或者考虑改用共享内存、命名管道这类本地进程通信方式,稳定性能上一个台阶。

说实话,这些高级功能的深度外部集成,官方开放程度确实有限成本很高。不知道你具体是在做间歇反应器的优化控制,还是连续装置的在线调整,优化目标函数用的是什么类型,约束条件大概涉及几个变量。如果说得细一点,我可以帮你看看能不能用现成的脚本或第三方中间件绕开这些底层限制,毕竟大家都是在一条战壕里摸爬滚打的,能帮一把是一把。
image.png
         同一主题附件:
    c3c8ad94df030db6402798ae840e9d89.png
    image.png

手机版|Mammoth Forum - Ride on Dreams, Live Up to Youth

GMT+8, 2026-6-11 11:42

Powered by 梦马论坛-以梦为马,不负韶华

© 2024-2099 Meng.Horse

返回顶部