void EstablishConection() { try { // 1. Создание менеджера MyManager = OaSdk.CreateManager(); //2. Инициализация конфигурации менеджера MyManager.Init(ManagerSettings.DefaultApiSettings, args); //3. Запуск менеджера MyManager.StartAsync().Wait(); //4. Информация о соединении. Информация пишется в консоль WinCC_OA Console.WriteLine("Connection to project established"); } catch (Exception e) { Console.WriteLine("Errors (Class ManagerWcc function EstablishConection) " + e); MyManager.Stop(); } }
static void Main(string[] args) { // Create Manager object OaManager myManager = OaSdk.CreateManager(); // Initialize Manager Configuration myManager.Init(ManagerSettings.DefaultApiSettings, args); // Start the Manager and Connect to the OA project with the given configuration myManager.Start(); // Get Access to the ProcessValues var valueAccess = myManager.ProcessValues; var processModel = myManager.ProcessModel; var dateTime = DateTime.Now; var dateTimeUTC = dateTime; dateTimeUTC = DateTime.SpecifyKind(dateTimeUTC, DateTimeKind.Utc); // Output UTC Time Console.WriteLine("test_utc is kind <{0}> <{1}>", dateTimeUTC.Kind, dateTimeUTC.ToString()); // Output Local Time Console.WriteLine("test_localtime is kind <{0}> <{1}>", dateTime.Kind, dateTime.ToString()); // create UTC Time Test DP processModel.CreateDp("test_utc", "ExampleDP_Int"); // create Local Time Test DP processModel.CreateDp("test_localtime", "ExampleDP_Int"); // set Value to 1 // Time gets converted from UTC -> local time -> to UTC by WinCC OA // Time: 2019-05-03T19:21:21+00:00 !! BUG !! valueAccess.SetDpValue(dateTimeUTC, "test_utc.", 1); // set Value to 1 // Time gets converted to UTC by WinCC OA // Time: 2019-05-03T19:19:21+00:00 valueAccess.SetDpValue(dateTime, "test_localtime.", 1); }
static void Main(string[] args) { // Create Manager object OaManager myManager = OaSdk.CreateManager(); // Initialize Manager Configuration myManager.Init(ManagerSettings.DefaultApiSettings, args); // Start the Manager and Connect to the OA project with the given configuration myManager.Start(); // ReadString(section, key, defaultval) OaConfigurationFile file = new OaConfigurationFile(); // get connection params from config string cfg_host = file.ReadString("postgrees", "hostname", "localhost"); string cfg_user = file.ReadString("postgrees", "username", "postgres"); string cfg_pass = file.ReadString("postgrees", "password", "root"); string cfg_dbase = file.ReadString("postgrees", "database", "wincc_data"); Console.WriteLine("=============postgree manager init==============="); Console.WriteLine("Hostname: " + cfg_host); Console.WriteLine("Database: " + cfg_dbase); Console.WriteLine("Username: "******"Password: "******"================================================="); // configs from template string dpNameSet = file.ReadString("postgrees", "dpNameSet", "ExampleDP_Arg2."); string dpNameConnect = file.ReadString("postgrees", "dpNameConnect", "ExampleDP_Arg1."); // prepare connection string npgsql var connect_string = String.Format("Host={0};Username={1};Password={2};Database={3}", cfg_host, cfg_user, cfg_pass, cfg_dbase); NpgsqlConnection conn = new NpgsqlConnection(connect_string); try { conn.Open(); } catch (Exception e) { Console.WriteLine("Error open connection database"); Console.WriteLine("Connection string: " + connect_string); Console.WriteLine(e.Message); myManager.Stop(); } // Get List datapoint to connect var valueAccess = myManager.ProcessValues; OaDpValueItem oaDpList = valueAccess.GetDpValue("_SYBCOM_HISTORY_LIST.dps"); // convert datapoints str to list List <string> dps = strToList(oaDpList.DpValue.ToString(), '|'); string wcc_query = "SELECT '_original.._value' FROM '{"; string dba_query = "CALL public.new_data( @dp, @val)"; foreach (var dp in dps) { if (dp != dps.Last <string>()) { wcc_query += dp + ","; } else { wcc_query += dp + "}'"; } } OaDpQuerySubscription hisQuerySubscription = valueAccess.CreateDpQuerySubscription(); hisQuerySubscription.SetQuery(wcc_query); hisQuerySubscription.ValueChanged += (vcsender, vce) => { var qRecCount = vce.Result.GetRecordCount(); var qColCount = vce.Result.GetColumnCount(); KeyValuePair <string, string>[] vals = new KeyValuePair <string, string> [qRecCount]; string[] temp = new string[2]; for (int i = 0; i < qRecCount; i++) { // vals[i] = new KeyValuePair<string, string>(vce.Result.GetData(i, 0), vce.Result.GetData(i, 1)); using (var cmd = new NpgsqlCommand(dba_query, conn)) { cmd.Parameters.AddWithValue("dp", vce.Result.GetData(i, 0).ToString()); cmd.Parameters.AddWithValue("val", vce.Result.GetData(i, 1).ToString().Replace(',', '.')); try { cmd.ExecuteNonQuery(); } catch (Exception e) { Console.WriteLine("Error query execute"); Console.WriteLine("Query string: " + dba_query); Console.WriteLine("Params: "); Console.WriteLine("DP: " + vce.Result.GetData(i, 0).ToString()); Console.WriteLine("VL: " + vce.Result.GetData(i, 1).ToString().Replace(',', '.')); Console.WriteLine(e.Message); } } } }; // hisQuerySubscription.FireChangedEventForAnswer = true; hisQuerySubscription.StartAsync(); // ============================================================================================================================== // Create Subscription object var mySubscription = valueAccess.CreateDpValueSubscription(); mySubscription.AddDpList("history", dps); // Append Datapoints to subcribe on // mySubscription.AddDp(dpNameConnect); // Define Lambda function for value changed event. Can be done as shon here as Lambda function or as seperate function mySubscription.SingleValueChanged += (vcsender, vce) => { if (vce.Value == null) { return; } if (vce.IsAnswer) { Console.WriteLine("FIRST value: "); } else { Console.WriteLine("Changed value: " + vce.Value.DpValue.ToString()); // foreach (var val in vce.Values) // { // string query = "CALL public.new_data( dp => @dp, val_dp => @val)"; // using (var cmd = new NpgsqlCommand(query, conn)) // { // cmd.Parameters.AddWithValue("dp", val.DpName.ToString()); // cmd.Parameters.AddWithValue("val", val.DpValue.ToString()); // cmd.ExecuteNonQuery(); // } // } } // Console.WriteLine("Received value: " + vce.Values.DpValue.ToString() + " for DPE: " + vce.Value.DpName.ToString()); // vce.Value can be null in error case /* * if(vce.Value == null) * return; * * Console.WriteLine("Received value: " + vce.Value.DpValue.ToString() + " for DPE: " + vce.Value.DpName.ToString()); * * conn.Open(); * using (var cmd = new NpgsqlCommand("INSERT INTO dp_1 (datetime, value) VALUES (CURRENT_TIMESTAMP, @val)", conn)) * { * cmd.Parameters.AddWithValue("val", vce.Value.DpValue.ToString()); * cmd.ExecuteNonQuery(); * } * conn.Close(); * * Console.WriteLine("Added database: " + vce.Value.DpValue.ToString() + " for DPE: " + vce.Value.DpName.ToString()); * * //Set received value on DPE dpNameSet * valueAccess.SetDpValue(dpNameSet, vce.Value.DpValue.ToDouble()); * Console.WriteLine("Set value: " + vce.Value.DpValue.ToString() + " also on DPE: "+dpNameSet); */ }; // If FireChangedEventForAnswer is set to true, the ValueChanged Event is alsed fired for the first answer mySubscription.FireChangedEventForAnswer = true; // Start the subscription and as an additional option wait for the first anwer as result value // mySubscription.StartAsync(); }
static void Main(string[] args) { // Create Manager object OaManager myManager = OaSdk.CreateManager(); // Initialize Manager Configuration myManager.Init(ManagerSettings.DefaultApiSettings, args); // Start the Manager and Connect to the OA project with the given configuration myManager.Start(); // Read from config File Section myCsTest. // ReadString(section, key, defaultval) OaConfigurationFile file = new OaConfigurationFile(); string dpNameSet = file.ReadString("myCsTest", "dpNameSet", "ExampleDP_Arg2."); string dpNameConnect = file.ReadString("myCsTest", "dpNameConnect", "ExampleDP_Arg1."); //Alex code PerformanceCounter cpuCounter; PerformanceCounter ramCounter; PerformanceCounter networkCounter; PerformanceCounter diskCounter; cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total"); ramCounter = new PerformanceCounter("Memory", "Available MBytes"); //networkCounter = new PerformanceCounter("Network Adapter", "Bytes Received/sec"); PerformanceCounterCategory category = new PerformanceCounterCategory("Network Adapter"); String[] instancename = category.GetInstanceNames(); foreach (string name in instancename) { Console.WriteLine(name); } PerformanceCounter[] counterName = category.GetCounters("Intel[R] Dual Band Wireless-AC 8260"); foreach (PerformanceCounter name in counterName) { Console.WriteLine(name.CounterName); } Process[] processlist = Process.GetProcesses(); foreach (Process theprocess in processlist) { if (theprocess.ProcessName.StartsWith("WCC")) { Console.WriteLine("Process: {0} ID: {1}", theprocess.ProcessName, theprocess.Id); } } // Get Access to the ProcessValues var valueAccess = myManager.ProcessValues; // Create Subscription object var mySubscription = valueAccess.CreateDpValueSubscription(); // Append Datapoints to subcribe on mySubscription.AddDp(dpNameConnect); // Define Lambda function for value changed event. Can be done as shon here as Lambda function or as seperate function mySubscription.SingleValueChanged += (vcsender, vce) => { // vce.Value can be null in error case if (vce.Value == null) { return; } Console.WriteLine("Received value: " + vce.Value.DpValue.ToString() + " for DPE: " + vce.Value.DpName.ToString()); //Set received value on DPE dpNameSet valueAccess.SetDpValue(dpNameSet, vce.Value.DpValue.ToDouble()); Console.WriteLine("Set value: " + vce.Value.DpValue.ToString() + " also on DPE: " + dpNameSet); }; // If FireChangedEventForAnswer is set to true, the ValueChanged Event is alsed fired for the first answer mySubscription.FireChangedEventForAnswer = true; // Start the subscription and as an additional option wait for the first anwer as result value mySubscription.StartAsync(); //getCategories(); while (true) { Console.WriteLine(cpuCounter.NextValue() + "%"); Console.WriteLine(ramCounter.NextValue() + "MB"); //Console.WriteLine(networkCounter.NextValue() + "MB/s"); Thread.Sleep(5000); } }
/// <summary> /// Подключение менеджера к проекту /// </summary> /// <param name="args"></param> public static async void EstablishConection(string[] args) { myManager = OaSdk.CreateManager(); myManager.Init(ManagerSettings.DefaultApiSettings, args); await myManager.StartAsync(); }