Starting with WinCC OA Version 3.20, you can write your business logic in JavaScript and run them using Node.js, providing direct access to the WinCC OA Runtime.
🙈 With that, I have developed a Kotlin program that acts as an MQTT Broker. When you subscribe to a topic (where the topic name matches a datapoint name), the program will send value changes from the corresponding WinCC OA datapoint to your MQTT client.
❓ But wait, Kotlin is like Java, it runs on the JVM, it is not JavaScript!
💡 Did you know that a Node.js Runtime built with GraalVM exists? It allows you to mix Java and JavaScript. And it also works with WinCC OA.
🤩 You can use JVM based languages and its huge ecosystem to develop business logic with WinCC OA. I have developed a Java library which makes it easier to use the WinCC OA JavaScript functions in Java.
👉 Here it is: https://github.com/vogler75/winccoa-graalvm please note that the example program is provided as an example; it lacks security features and has not been tested for production use. However, it can be extended and customized to meet specific requirements.
⚡ Please be aware that the GraalVM Node.js Runtime is not officially supported by WinCC Open Architecture.
Tag Archives: scada
WinCC Open Architecture Custom UNS Publisher
I’ve created a quick video demonstrating how simple it is to publish data from WinCC Open Architecture in a customized way to a UNS/MQTT broker.
💡 With the new WinCC OA JavaScript Manager, it takes less than 60 lines of code!
👉 You will find the example code here: https://lnkd.in/dwRRkmNH
There is nothing more to say, because it’s so easy… boring 🥱
Embed Grafana in WinCC Unified
In this scenario we will host Grafana over the IIS from WinCC Unified. So that it comes from the same origin and that we do not come over a CORS (Cross-Origin Request Blocked) problem.
What is needed to allow Grafana to be embedded in another application is to set allow_embedding = true in the Grafana configuration file.
To host Grafana over the IIS the following settings must be made:
Add a URL Rewrite to your IIS configuration file. Change “desktop-khlb071” to your computer where Grafana is running on. Restart the Webpage with the IIS Manager.
The IIS configuration file can be found here: (C:\Program Files\Siemens\Automation\WinCCUnified\SimaticUA\web.config)
<rule name="grafana" enabled="true" stopProcessing="false">
<match url="grafana(/)?(.*)" ignoreCase="true" />
<action type="Rewrite" url="http://desktop-khlb071:3000/{R:0}" appendQueryString="true" logRewrittenUrl="false" />
</rule>
Change the following configuration of Grafana (defaults.ini). Change the domain to your computer name where Grafana is running on. It must be the same name what you use in the IIS configuration file!
# The public facing domain name used to access grafana from a browser
domain = desktop-khlb071
# Redirect to correct domain if host header does not match domain
# Prevents DNS rebinding attacks
enforce_domain = false
# The full public facing url
root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana
# Serve Grafana from subpath specified in `root_url` setting. By default it is set to `false` for compatibility reasons.
serve_from_sub_path = true
# set to true if you want to allow browsers to render Grafana in a <frame>, <iframe>, <embed> or <object>. default is false.
allow_embedding = true
UNS with WinCC Open Architecture?
Did you know that WinCC Open Architecture is “UNS READY”? 👍
And it even does not matter how your underlying tags are structured 😮
👉 You can create your own hierarchical view on tags which you want to publish to MQTT in a Unified Namespace!
👉 You can define a fully ISA 95 compliant view on top of your machine data!
Happy UNS Publishing with WinCC Open Architecture!
See the MQTT publisher at the WinCC Open Architecture Documentation
SparkplugB for Unity3D
Unlock the potential of industrial data from SparkplugB enabled devices, seamlessly integrated into Unity3D to build 3D applications?
Or start creating industry Apps for Apple’s Vision Pro with SparkplugB connectivity? 🕶️
💡 I completed a SparkplugB 🚀 implementation for Unity. The primary objective was to acquire a hands-on understanding of SparkplugB.
👉 You can find it for free on GitHub It’s made on top of the “MQTT for Unity” Asset.
Disclaimer: There is no assurance that I have captured all the rules within the extensive 140-page SparkplugB specification. While Unity supports visionOS, I have not conducted testing on this platform.
3D charts with Unity3D and WinCC Unified
With WinCC Unified V19 we got the feature to read history values of logged tags with GraphQL 👍 I have now added this functionality to the GraphQL for Unity Pro Asset 🤝
🎥 With that done it is now also very easy to read the history of logged tags in Unity3D. See the video, there we read and visualize the history values of a tag when the application starts. And then the 3D chart gets updated with real-time values coming from a GraphQL tag subscription.
ℹ️ The GraphQL for Unity Pro Asset has a WinCC Unified interface on top of GraphQL to make the access to WinCC Unified data in Unity even more easier, you do not need to implement the GraphQL queries by your own.
👉 You can try the demo in the browser! This is possible because the asset als supports WebGL builds and because GraphQL is transported over HTTP&Websockets. Here it is. But it might happen that this link will not work anymore when you read this post.
Note: Use the PWA WebGL Template so that the application adjusts to the size of your browser window. Or adjust the settings in the generated index.html page:
<canvas id="unity-canvas" width=auto height=auto tabindex="-1" style="width: 100%; height: 100%; background: #231F20"></canvas>
💡 Get a copy of WinCC Unified, connect your machines to it and build your Unity3D application with the data from WinCC Unified!
Example code how to read the last 100 values of a tag.
Connection.LoggedTagValues("PV-Vogler-PC::HMI_Tag_1:LoggingTag_1",
endTime: DateTime.Now,
maxNumberOfValues: 100
).ContinueWith((task) => {
Debug.Log(task.Result.Count);
}
Bring MQTT Payload to OPC UA?
I wanted to get my Home-Automation values to SCADA, it’s a “self-made” JSON message format. I tried it with Ignition and the MQTT Module. Btw.: it’s great that they have the Makers Edition for non-commercial use at home 👍. But I don’t know why, it only got one topic and one value from my MQTT Broker, and it did not receive any updates. Don’t know what went wrong…
Anyhow, I decided to add a custom JSON format to the Automation-Gateway.com. It’s simple, just define the JSON-Path to the value and optionally to a timestamp in milliseconds since epoch or to an ISO 8601 format.
Now I can use the Automation-Gateway’s OPC UA server in any SCADA system to visualize my MQTT values…
Here is the config.yaml configuration file for the Automation-Gateway.
Servers:
OpcUa:
- Port: 4841
Enabled: true
LogLevel: INFO
Topics:
- Topic: mqtt/home/path/Original/#
Drivers:
Mqtt:
- Id: "home"
LogLevel: INFO
Host: 192.168.1.3
Port: 1883
Format: Json
CustomJson:
Value: "Value"
TimestampMs: "TimeMS"