/// <summary> /// Setup: do the all required intial Setup (setup the connection of Service Bus and Geo SCADA) /// </summary> static bool SetUpGeoSCADAConnection() { // The arguments here will specify your server by its IP address and port. These are the defaults for local use. ClearScada.Client.ServerNode node = new ClearScada.Client.ServerNode(ClearScada.Client.ConnectionType.Standard, GeoSCADAnode, GeoSCADAport); try { connection.Connect(node); } catch (CommunicationsException) { Console.WriteLine("Unable to communicate with Geo SCADA server."); return(false); } if (!connection.IsConnected) { Console.WriteLine("Not connected to Geo SCADA server."); return(false); } using (var spassword = new System.Security.SecureString()) { foreach (var c in GeoSCADApass) { spassword.AppendChar(c); } try { connection.LogOn(GeoSCADAuser, spassword); } catch (AccessDeniedException) { Console.WriteLine("Access denied, incorrect user Id or password"); return(false); } catch (PasswordExpiredException) { Console.WriteLine("Credentials expired."); return(false); } } return(true); }
// Alarm acknowledgement private bool TryAlarmAck(string UserId, string PIN, long Cookie, string Phone) { // Log on to the .Net Client API with these details // This requires a Reference from the project to this dll ClearScada.Client.Simple.Connection connection; var node = new ClearScada.Client.ServerNode(ClearScada.Client.ConnectionType.Standard, "127.0.0.1", 5481); ((DrvNotifyChannel)this.Channel).LogAndEvent("Acknowledge - connection created."); connection = new ClearScada.Client.Simple.Connection("Notify"); try { ((DrvNotifyChannel)this.Channel).LogAndEvent("Acknowledge - connecting."); connection.Connect(node); } catch (CommunicationsException) { ((DrvNotifyChannel)this.Channel).LogAndEvent("Ack request - Unable to log in to ClearSCADA server using UserId and PIN."); return(false); } if (!connection.IsConnected) { ((DrvNotifyChannel)this.Channel).LogAndEvent("Acknowledge - failed connection."); return(false); } using (var spassword = new System.Security.SecureString()) { foreach (var c in PIN) { spassword.AppendChar(c); } try { ((DrvNotifyChannel)this.Channel).LogAndEvent("Acknowledge - logging in."); connection.LogOn(UserId, spassword); } catch (AccessDeniedException) { ((DrvNotifyChannel)this.Channel).LogAndEvent("Ack request - Access denied, incorrect user Id or PIN."); return(false); } catch (PasswordExpiredException) { ((DrvNotifyChannel)this.Channel).LogAndEvent("Ack request - credentials expired."); return(false); } } // Get root object ClearScada.Client.Simple.DBObject root = null; try { ((DrvNotifyChannel)this.Channel).LogAndEvent("Acknowledge - get database object."); root = connection.GetObject("$Root"); } catch (Exception e) { ((DrvNotifyChannel)this.Channel).LogAndEvent("Ack request - Cannot get root object. " + e.Message); return(false); } object[] parameters = new object[2]; parameters[0] = Cookie; parameters[1] = "By Phone"; // Try acknowledging alarm try { ((DrvNotifyChannel)this.Channel).LogAndEvent("Acknowledge - accepting by cookie."); root.InvokeMethod("AcceptAlarmByCookie", parameters); } catch (Exception e) { ((DrvNotifyChannel)this.Channel).LogAndEvent("Ack request - Cannot acknowledge. " + e.Message); return(false); } return(true); }
static void Main(string[] args) { if (args.Length != 5) { Console.WriteLine("List the referenced items and types of all objects matching an SQL query\n" + "Arguments:\n" + "1 - Server IP/host\n" + "2 - Port\n" + "3 - User\n" + "4 - Password\n" + "5 - SQL query returning a list of FullNames\n" + " Example: ListReferences localhost 5481 freddy password \"select fullname from clogiccore\" \n" + " Output: object name, type, referenced object name, type "); return; } var node = new ClearScada.Client.ServerNode(ClearScada.Client.ConnectionType.Standard, args[0], int.Parse(args[1])); var connection = new ClearScada.Client.Simple.Connection("Utility"); connection.Connect(node); var AdvConnection = node.Connect("UtilityA", false); using (var spassword = new System.Security.SecureString()) { foreach (var c in args[3]) { spassword.AppendChar(c); } connection.LogOn(args[2], spassword); AdvConnection.LogOn(args[2], spassword); } string sql = args[4]; ClearScada.Client.Advanced.IQuery serverQuery = AdvConnection.PrepareQuery(sql, new ClearScada.Client.Advanced.QueryParseParameters()); ClearScada.Client.Advanced.QueryResult queryResult = serverQuery.ExecuteSync(new ClearScada.Client.Advanced.QueryExecuteParameters()); if (queryResult.Status == ClearScada.Client.Advanced.QueryStatus.Succeeded || queryResult.Status == ClearScada.Client.Advanced.QueryStatus.NoDataFound) { if (queryResult.Rows.Count > 0) { IEnumerator <ClearScada.Client.Advanced.QueryRow> e = queryResult.Rows.GetEnumerator(); while (e.MoveNext()) { string fullname = (string)e.Current.Data[0]; var dbobject = connection.GetObject(fullname); var reflist = dbobject.GetReferencesFrom(); if (reflist.Count == 0) { Console.WriteLine(fullname + "," + dbobject.ClassDefinition.Name + ","); } else { foreach (var refobject in reflist) { Console.Write(fullname + "," + dbobject.ClassDefinition.Name + ","); Console.WriteLine(refobject.FullName + ", " + refobject.ClassDefinition.Name); } } } } } serverQuery.Dispose(); }
static int Main(string[] args) { if (args.Length != 4) { Console.WriteLine("Usage: SetInternalPoint \"username\" \"password\" \"Point-Name\" \"Value\" "); return(1); } string user = args[0]; string pass = args[1]; string pointname = args[2]; string valuetext = args[3]; double valuedouble; if (!double.TryParse(valuetext, out valuedouble)) { Console.WriteLine("Value is not numeric"); return(1); } ClearScada.Client.Simple.Connection connection; var node = new ClearScada.Client.ServerNode(ClearScada.Client.ConnectionType.Standard, "127.0.0.1", 5481); connection = new ClearScada.Client.Simple.Connection("Utility"); try { connection.Connect(node); } catch (CommunicationsException) { Console.WriteLine("Unable to communicate with Geo SCADA server."); return(1); } if (!connection.IsConnected) { Console.WriteLine("Not connected to Geo SCADA server."); return(1); } using (var spassword = new System.Security.SecureString()) { foreach (var c in pass) { spassword.AppendChar(c); } try { connection.LogOn(user, spassword); } catch (AccessDeniedException) { Console.WriteLine("Access denied, incorrect user Id or password"); return(1); } catch (PasswordExpiredException) { Console.WriteLine("Credentials expired."); return(1); } } // Get point object ClearScada.Client.Simple.DBObject pointobject = null; try { pointobject = connection.GetObject(pointname); } catch (Exception e) { Console.WriteLine("Cannot get point object. " + e.Message); return(1); } // Set value try { object [] callparam = new object [1]; callparam[0] = valuedouble; pointobject.InvokeMethod("CurrentValue", valuedouble); } catch (Exception e) { Console.WriteLine("Error setting value. " + e.Message); return(1); } // Demo to read historic /* * var pointObject2 = connection.GetObject("Example Projects.Oil and Gas.Transportation.Inflow Computer.GasFlow"); * DateTime hisStart = new DateTime(2021, 1, 19, 0, 0, 0); * DateTime hisEnd = new DateTime(2021, 1, 20, 0, 0, 0); * object[] hisArgs = { hisStart, hisEnd, 0, 1000, true, "All" }; * var hisResult = pointObject2.InvokeMethod("Historic.RawValues", hisArgs); * Console.WriteLine(hisResult); * Console.ReadKey(); */ connection.Disconnect(); return(0); }
async static Task Main(string[] args) { if (args.Length != 5) { Console.WriteLine("Usage: SetAndWatchInternalPoint \"username\" \"password\" \"Point-Name\" \"Value\" \"Watch-Point-Name\" "); return; } string user = args[0]; string pass = args[1]; string pointname = args[2]; string valuetext = args[3]; string watchpointname = args[4]; double valuedouble; if (!double.TryParse(valuetext, out valuedouble)) { Console.WriteLine("Value is not numeric"); return; } ClearScada.Client.Simple.Connection connection; var node = new ClearScada.Client.ServerNode(ClearScada.Client.ConnectionType.Standard, "127.0.0.1", 5481); connection = new ClearScada.Client.Simple.Connection("Utility"); IServer AdvConnection; try { connection.Connect(node); AdvConnection = node.Connect("Utility", false); } catch (CommunicationsException) { Console.WriteLine("Unable to communicate with Geo SCADA server."); return; } if (!connection.IsConnected) { Console.WriteLine("Not connected to Geo SCADA server."); return; } using (var spassword = new System.Security.SecureString()) { foreach (var c in pass) { spassword.AppendChar(c); } try { connection.LogOn(user, spassword); AdvConnection.LogOn(user, spassword); } catch (AccessDeniedException) { Console.WriteLine("Access denied, incorrect user Id or password"); return; } catch (PasswordExpiredException) { Console.WriteLine("Credentials expired."); return; } } // Set event callback AdvConnection.TagsUpdated += TagUpdateEvent; // Disconnect Callback AdvConnection.StateChanged += DBStateChangeEvent; AdvConnection.AdviseStateChange(); // Register for change for this point // ReadSeconds is the interval for the Server to watch for change. Be careful not to set this small int ReadSeconds = 10; try { int RegisterId = 1; // Use a unique number for each point waited for (not needed to be same as Object Id) // Registration is by point name, specify the field which has to change (could use CurrentTime to catch every change). AdvConnection.AddTags(new TagDetails(RegisterId, watchpointname + ".CurrentValue", new TimeSpan(0, 0, ReadSeconds))); } catch (ClearScada.Client.CommunicationsException) { Console.WriteLine("*** Comms exception (AddTags)"); return; } // Get point object to be modified ClearScada.Client.Simple.DBObject pointobject = null; try { pointobject = connection.GetObject(pointname); } catch (Exception e) { Console.WriteLine("Cannot get point object. " + e.Message); return; } // Set value try { pointobject.InvokeMethod("CurrentValue", valuedouble); } catch (Exception e) { Console.WriteLine("Error setting value. " + e.Message); return; } // Wait and watch for changes Console.WriteLine("Waiting for changes"); while (WaitUntilStopped) { await Task.Delay(1000); } // Demo to read historic data /* * var pointObject2 = connection.GetObject("Example Projects.Oil and Gas.Transportation.Inflow Computer.GasFlow"); * DateTime hisStart = new DateTime(2021, 1, 19, 0, 0, 0); * DateTime hisEnd = new DateTime(2021, 1, 20, 0, 0, 0); * object[] hisArgs = { hisStart, hisEnd, 0, 1000, true, "All" }; * var hisResult = pointObject2.InvokeMethod("Historic.RawValues", hisArgs); * Console.WriteLine(hisResult); * Console.ReadKey(); */ connection.Disconnect(); return; }
async static Task Main(string[] args) { if (args.Length != 2) { Console.WriteLine("Usage: EventWatcher \"username\" \"password\" "); return; } string user = args[0]; string pass = args[1]; ClearScada.Client.Simple.Connection connection; var node = new ClearScada.Client.ServerNode(ClearScada.Client.ConnectionType.Standard, "127.0.0.1", 5481); connection = new ClearScada.Client.Simple.Connection("Utility"); IServer AdvConnection; try { connection.Connect(node); AdvConnection = node.Connect("Utility", false); } catch (CommunicationsException) { Console.WriteLine("Unable to communicate with Geo SCADA server."); return; } if (!connection.IsConnected) { Console.WriteLine("Not connected to Geo SCADA server."); return; } using (var spassword = new System.Security.SecureString()) { foreach (var c in pass) { spassword.AppendChar(c); } try { connection.LogOn(user, spassword); AdvConnection.LogOn(user, spassword); } catch (AccessDeniedException) { Console.WriteLine("Access denied, incorrect user Id or password"); return; } catch (PasswordExpiredException) { Console.WriteLine("Credentials expired."); return; } } // Set event callback // subscriptionId is just a unique Id, we just use a Guid (you can make many subscriptions if you want) var subscriptionId = Guid.NewGuid().ToString(); // Filter string is the Server side Alarm Filter String that you can configure in ViewX var filter = "Categories=\"PointState;Security;Action\""; // OPCEventCategory allows you to request properties are sent along with events. // The CategoryId 0x208 identifies the EventCategory and comes from the Database. // The opcvalue is a an OPC property number from the schema ///OPCEventCategory category1 = new OPCEventCategory(0x208); // Analogue alarm ///category1.OPCAttributes.Add(OPCAttr1); ///category1.OPCAttributes.Add(OPCAttr2); ///List<OPCEventCategory> OPCCategories = new List<OPCEventCategory>(); ///OPCCategories.Add(category1); // And add OPCCategories to the AddEventSubscription call below // Register the Event Handler AdvConnection.EventsUpdated += OnEventSubscriptionEvents; // Disconnect Callback AdvConnection.StateChanged += DBStateChangeEvent; AdvConnection.AdviseStateChange(); // Subscribe to Events AdvConnection.AddEventSubscription(subscriptionId, filter); ///, OPCCategories); // Wait and watch for changes Console.WriteLine("Waiting for changes"); while (WaitUntilStopped) { await Task.Delay(1000); } connection.Disconnect(); return; }
static void Main() { string user = "******"; string pass = "******"; ClearScada.Client.Simple.Connection connection; var node = new ClearScada.Client.ServerNode(ClearScada.Client.ConnectionType.Standard, "127.0.0.1", 5481); connection = new ClearScada.Client.Simple.Connection("Utility"); connection.Connect(node); var spassword = new System.Security.SecureString(); foreach (var c in pass) { spassword.AppendChar(c); } connection.LogOn(user, spassword); // Insert point name here ClearScada.Client.Simple.DBObject PointObj = connection.GetObject("New Analog Point"); DateTime now = DateTime.UtcNow; // Add a value Object[] p1 = new Object[4]; p1[0] = 1; p1[1] = 192; p1[2] = now; p1[3] = 1; PointObj.Aggregates["Historic"].InvokeMethod("LoadDataValue", p1); // Various calls to read values back Object[] p2 = new Object[5]; p2[0] = now.AddSeconds(-1); p2[1] = now.AddSeconds(1); p2[2] = 0; p2[3] = true; p2[4] = "All"; object r = PointObj.Aggregates["Historic"].InvokeMethod("RawValue", p2); Console.WriteLine(r); Object[] p3 = new Object[6]; p3[0] = now.AddSeconds(-1); p3[1] = now.AddSeconds(1); p3[2] = 0; p3[3] = 1; p3[4] = true; p3[5] = "All"; object [] k = (object [])PointObj.Aggregates["Historic"].InvokeMethod("RawValues", p3); Console.WriteLine(k[0]); Object[] p4 = new Object[6]; p4[0] = now.AddSeconds(-1); p4[1] = "2S"; p4[2] = 0; p4[3] = 1; p4[4] = true; p4[5] = "All"; object[] q = (object[])PointObj.Aggregates["Historic"].InvokeMethod("RawValuesRange", p4); Console.WriteLine(q[0]); Console.ReadKey(); }