AI prompts
base on Free and Open-source warehouse/manufacturing development framework and simulator # OpenIndustryProject
Free and Open-source warehouse/manufacturing development framework and simulator made with [open62541](https://github.com/open62541/open62541), [libplctag](https://github.com/libplctag/libplctag), and [Godot](https://github.com/godotengine).
The goal is to provide an open framework to create software and simulations using industrial equipment/devices and for people to be able to test their ideas or simply educate themselves while using standard industrial platforms.
Scroll down to the **Getting Started** section for information on how to work with this project.
Join our discord group: [Open Industry Project](https://discord.gg/ACRPr6sBpH)
Supported Communication Protocols:
- OPC UA via open62541
- Ethernet/IP via libplctag
- Modbus TCP via libplctag
## Demo
https://github.com/Open-Industry-Project/Open-Industry-Project/assets/105675984/e78c3b0a-bb8e-411a-aa17-b2b6534868a4
## Out of the Box Features
Customizable Equipment
https://github.com/user-attachments/assets/0d3ae08d-e80a-4495-8059-7056c406584f
https://github.com/user-attachments/assets/00a2b3e6-03c3-45a1-b917-d71f6fdef13a
Dynamic Devices
https://github.com/Open-Industry-Project/Open-Industry-Project/assets/105675984/1e74dc9c-0613-43cf-a864-8fc78a2785ca
## Getting Started
It is recommended to download the latest package here: https://github.com/Open-Industry-Project/Open-Industry-Project/releases
It comes with a fork that contains functions and features that are not avaliable in regular Godot.
The contents of this repo are parts of a regular Godot project. You can open this project via the project manager, just like any other Godot project.
Use the Project Manager to create a new project.

All objects used in a simulation scene will be in the Parts tab.

A simulation can be created by adding a new scene, and selecting "New Simulation".


This creates a new scene with the top node labelled "Simulation":

Parts can be dragged into the viewport to instantiate it. Once they're in the scene they can be modified.
https://github.com/Open-Industry-Project/Open-Industry-Project/assets/105675984/fc3dca44-ceab-4ecf-8c7d-cd5754fce558
Most parts have properties that can be setup to communicate to a PLC or OPC Server (see [communications below](#communications)). In this example Ignition was used as an OPC server to write to the conveyor tag.
https://github.com/user-attachments/assets/6d72a15b-b1ff-4402-b7d5-1f1a3fbeb085
## Communications
Configure the communication to PLCs or an OPC UA server via the "Comms" panel on the bottom of the editor:

The simulator will not communicate with any device until the "Enable Comms" checkbox is checked.
Tag Groups are a logical way to organize sets of tags. Each Tag Group is associated with one PLC or or one OPC UA client. When connecting to multiple PLCs or OPC UA endpoints, create a separate tag group for each one.
The "Polling Rate" indicates how often OIPComms will read all the tags which are a part of that tag group. The simulation does not read directly from the devices, it reads from a thread-safe data buffer that holds the value retained from the last poll. Writing values from the simualtion occurs as soon as possible, and is also thread-safe.
In the event that a write operation is queued by the simulation and a poll is half-way through completing (for example 100 out of 200 tags in the group have been read), the write operation will not complete until the poll completes.
The "Gateway" is the IP address of the target controller, and the path is the typically the rack/slot location of the PLC. The "CPU" dropdown contains the following options:

Selecting the Protocol dropdown provides three options:
- `ab_eip` - Ethernet/IP communication via the libplctag library
- `modbus_tcp` - Modbus TCP communication via the libplctag library
- `opc_ua` - OPC UA communication via the open62541 library
When changing the Protocol to `opc_ua`, the options change to reflect the connection parameters for an OPC UA endpoint:

The "Endpoint" is the OPC UA protocol address which includes the IP address and port of the server. The "Namespace" is typically 1 unless otherwise specified by the OPC UA server.
Devices typically have these settings: Enable Comms, Tag Group and Tag Name (Diffuse Sensor shown).

The communication API ([OIPComms](https://github.com/Open-Industry-Project/oip-comms)) is contained within a separate GDextension plugin. Instructions to build and update it are located in its own repository.
## Importing Models
Although this project has a few models, you maybe interested in adding more.
This is a good resource for free industrial parts CAD models: [3dfindit](https://www.3dfindit.com/en/)
It is recommened to export the files in their native format (usually STEP), modify them if needed for usage in Godot in any CAD software and then export as FBX for additional work in Blender, or to be imported straight into Godot.
Alternatively most manufacturers provide the CAD files directly on their own website.
## Help Wanted
- More equipment and devices
- Better exception handling
- Review code
- Documentation
- Training videos?
", Assign "at most 3 tags" to the expected json: {"id":"11665","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"