{"id":13407754,"url":"https://github.com/CaSkade-Automation/CaSkade-MES","last_synced_at":"2025-03-14T12:31:33.009Z","repository":{"id":40244959,"uuid":"433391063","full_name":"CaSkade-Automation/CaSkade-MES","owner":"CaSkade-Automation","description":"SkillMEx is a novel manufacturing execution system (MES) based on semantically modelled skills of machines. SkillMEx uses a knowledge graph to manage skills and execute them. BPMN is used to model and execute complex production processes.","archived":false,"fork":false,"pushed_at":"2023-07-14T13:41:22.000Z","size":7315,"stargazers_count":16,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-05-20T03:13:42.496Z","etag":null,"topics":["angular","automation","bpmn","machine-skills","nest-js","ontology","owl","production","skills"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CaSkade-Automation.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2021-11-30T10:40:56.000Z","updated_at":"2024-05-18T13:30:16.000Z","dependencies_parsed_at":"2024-04-22T10:13:29.574Z","dependency_job_id":"6ce1da56-1544-41cc-b25a-02b26964d76d","html_url":"https://github.com/CaSkade-Automation/CaSkade-MES","commit_stats":null,"previous_names":["caskade-automation/caskade-mes"],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CaSkade-Automation%2FCaSkade-MES","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CaSkade-Automation%2FCaSkade-MES/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CaSkade-Automation%2FCaSkade-MES/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CaSkade-Automation%2FCaSkade-MES/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CaSkade-Automation","download_url":"https://codeload.github.com/CaSkade-Automation/CaSkade-MES/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221467894,"owners_count":16827240,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","automation","bpmn","machine-skills","nest-js","ontology","owl","production","skills"],"created_at":"2024-07-30T20:00:48.422Z","updated_at":"2024-10-25T22:30:47.554Z","avatar_url":"https://github.com/CaSkade-Automation.png","language":"TypeScript","funding_links":[],"categories":["Software Tools \u0026 Demos"],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eSkillMEx - Skill-Based Manufacturing Execution\u003c/h1\u003e\n\u003cdiv align=\"center\"\u003e\n    \u003cimg width=\"400px\" src=\"https://github.com/aljoshakoecher/SkillMEx/blob/documentation/images/documentation/images/SkillUp_logo.png?raw=true\"\u003e\n\u003c/div\u003e\n\u003chr\u003e\n\n# Table of Contents\n1. [Introduction](https://github.com/aljoshakoecher/SkillMEx#Introduction)\n2. [Setup \u0026 Install](https://github.com/aljoshakoecher/SkillMEx#setup--install)\n3. [Using SkillMEx](https://github.com/aljoshakoecher/SkillMEx#using-skillmex)\n4. [Additional Tools](https://github.com/aljoshakoecher/SkillMEx#additional-tools)\n5. [API Documentation](https://github.com/aljoshakoecher/SkillMEx#api-documentation)\n6. [Further Reading](https://github.com/aljoshakoecher/SkillMEx#further-reading)\n\u003chr\u003e\n\n# Introduction\nSkillMEx is a manufacturing execution platform that works with manufacturing modules that have a semantic description of their functions in the form of *capabilities* and *skills*. It's powered by this [capability and skill ontology](https://github.com/aljoshakoecher/machine-skill-model).\n\n*Ontologies? Capabilities? Skills? What?*\n\nOntologies are a way to create semantic models and to express terms and relations between these terms in a formal and machine-interpretable way. Ontologies allow sophisticated means to interact with information such as complex querying, checking model consistency, infer new information from existing information and apply rules.\nWe have created a model in the form of an ontology that can be used to model manufacturing modules and the functionalities provided by these modules. This description can roughly be divided into three aspects:\n1. **Machine structure**: Our model allows to represent information about the structure of machines and their components\n2. **Capabilities**: Capabilities represent the processes that a module can perform. Any arbitrary process may be modeled as a capability. Manufacturing processes can be specified using the industry standards DIN 8580 and VDI 2860. What's important to note is that capabilities don't have to be automatically executable. Manual processes can also be expressed as capabilities. Capabilities provide a means to express required functions as well as the potential functions that are provided by existing modules.\n3. **Skills**: Every capability that is automatically executable needs to have a description of how to invoke and interact with this capability. This is the skill aspect of our model. Skills describe interaction mechanisms that are provided by a module in order to automatically use its functionalities.\n\n\n# Setup \u0026 Install\n\n## Development setup\n\n### Requirements\n\n**Node.js**\n\nSkillMEx is built with NestJS \u0026 Angular which both rely on Node.js being installed. Make sure to download and install an LTS version of Node. Node.js \u003e v14 is recommended.\n\n**GraphDB**\n\nSkillMEx uses ontologies and stores them in a triple store. We currently work with GraphDB. Make sure to download GraphDB from https://www.ontotext.com/products/graphdb/graphdb-free/ and start it. You then need to create a repository that SkillMEx can use. The connection to a repository can be managed in SkillMEx.\nBy default, SkillMEx currently expects a repository with ID \"test-repo\" to exist. This can be changed at runtime but you may run into troubles if you don't have a repository with this name in your GraphDB instance.\nIn case you cannot connect to your running GraphDB with SkillMEx, you may need to set appropriate CORS policy on GraphDB. This can be done by setting the parameter `graphdb.workbench.cors.enable` to `true` (either in the settings dialogue of the window opening on GraphDB startup or as a command line parameter, see [this SO thread](https://stackoverflow.com/questions/60137895/enable-cors-on-graphdb) for additional details).\n\n**Capability \u0026 Skill Ontology**\n\nAn \"empty\" GraphDB doesn't get you far. You have to import the data model for machines, their capabilities and skills that SkillMEx requires. This data model is implemented in an OWL ontology and can be downloaded [here](https://github.com/aljoshakoecher/machine-skill-model). Make sure to take the *merged* version from the latest release.\nOnce you downloaded it, import it into your GraphDB repository. This is done by using `Import (left sidebar) -\u003e RDF` and then clicking on `Upload RDF files`. Select your file, upload it and - important - do not forget to click `Import` on the right once your file has been uploaded.\n\n\n### Starting SkillMEx\nAfter you have checked all the requirements, follow these steps to run SkillMEx in development mode:\n- Download or clone this repository\n- When starting SkillMEx for the first time, open shells inside both backend and frontend directory and in both directories, execute `npm install` in order to install all npm dependencies.\n- As soon as `npm install` is finished, both backend and frontend can be started. Note that these are separate stand-alone applications, so you need to execute `npm run start:dev` in both backend and frontend. \n- Both backend and frontend should now run in \"watch-mode\" where changes on either frontend or backend lead to an automatic restart of the server or the web application, respectively. This is quite convenient for development as you don't need to manually restart the server or refresh your browser's page.\n\n\n## Docker \u0026 other pre-built versions\n🚧 Currently not available, but on our to-do list 🚧\n\n\n# Using SkillMEx\nOnce you have it up and running, SkillMEx acts as a platform for (manufacturing) modules. Modules can be registered with their capabilities and skills and later deleted. Additional capabilities and skills can also be added later. Skills with different execution technologies can be executed through a unified interface. Skill processes can be modeled and executed using BPMN.\n\n\n**See some of SkillMEx' functions in these screenshots**\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003cimg src=\"https://github.com/aljoshakoecher/SkillMEx/blob/documentation/images/documentation/images/screenshots/dashboard.png?raw=true\" width=\"100%\" alt=\"Dashboard\"/\u003e\n    \u003c/td\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003cimg src=\"https://github.com/aljoshakoecher/SkillMEx/blob/documentation/images/documentation/images/screenshots/module-overview.png?raw=true\" width=\"100%\" alt=\"Module Overview\"/\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003eDashboard to see all active entities\u003c/td\u003e\n    \u003ctd\u003eOverview of modules and their skills\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003cimg src=\"https://github.com/aljoshakoecher/SkillMEx/blob/documentation/images/documentation/images/screenshots/register-modules.png?raw=true\" width=\"100%\" alt=\"Different ways to register modules\"/\u003e\n    \u003c/td\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003cimg src=\"https://github.com/aljoshakoecher/SkillMEx/blob/documentation/images/documentation/images/screenshots/graph-visu.png?raw=true\" width=\"100%\" alt=\"Graph Visualization\"/\u003e\n     \u003c/td\u003e\n   \u003c/tr\u003e\n   \u003ctr\u003e\n    \u003ctd\u003eDifferent ways to register modulese\u003c/td\u003e\n    \u003ctd\u003eIntuitive Graph Visualization\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003cimg src=\"https://github.com/aljoshakoecher/SkillMEx/blob/documentation/images/documentation/images/screenshots/model-processes.png?raw=true\" width=\"100%\" alt=\"my alt text\"/\u003e\n    \u003c/td\u003e\n    \u003ctd width=\"50%\"\u003e\n        \u003cimg src=\"https://github.com/aljoshakoecher/SkillMEx/blob/documentation/images/documentation/images/screenshots/deployed%20processes.png?raw=true\" width=\"100%\" alt=\"my alt text\"/\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n   \u003ctr\u003e\n    \u003ctd\u003eModel skills processes using BPMN\u003c/td\u003e\n    \u003ctd\u003eSee processes that have been deployed and are ready to be executed\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003cimg src=\"https://github.com/aljoshakoecher/SkillMEx/blob/documentation/images/documentation/images/screenshots/active-process-instances.png?raw=true\" width=\"100%\" alt=\"my alt text\"/\u003e\n    \u003c/td\u003e\n      \u003ctd width=\"50%\"\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n   \u003ctr\u003e\n    \u003ctd\u003eKeep on track with currently running process instances\u003c/td\u003e\n    \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n# Additional Tools\n## Automatically create and register skills from Java source code\nWe created [SkillUp](https://github.com/aljoshakoecher/skill-up) which takes away all the effort involved in creating a skill. If you do it \"manually\", there is a lot that needs to be done. You need to develop skills in a certain way (using a state machine). You need to provide an interface technology to invoke your skill's behavior (either OPC UA server or web server) and you need to create a rather large and complex ontology to describe all that.\nThe good news is: SkillUp automates it all for you and even registers yours modules and skills at SkillMEx. Checkout the [SkillUp Wiki](https://github.com/aljoshakoecher/skill-up/wiki) for an extended step-by-step documentation on how to get started.\n\n## Modelling and executing skill-processes using BPMN\nSingle skills can be executed from the module overview or skill management. But what if you want to model (and eventually execute) complete production processes? Of course, manually stepping through a process with multiple skills is not an option.\nInstead, SkillMEx uses BPMN to model and execute BPMN processes.\n\n**Modelling Processes**\n\nComplete production processes (including different task types, parallel / alternative flows, events) can be modelled using an integrated BPMN modeling tool based on [bpmn-js](https://github.com/bpmn-io/bpmn-js). We integrated a BPMN modeller into SkillMEX. Currently, the following task types are integrated:\n- Service tasks can be used for skill execution. Select one of your currently registered skills, pick the transition (most likely \"Start\") and set the parameters in case your skill has any\n- User Tasks can be used to assign a task to a person or a group, but currently, no real tasks (e.g. inputs to enter) can be modelled with SkillMEx. Nevertheless, user tasks can be useful to make the process stop in order to look into the current execution.\n- Mail send tasks can be used to automatically send mails. In case you want to use it. Make sure to setup the mail send functionality as described [here](https://github.com/camunda-community-hub/camunda-bpm-mail#how-to-configure-it). You need to have the required jars and the config file on the classpath of your Camunda BPMN engine (typically the server's lib folder) [see details here](https://github.com/camunda-community-hub/camunda-bpm-mail#for-shared-process-engine)\n- Outputs (e.g. of a skill execution) can be used as conditions on subsequent flows. The syntax is \"_variable_ _relation_ _value_\" where relation might be something like \"==\", \"\u003c=\" and so on. The variable might be an output of a previous activity. Variables are refered by their IDs which are created by concatenating an activityID and the output name like so: \"activityID_output-name\". Use ctrl + space inside a condition to get a very simple autocomplete suggesting you all the outputs of your model.\n\n\n**Executing Processes**\n  \nIn order to deploy processes and execute them, you need to have a BPMN engine. SkillMEx is currently bound to the open-source Camunda BPMN engine which can be downloaded [here](https://camunda.com/download/#download-other-menu). So far, we have only used the TomCat distribution. Download it and start it according to documentation (should be rather straightforward, you basically unzip it and start it using the \"start-camunda\" command).\nNaturally, Camunda doesn't know anything about skills and skill processes. In order to execute skill processes, you need to have an extension we developed which you can grab [here](https://github.com/aljoshakoecher/BPMN-Skill-Executor/releases). Take the jar from the latest release and drop it into your Camunda servers lib folder. Note: Don't drop it into the lib folder inside the root folder. It needs to be the lib folder under server/apache-tomcat\n    \n\n# API Documentation\nSkillMEx features a quite extensive REST API that can be used to retrieve all registered modules, skills, capabilities and to do other things like run queries. You can find the [documentation in the wiki](https://github.com/aljoshakoecher/SkillMEx/wiki/API-Documentation).\n\n# Further Reading\nWe present the concept of manufacturing based on semantically modelled capabilities and skills in various scientific publications which are shown in the following list. If you have any questions about these contributions, contact [Aljosha Köcher on ResearchGate](https://www.researchgate.net/profile/Aljosha-Koecher).\n* A. Köcher, C. Hildebrandt, B. Caesar, J. Bakakeu, J. Peschke, A. Scholz, A. Fay: *Automating the Development of Machine Skills and their Semantic Description.* In: 2020 25th IEEE International Conference on Emerging Technologies and Factory Automation (ETFA): IEEE, S. 1013–1018, 9/8/2020 - 9/11/2020. \n* A. Köcher, C. Hildebrandt, L.M. Vieira da Silva, A. Fay: *A Formal Capability and Skill Model for Use in Plug and Produce Scenarios.* In: 2020 25th IEEE International Conference on Emerging Technologies and Factory Automation (ETFA): IEEE, S. 1663–1670, 9/8/2020 - 9/11/2020.\n* A. Köcher, L.M.V. da Silva, A. Fay: *Constraint Checking of Skills using SHACL.* In: 2021 IEEE 19th International Conference on Industrial Informatics (INDIN): IEEE, S. 1–6, 7/21/2021 - 7/23/2021.\n* A. Köcher, T. Jeleniewski, A. Fay: *A Method to Automatically Generate Semantic Skill Models from PLC Code.* In: IECON 2021 – 47th Annual Conference of the IEEE Industrial Electronics Society: IEEE 2021.\n* A. Köcher, L.M. Vieira da Silva, A. Fay: *Modeling and Executing Production Processes with Capabilities and Skills using Ontologies and BPMN*. In: 2022 27th IEEE International Conference on Emerging Technologies and Factory Automation (ETFA): IEEE, 2022.\n* A. Köcher, L. Beers, A. Fay: *A Mapping Approach to Convert MTPs into a Capability and Skill Ontology*. In: 2022 IEEE 27th International Conference on Emerging Technologies and Factory Automation (ETFA): IEEE, 2022.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCaSkade-Automation%2FCaSkade-MES","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FCaSkade-Automation%2FCaSkade-MES","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCaSkade-Automation%2FCaSkade-MES/lists"}