AdvancedHMI Software
General Category => Support Questions => Topic started by: RockB on May 03, 2019, 12:43:15 AM
-
Hello,
I am trying to get data from Input holding registers from a PLC through ModbusTCP communication. I have added the ModbusTCP driver to MainForm.cs and have set the IP address.
I have two digital panel meters in the MainForm. If I set the "PLCAddressValue" property for these components and run the applications, I get the data just fine. However, the Incoming data has to be modified before it is displayed on the meter. For this purpose, I am exploring the DataSubscriber
I understand that Data subscriber automatically refreshes the data values. Thus, this avoids calling modbusTCPCom1.BeginRead("address")
repeatedly.
I want to subscribe to 8 consecutive registers. Their addresses are as follows: 40001 to 40008. How can get the values of these registers using data subscriber? I have gone through few posts and have this so far
private void MainForm_Load(object sender, EventArgs e)
{
Int val1 = modbusTCPCom1.Subscribe("40001",1,100, SubscribeCallBack);
}
Question 1: How can I read/store values of all registers into an integer array and read individual values later? Do I need an individual subscription for each of those registers?
Question 2: What should the "SubscribeCallBack" event include to handle communication lost to PLC?
Question 3: What is the difference between DataSubscriber and DataSubscriber2?
-
- Add a DataSubscriber2 to the form
- In the Properties Window click on PLCAddressItems property to open the window
- Add a new item
- Set PLCAddress to 40001
- Set NumberOfElements to 8
- Close that window
- Double click the DataSubscriber2 in the component tray to get back to code
- Use the array e.Values() to access the 8 values that are returned
DataSubscriber2 is a newer component that allows multiple items. DataSubscriber is for backward compatibility and only accepts a single address.
-
@Archie When I try to Add addresses to "PLCAddressValueItems" in properties of datasubscriber2, I get an error saying "Object does not match the target type"
Edit: I have also observed this problem when I add "ChartBySampling" component and try to edit the "PLCAddressItems" property.
I am using the latest version of Advanced HMI (AdvancedHMIv399xR1). The solution of VS2017 has three projects in it: AdvancedHMIcs, AdvancedHMIDrivers and AdvancedHMIControls. I have manually removed the AdvancedHMI (vb project) since this going to be a C# application.
I have manually added "MfgControl.AdvancedHMI.Controls.dll" and "MfgControl.AdvancedHMI.Drivers.dll" references to AdvancedHMIcs project
-
That error is a quirk of Visual Studio. You can resolve it like this:
- Window->Close All Document
- Build->Rebuild Solution
- Exit Visual Studio
- Re-open your solution
-
Thanks, Archie! that worked.
I am getting temperature values from ModbusTCP. I want to plot them on a trend chart with moving X-axis. The scale of the Y-axis is usually fixed. I want X-axis to show time.
Which of the charts should I use: Basic Trend Chart, chart by array or chart by sampling?
-
Probably ChartBySampling
If you are using the latest beta version, then ChartWithLogging will also store the values to a file.