Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hsluoyz/cpetrinet
A C/C++ PetriNet simulator (aka non-UI CPN Tools)
https://github.com/hsluoyz/cpetrinet
cpn cpn-tools petrinet
Last synced: 4 days ago
JSON representation
A C/C++ PetriNet simulator (aka non-UI CPN Tools)
- Host: GitHub
- URL: https://github.com/hsluoyz/cpetrinet
- Owner: hsluoyz
- License: mit
- Created: 2017-03-23T14:56:09.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2017-03-24T04:01:41.000Z (almost 8 years ago)
- Last Synced: 2024-12-03T15:49:49.138Z (20 days ago)
- Topics: cpn, cpn-tools, petrinet
- Language: C++
- Size: 18.6 KB
- Stars: 9
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# CPetriNet
[![Release](https://img.shields.io/github/release/hsluoyz/cpetrinet.svg)](https://github.com/hsluoyz/cpetrinet/releases)
![License](https://img.shields.io/github/license/hsluoyz/cpetrinet.svg)
![Downloads](https://img.shields.io/github/downloads/hsluoyz/cpetrinet/latest/total.svg)
![TotalDownloads](https://img.shields.io/github/downloads/hsluoyz/cpetrinet/total.svg)CPetriNet is PetriNet simulator written in C/C++ on Windows. It simulates the processing of [CPN Tools](http://cpntools.org/). CPN Tools is a very useful but GUI tool. So we can't do large-scale experiments because it doesn't provide an API. CPetriNet doesn't rely on but simulates all elements about CPN Tools.
# Build
Build ``CPNetTest.dsw`` with **Visual Studio 6.0**. Welcome PR to migrate it to a modern Visual Studio version.
# Releases
https://github.com/hsluoyz/CPetriNet/releases
# An example
```C++
CCPNet *cpnet = new CCPNet(); \\ 表示一个colored petri网
cpnet->addPlace("P1", "int", CValue("int", 1, "int", 10)); \\ 添加名为P1的处所, 第二个参数为Place Type,第三个参数是初值。
cpnet->addPlace("P2", "int");
cpnet->addPlace("P3", "int");cpnet->addTransition("T1_2"); \\ 添加名为T1_2的变迁
cpnet->transitionAddFromPlaceAndValue("T1_2", "P1", CValue("int", 1, "int", 10)); \\ 添加由P1连接到T1_2的弧,第三个参数是弧的expr
cpnet->transitionAddToPlaceAndValue("T1_2", "P2", CValue("int", 1, "int", 10));cpnet->addTransition("T2_3");
cpnet->transitionAddFromPlaceAndValue("T2_3", "P2", CValue("int", 1, "int", 10));
cpnet->transitionAddToPlaceAndValue("T2_3", "P3", CValue("int", 1, "int", 10));cpnet->initAllTransitions(); \\ 创建工作完毕后,初始化所有的变迁,做一次就行了
cpnet->fireToEnd(); \\ 触发变迁,直到终止,如果图本身停不了的话,程序也就停不了了cout << cpnet->places2String(); \\ 在控制台显示所有处所中的token情况
```# In Chinese
相信CPN Tools大家都用过,此API就是CPN Tools在C++上的实现,可以代码级别地进行声明和设置mark,可以单步执行,执行到终点。我没有设置固定的输出格式。但是信息都在类里封装好了,想读取也非常容易。
这个API的特点是:
1. 没有界面,全部用代码实现输入输出,可以做出规模很大的实验或工程应用。
2. 保持与CPN Tools的一致性,目前CPN Tools可以说是做着色Petri网设计与仿真的最佳工具了,会用CPN Tools的童鞋相信可以很快上手,可以大大节约学习成本。
3. 用C++实现,在VC6上开发与测试通过,相信在VS7,8,9,10上也可以顺利运行。比Java出身的CPN Tools速度不知快了多少倍。
4. 开源,方便大家增加一些其它功能,如n步执行,分析功能等等。目前的一些不足:
1. 虽然目前并没有GUI编辑显示的功能,但是有对于处所已经写好了toString函数,相信调试不会太难。
2. 错误处理做的很简单,有些地方如colorset甚至没有类型检查,也是考虑到效率的问题。大家最好确保声明和mark写对,如果控制台显示xxx Error.或者直接崩了的话,应该就是有的输入没写对的原因。API写的很仓促,如果大家发现是API本身的bug,请及时反馈给我。
源代码直接提供了我开发时用的VC6的工程,除了CPNetTest.cpp是测试文件,其它都是源代码,熟悉VC的相信一看就知道。测试文件里写了5个例子,通过不同的函数来切换。其中4个比较大的例子是直接照着CPN Tools里的模型写的,.cpn模型我就不传了,如果有需要再告诉我把。