The following resources will provide you information to integrate the .NET Alarm control into a Visual Studio project targeting .NET Framework.
The .NET Alarm windows can also be accessed in the prebuilt Trends and Alarms Dashboard that can be used directly for local and remote deployment.
If you do not have a copy of Visual Studio you can download a free version of Visual Studio Community (formerly Visual Basic Express or C# Express) from visualstudio.microsoft.com/vs/community. You can choose whether to use Visual Basic or C#, but if you have no experience with either language, Visual Basic is easier for new developers. No programming is required to use .NET Alarm.
The following steps can be used to add an alarm window to a C#, C++, or Visual Basic.NET application. All properties are programmatically accessible.
The following example demonstrates the alarm window with no code required. You can use Visual Studio 2019 with WPF applications and Visual Studio 2022 with WinForm applications.
Alarm Properties
The descriptions of each property of the alarm control can be viewed when selecting the property.
Step 1: Create New Project
Start Visual Studio and select File->New->Project to create a new C# or VB project for Windows Forms App (.NET Framework).
When prompted choose C# or Visual Basic as language to target WindowsDesktop applications.
Choose Windows Forms App (.NET Framework) as the new project type for C# or Visual Basic.
Set the Project name, Location, and the Framework of 4.6.2 or greater.
Select Create in the lower right corner.
Step 2: Add OPCAlarmControl to Form
Select View-Toolbox to select controls from the Open Automation Software group.
From the Toolbox if OPCAlarmControl components are not available right click in the Toolbox and select Choose Items.
NOTE: If you have installed Visual Studio after Open Automation Software you can either right click on the Toolbox and select Choose Items to include the OPCControls.dll assembly from C:\Program Files\Open Automation Software\OAS\Controls\NetFramework\OPCControls\ or uninstall Open Automation Software and reinstall to register the OPCControls.dll assembly with Visual Studio.
From the .NET Framework Components select the OPCAlarmControl component and then select OK.
Step 3: Add OPCAlarmControl to Form
Add the OPCAlarmControl or OPCWPFAlarm component onto the Form or Window.
Resize both the form and alarm window to the desired size.
Right click on the alarm window and select Properties.
Set the Anchor property to Top, Bottom, Left, Right.
Step 4: Define Alarm Properties
Expand the AlarmFilter property and set the desired filter settings for the alarm window.
Step 5: Networking Alarms
To define remote OAS Engines to interface with select the AlarmNetworkNodes property and click on the small grey square with the 3 dots at the right.
Select all network nodes you wish to receive alarms from to this alarm window.
NOTE: If you want the application to be deployed across a network to remote PCs select the Network Node or enter an IP Address in the NetworkNode field and use the Select button to include the network node or IP Address of the OAS Engine source.
Step 6: Retain Runtime Changes to File
If you desire for the operator’s changes to the alarm window during runtime to remain set the ConfgiurationFile property to a valid file path. Make sure each system the application will run on that the directory path is valid.
Note: If you set this property to a file make sure you deploy the file with the application in the directory you specify.
Leave this property blank if you wish to have the default properties set during configuration remain on the application restarting.
Step 7: Build Project
Set the compile mode on the Visual Studio toolbar to Release.
Select Build from the VS menu and select to build the application.
Step 8: Run Project
Use Windows Explorer to browse for the application located in the bin\Release directory and run the application.
Step 8: Deploy Application
To deploy the application to remote nodes first make sure the AlarmNetworkNodes selection as described in Step 9 is set to a Network Node or IPAddress. Then simply copy the files in the bin\Release directory to the target systems or follow the Smart Client deployment section in this help file to deploy your application using Click Once Deployment.
To deploy the application simply copy the files in the bin\Release directory to the target systems, or follow the Smart Client Deployment guide using Click Once Deployment. The remote system that will run the application should have the .NET Framework version installed that the application targets.
The OAS Alarm .NET product provides the features of viewing real-time and historical alarms on unlimited local and remote systems, alarm logging, alarm notification, and alarm statistics.
This product includes the windows services to monitor alarm limits, a .NET component to be used on local and remote systems to connect to the local windows service.
Alarming can be enabled to monitor both analog and digital signals with fixed, adjustable, and tracking alarm limits.
Alarm limits can be defined for high high, high, low, low low, rate of change, and digital alarms.
The first step is to define the Alarm Limits. This is demonstrated in the Quick Start Section under Configure Tags – Alarm Limits.
The next step is determine how you want to present the alarm to the user.
Users can view what is currently in alarm and history of alarms in both Windows and Web versions of the alarm windows. Both support Internet communications as well.
For Smart phones the Web Alarm Window is the right choice. For Windows and WPF applications the Windows Alarm Window is the one to use.
If you do not want to develop an application and just want to trend window to display your data you can use the OPC Trends and Alarms Dashboard.
Visual Studio 2022 design time properties no longer support custom property editors for WPF applications. Use Visual Studio 2019 to develop WPF applications.
The free Community Edition of Visual Studio 2019 can be download from https://visualstudio.microsoft.com/vs/older-downloads/.
WinForm applications are still well supported in Visual Studio 2022.
Bad Data Quality in .NET Application.
Below are some possible reasons your .NET application is not able to read OAS tag values.
Data Source Quality
Use Configure-Tags to verify that the data quality of the source tags is "Good Quality".
Security
The Default security group on either the local or remote OAS Engine may have Disable All Tags from Reading checked under the Read Tags Tab. See Restrict Tag Access of Security setup to see how read, write, and browse access can be restricted.
View how to Implement User Credentials in Client Applications to provide log in method for each user in the .NET application.
Network
.NET applications can be defined to communicate to remote OAS Engines. See Network Communications Troubleshooting to verify that port 58727 is allowing both incoming and outgoing traffic through your firewall.
Tag Path
The full tag path would include the full tag name including its parent groups and the variable of the Tag.
MyGroup.MyTag.Value
Tag names are case sensitive and the current value of a tag would be .Value as the most common variable.
If the tag is from a remote OAS Engine see Basic Networking for standard remote tag syntax or Live Data Cloud Networking if the OAS Engine system has a dynamic IP address.
\\192.168.0.1\TagName.Value
License
Use Configure-License to verify that a product feature .NET Data Connector, WinForm HMI, or WPF HMI is enabled on the data source system where the tags are located.
Target Framework for WPF and WinForm Applications
The project type for WinForm and WPF applications should be set to include (.NET Framework) and target .NET Framework 4.6.1 or greater.
See the correct project type for WinForm above that is listed as Windows Forms App (.NET Framework) while Windows Forms App would not be the correct project type.
Assembly References
Visual Studio on some operating systems will assign a legacy assembly to the project causing an incompatibility due to an older version of the reference assembly. A common assembly that can be incorrect is Newtonsoft.Json that has been registered in the GAC by another software product.
Select Newtonsoft.Json under the Project References to verify the correct path and version as 13.0.0.0.
If the Path does not reference the OAS installation directory remove the reference and select to Add Reference and browse for dll from the respective directory for the specific product feature. For .NET Framework applications include the .dlls located in C:\Program Files\Open Automation Software\OAS\Controls\NetFramework\. The Target Framework set for the VS project must be .NET Framework 4.6.1 or greater. For .NET Standard supporting the following targets include the. dlls located in C:\Program Files\Open Automation Software\OAS\Controls\NetStandard\.
See a list of locations for the correct type in the troubleshooting type After updating to OAS Version 17 the project no longer compiles for a list of correct project reference paths for each type of Visual Studio Project.
.NET Assembly is Blocked
If you have copied an application or project to another computer you may need to Unblock one or more the .dll files.
Right click on the .dll file that you have downloaded. Check the Unblock checkbox for security as shown in the example below, then click Apply or OK.
Legacy .NET Application with OAS Version 17
If the OAS .NET assemblies are from OAS version 16 or less contact support@oasiot.com for compatibility instructions.
After updating to OAS Version 17 the project no longer compiles
All dependent .dlls are located in the relative subdirectory of the Controls directory of the OAS installation directory, typically C:\Program Files\Open Automation Software\OAS\Controls\.
To add a reference to a Visual Studio project right click on References in the Solution Explorer.
Select Browse to browse the directory for each application feature.
Include all .dlls files in the respective directory for the specific product feature.
For .NET Framework applications include the .dlls located in C:\Program Files\Open Automation Software\OAS\Controls\NetFramework\.
The Target Framework set for the VS project must be .NET Framework 4.6.1 or greater.
For .NET Standard supporting the following targets include the. dlls located in C:\Program Files\Open Automation Software\OAS\Controls\NetStandard\.
How do I programmatically add pens to a trend window?
The following two (2) examples are for WinForm and WPF applications on how to add pens to a trend window during runtime programmatically.
WinForm:
Dim NewPen As OPCTrendControl.ClassPen
Dim NewPens As OPCTrendControl.ClassPen()
ReDim NewPens(2)
If NetworkPath = """" Then
NewPen = New OPCTrendControl.ClassPen(NetworkPath + ""Ramp.Value"", ""localhost"")
Else
NewPen = New OPCTrendControl.ClassPen(NetworkPath + ""Ramp.Value"", NetworkNode)
End If
NewPen.LineBorderColor = Color.Blue
NewPen.LineFillColor = Color.Blue
NewPen.Description = "Ramp"
NewPen.LineStyle = OPCTrendControl.ClassPen.LineStyleTypes.Ellipsoid
NewPens(0) = NewPen
If NetworkPath = "" Then
NewPen = New OPCTrendControl.ClassPen(NetworkPath + ""Sine.Value"", ""localhost"")
Else
NewPen = New OPCTrendControl.ClassPen(NetworkPath + ""Sine.Value"", NetworkNode)
End If
NewPen.LineBorderColor = Color.Red
NewPen.LineFillColor = Color.Red
NewPen.Description = "Sine"
NewPen.YAxisRangeHigh = 1
NewPen.YAxisRangeLow = -1
NewPen.LineStyle = OPCTrendControl.ClassPen.LineStyleTypes.Tube
NewPens(1) = NewPen
If NetworkPath = "" Then
NewPen = New OPCTrendControl.ClassPen(NetworkPath + ""Random.Value"", ""localhost"")
Else
NewPen = New OPCTrendControl.ClassPen(NetworkPath + ""Random.Value"", NetworkNode)
End If
NewPen.LineBorderColor = Color.Green
NewPen.LineFillColor = Color.Green
NewPen.Description = "Random"
NewPen.MarkerFillColor = Color.Green
NewPen.MarkerStyle = OPCTrendControl.ClassPen.MarkerStyleTypes.Sphere
NewPen.MarkerSize = 20
NewPens(2) = NewPen
frmTrend.OpcTrendControl1.Pens = NewPens
WPF:
VB
Dim Pens As New OPCWPFDashboard.PensList
Dim NewPen As New OPCTrendControl.ClassPen
'Add Ramp Pen
NewPen = New OPCTrendControl.ClassPen("Ramp.Value", "localhost")
NewPen.Units = ""MGD""
NewPen.YAxisRangeHigh = 2
NewPen.LineStyle = OPCTrendControl.ClassPen.LineStyleTypes.Line
NewPen.Description = "Ramp Value"
Pens.Add(NewPen)
'Add Random
NewPen = New OPCTrendControl.ClassPen("Random.Value", "localhost")
NewPen.Units = "NTU"
NewPen.Description = "Random Pen"
Pens.Add(NewPen)
OPCWPFTrend1.Pens = Pens
C#
OPCWPFDashboard.PensList Pens = new OPCWPFDashboard.PensList();
OPCTrendControl.ClassPen NewPen = new OPCTrendControl.ClassPen();
//Add Ramp Pen
NewPen = new OPCTrendControl.ClassPen("Ramp.Value", "localhost");
NewPen.Units = "MGD";
NewPen.YAxisRangeHigh = 2;
NewPen.LineStyle = OPCTrendControl.ClassPen.LineStyleTypes.Line;
NewPen.Description = "Ramp Value";
Pens.Add(NewPen);
//Add Random
NewPen = new OPCTrendControl.ClassPen("Random.Value", "localhost");
NewPen.Units = "NTU";
NewPen.Description = "Random Pen";
Pens.Add(NewPen);
OPCWPFTrend1.Pens = Pens
The database engine language is different than the Regional Language settings of the Data Logging and / Alarm Logging Service. Data Logging updates, Alarm Logging updates, trend history, and / alarm history is not working due to invalid date format.
Go to Configure-Options-History and Enable History Date Format. Examples: yyyy-MM-dd HH:mm:ss MM/dd/yyyy HH:mm:ss
After updating Open Automation Software with the incremental update the project no longer compiles or the application no longer works.
Make sure to Unblock the dlls before copying to C:\Program Files\Open Automation Software\OAS\Controls\NetFramework\.
To Unblock the files copy to a trusted location for your system, Desktop works well, then right click on the file and select Properties to select Unblock. Then copy from your Desktop to the correct directory in C:\Program Files\Open Automation Software\OAS\Controls\.
I want to add annotations to the trend window.
Create a StringTag with the Trend Point property enabled. Add the String Tag to the Trend Window as a new Pen. In one of the other existing pens where you want the annotation to appear on set the property Pen.LabelAnnotationTag to the String Tag. Set the Data Logging Group to the String Tag to a String field you will be updating directly from your application.
I would like to show multiple Y Axis on the trend window.
Set YAxis-ScaleMode to one of the Stacked chart types. Set each Pen’s StackedChartNumber to the desired stacked chart to display the pen.
Does OPCTrend.NET support OPC HDA?
No, OPCTrend.NET is a client/server architecture that does not require DCOM and the communications uses the built in networking to the .NET Framework. This makes it possible for trend clients to view real-time data and historical data with OPCDatabase.NET from anywhere in the world over the Internet.
The OAS Service can bring in data values from Data Access OPC Servers, Data Access OPC Clients, databases like SQL Server, Oracle, Access, and mySQL, Microsoft Excel, and .NET applications (web, WinForm, WCF, WPF, and Windows Services).
The values can then be cached for unlimited trend clients and logged to databases with OPCDatabase.NET. Trend clients can be running on both Windows Operating systems and non Windows Operating systems like smart phones and the iPads.
Visit the Trend .Net Product page for more information and to run a live example.
Trend history is running very slow from the database.
Make sure the date and time span is defined to return a subset of data instead of all of the data. You can also reindex the database in SQL Server to run faster. Reorganizing and Rebuilding Indexes https://msdn.microsoft.com/en-us/library/ms189858.aspx
How do I programmatically get realtime and historical trend data?
Use the GetTrendDataTable method to return a DataTable object with all trend values.
There are several different methods to programmatically access the trend data and call history for the trend OPCTrendControl. Refer to the OPCTrendControl help file for all properties and methods with their description and syntax.
Use the GetTrendDataTable method to return a DataTable of all data in the current view.
Get Trend History Data Programmatically
The following code can be used to programmatically get history data and return the data to a DataTable:
Use the Modify Properties button to make on-line changes to all properties of the Trend Window.
View Data Grid Button
Select the View Data Grid button to show a table of all values of the current trend.
Start Runtime Button
Select the Start Runtime button to put the Trend Window in real-time update mode. This button is useful if the Trend Window was previously stopped using the Stop Runtime button (see below).
Stop Runtime Button
Select the Stop Runtime button to freeze the Trend Window.The Data Cursor button is then selectable.
Data Zoom Button
Select the Data Zoom button to zoom in on a section of the Trend Window. There are many other zoom types also.
Data UnZoom Button
Select the Data UnZoom button to return the Trend Window to 100% data zoom if the Data Zoom button was previously used. There are many other zoom types also.
Data Cursor Button
The Data Cursor button is available with the Trend Window has been stopped with the Stop Runtime button (see above). Select the Data Cursor to bring up the data plane in 3D mode or data line in 2D mode. Use the mouse to move the data plane to see the date/time and values at the position of the data plane.
History Button
Use the History button to freeze the Trend Window and select a Date and Time range to retrieve historical data for all Pens that have been logged using OAS Data Log.
Hide Toolbar Button
Select this button to hide the Toolbar. Click on the Trend Window with the Right Mouse button to show the Toolbar again.
Print Trend Window Button
Select this button to print up the Print Preview window that can be used to print the current trend.
Some printer drivers do not support 3D Window rendering so the application will halt if the printer driver cannot handle the large memory for the print.
2D View Button
Select this button to view the Trend in just 2 dimensions. Note this selection will not be retentive. Use the View Property to make the change retentive.
3D Perspective View Button
Select this button to view the Trend in Perspective View. Note this selection will not be retentive. Use the View Property to make the change retentive.
3D Orthogonal View Button
Select this button to view the Trend in Orthogonal View. Note this selection will not be retentive. Use the View Property to make the change retentive.
3D Free Rotate Button
Select this button to rotate the Trend Window on all 3 planes. This feature can be used to obtain non standard view perspectives of the data. Note this selection will not be retentive. Use the View Property to make the change retentive.
Predefined Projection Button
Select this button to select predefined 2D and 3D views. Note this selection will not be retentive. Use the View Property to make the change retentive.
View Zoom Button
Select this button to enable the mouse to Zoom In and Out by moving the mouse up and down. Note this selection will not be retentive.
Move Trend Button
Select this button to move the Trend. Note this selection will not be retentive.
Lighting Button
Use this button to select the desired lighting effect. Note this selection will not be retentive. Use the View Property to make the change retentive.
User Log In
Use this button to Log In to the trend control when security is enabled in the service.
You can distribute the OAS Trend .NET component with your local and remote applications. This component will only connect to licensed OAS Services.
The Microsoft .NET Framework version 2.0 is required on all systems that will use the OPC Trend component. This is automatically included with Windows XP and greater. Only Windows 2000 systems will you need to install the .NET Framework 2.0 to.
The following files are required to be distributed with your applications that are commonly found in the installation directory of Open Automation Software.
For .NET Framework 2.0 the installation directory is C:Program FilesOpen Automation SoftwareOPCSystems.NET.
Refer to OPCTrendControl help for all properties and members of the OAS Trend .NET component. Refer to the Windows Trending section for an example of setting up properties of the Trend Window.
To add the OAS Trend .NET component to your Visual Studio.NET development systems select View-Toolbox from within Visual Studio.NET.
Right-Click on the Toolbox and select Add/Remove Items.
Select OPCTrendControl for the .NET Framework Components.
You are now ready to add the OAS Trend .NET component to your Visual Studio Forms to develop unlimited numbers of applications for local and remote connections to OAS Services with a valid OAS Trend .NET license.
Use the OAS Trend .NET Properties to setup the Trend Window attributes such as pens, time frames, and colors.
Set the ConfigurationFile property to a proper file path with the extension .alarm if you desire to save on-line changes. If you leave this property blank the window setup is saved with your application, but on-line changes are not retentive.
Refer to the Windows Trending section for an example of setting up properties of the Trend Window.