Using UaModeler to specify the underlying addr. of a node
Posted: 31 Jan 2020, 18:58
Hi everyone,
This is a generic question about UaModeler's functionalities and purpose, so I guess I shouldn't provide product data, but here's what I'm using:
- name of the product: UaModeler
- version number: 1.6.3 454
- operating system: Windows 10
Context:
I'm analyzing how much work needs to be done in case I choose to buy the license for your .NET SDK to integrate it to my projects.
Concerning my projects, I have several different machines, maybe similar one another, but in general this means that I need a different server for each machine, thus to configure these servers appropriately we need the UaModeler to define their information models. However, the one who is defining the data to be shown to the client (using the UaModeler) and me that I will code the "Minimal System Adaptation Layer" [1], are two different people. I need to develop the server for my machines just once (at least DA), and I want to leave the server configuration to the one who is responsible for it. Studying your tutorials, I learnt to define the information model with the UaModeler, but the content of those variables and properties (i.e. the value) must be set in the code, reading real time data from the underlying system in my case [2]. Assuming we have addresses to identify the location of the value in the underlying system (e.g. "Machine003.Device001.Axis003"), if we are able to bind a node of the server address space to this address pointing to the value in the underlying system, we are almost done...
Problem:
Can we use the UaModeler to set something like an Attribute for a Node, and use it to write the value address in the underlying system?
This will make every variable/property of the information model carry the information of where its value is in the underlying system, and I can develop the server so that the connection between the nodes in the server address space and the real time data is made dynamically, so I don't need to rewrite code for every machine I have (at least for DA). If this is really feasible, the 1:1 binding between a node and the underlying address would be realized by my colleagues using just one tool (the UaModeler), otherwise I think the only solution would be the development of an extra tool that reads the xml produced by the UaModeler, and makes the user associate the nodes to the underlying addresses.
However, I couldn't find a way to use the UaModeler this way so I'm not sure if it really allows it.
At the beginning I thought about adding a Property to the Variable that I wanted to associate with the underlying address. I would have named the Property "PLCAddress" and I would have set its value to the underlying address (e.g. from above: "Machine003.Device001.Axis003"), but I realized I wasn't able to do it because the UaModeler makes you create only "the container" and not the content.
I realized a better option would have been to create a new Attribute for the nodes but looks like that it's forbidden [3] (I'm not sure if it's an OPC Foundation's decision or if it's your design decision, but looks like it's not a way to solve it). This custom Attribute would be named something like "PLCAddress" and I would set its content to "Machine003.Device001.Axis003".
Is there a way, that I didn't think of, to add this information about the underlying address to a node? Maybe using custom ReferenceType? Or maybe one of those two attempts I made were feasible but I failed to realize them. Or the UaModeler was simply not intended to be used like that, so the only way to avoid changing, for every machine, the code of the "Minimal system adaptation layer" of my server, is to develop an extra tool.
If I wasn't clear enough I can fix it: please let me know.
Best regards,
baldo
References:
[1] "Minimal system adaptation layer": http://documentation.unified-automation ... ction.html
[2] "Underlying system": http://documentation.unified-automation ... ess03.html
[3] "Nodes' attributes are non-extensible": screenshot attached taken from a slide of your courses.
This is a generic question about UaModeler's functionalities and purpose, so I guess I shouldn't provide product data, but here's what I'm using:
- name of the product: UaModeler
- version number: 1.6.3 454
- operating system: Windows 10
Context:
I'm analyzing how much work needs to be done in case I choose to buy the license for your .NET SDK to integrate it to my projects.
Concerning my projects, I have several different machines, maybe similar one another, but in general this means that I need a different server for each machine, thus to configure these servers appropriately we need the UaModeler to define their information models. However, the one who is defining the data to be shown to the client (using the UaModeler) and me that I will code the "Minimal System Adaptation Layer" [1], are two different people. I need to develop the server for my machines just once (at least DA), and I want to leave the server configuration to the one who is responsible for it. Studying your tutorials, I learnt to define the information model with the UaModeler, but the content of those variables and properties (i.e. the value) must be set in the code, reading real time data from the underlying system in my case [2]. Assuming we have addresses to identify the location of the value in the underlying system (e.g. "Machine003.Device001.Axis003"), if we are able to bind a node of the server address space to this address pointing to the value in the underlying system, we are almost done...
Problem:
Can we use the UaModeler to set something like an Attribute for a Node, and use it to write the value address in the underlying system?
This will make every variable/property of the information model carry the information of where its value is in the underlying system, and I can develop the server so that the connection between the nodes in the server address space and the real time data is made dynamically, so I don't need to rewrite code for every machine I have (at least for DA). If this is really feasible, the 1:1 binding between a node and the underlying address would be realized by my colleagues using just one tool (the UaModeler), otherwise I think the only solution would be the development of an extra tool that reads the xml produced by the UaModeler, and makes the user associate the nodes to the underlying addresses.
However, I couldn't find a way to use the UaModeler this way so I'm not sure if it really allows it.
At the beginning I thought about adding a Property to the Variable that I wanted to associate with the underlying address. I would have named the Property "PLCAddress" and I would have set its value to the underlying address (e.g. from above: "Machine003.Device001.Axis003"), but I realized I wasn't able to do it because the UaModeler makes you create only "the container" and not the content.
I realized a better option would have been to create a new Attribute for the nodes but looks like that it's forbidden [3] (I'm not sure if it's an OPC Foundation's decision or if it's your design decision, but looks like it's not a way to solve it). This custom Attribute would be named something like "PLCAddress" and I would set its content to "Machine003.Device001.Axis003".
Is there a way, that I didn't think of, to add this information about the underlying address to a node? Maybe using custom ReferenceType? Or maybe one of those two attempts I made were feasible but I failed to realize them. Or the UaModeler was simply not intended to be used like that, so the only way to avoid changing, for every machine, the code of the "Minimal system adaptation layer" of my server, is to develop an extra tool.
If I wasn't clear enough I can fix it: please let me know.
Best regards,
baldo
References:
[1] "Minimal system adaptation layer": http://documentation.unified-automation ... ction.html
[2] "Underlying system": http://documentation.unified-automation ... ess03.html
[3] "Nodes' attributes are non-extensible": screenshot attached taken from a slide of your courses.