Petri网绘图和代码生成

时间:2011-02-09 14:32:21

标签: automation code-generation metaprogramming petri-net

是否有用于绘制Petri网并从中生成任何源代码的软件?源代码可以是任何已知的编程语言......

稍微不太理想的选项是在一些开放格式(如XML或任何其他数据语言)中输出仅具有基于文本的文件中的Petri网图形描述的文件。然后我可以自己编写代码生成器,但至少我想避免使用gui / graph开发部分;))

由于

3 个答案:

答案 0 :(得分:3)

检查PetriNetSim它是用Java开发的,你可以绘制和模拟简单/有色/定时的petrinets。它提供了一些例子。您可以在Java中扩展弧和节点约束。最后你可以看到生成的petri网的java类

您可以从github https://github.com/zamzam/PetriNetSim

获取源代码

答案 1 :(得分:2)

我会看CPN Tools。它们提供各种构造,分析,有色Petri网仿真,以及索赔代码生成功能。

答案 2 :(得分:2)

我在Ruby中开发y_petri。目前,YPetri可以处理可视化(YPetri::Net类具有#visualize方法,使用 Graphviz 来绘制网络),但不是您似乎想到的GUI编辑。仅供参考,首先,Petri网中的GUI编辑不像看起来那么重要。

使用的数据语言是Ruby本身(更准确地说,是用Ruby编写的内部DSL)。

Petri网的一个主要问题是,它们存在的种类太多了。 YPetri试图成为一个通用的Petri网框架,有1种位置(任意标记类型)和4种基本类型的转换(定时/永久x化学计量/非化学计量)。此外,还有第五种转换,赋值转换,用其函数的返回值替换目标位置的标记。我相信这可以用来描述任何动态系统,同时像我能够做到的那样简约。

Petri网弧被理解为转换和位置之间的关系(它们属于y_petri中的转换。我发现有一种方法来表达Petri网节点(位置/转换)之间的关系比只是弧形。为此,I use Ted Nelson's ZZ structure (ZigZag) basically as a replacement for a relational database

对于模拟(Petri网执行),一般混合Petri网没有比隐式Euler方法(我称之为伪Euler)更快的模拟方法。这是因为Petri网可用于实现图灵机,对此无法进行通用加速。

如果您愿意在Ruby中运行,那么您可以在y_petriy_nelson DSL代码中描述Petri网。我不提供转换为XML,因为我认为它不优于源DSL。可以编写这样的导出例程,但我鼓励您使用DSL。