public async Task <bool> ReadValues() { string[] valuesToRead = new string[signals.Length]; for (int i = 0; i < signals.Length; i++) { valuesToRead[i] = signals[i].Key; } DataValue[] values = (await OPC.ReadVar(node, valuesToRead)); if (values == null) { return(false); } for (int i = 0; i < values.Length; i++) { if (signals[i].Type == "bool") { signals[i].boolValue = values[i].GetValueOrDefault <bool>(); } else if (signals[i].Type == "string") { signals[i].stringValue = values[i].GetValueOrDefault <string>(); } else if (signals[i].Type == "ushort") { signals[i].numValue = values[i].GetValueOrDefault <ushort>(); } else if (signals[i].Type == "int") { signals[i].intValue = values[i].GetValueOrDefault <int>(); } } return(true); }
public Form1() { InitializeComponent(); tempSensor = new AnalogSensor(1, 0, 40); opc = new OPC(@"\\localhost\ProcessData\Temperature\Configured Aliases\Temperature"); timer1.Start(); }
public async Task <IActionResult> SetStringValue(string variableName, string value) { await OPC.WriteVar(node, new KeyValuePair <string, object>[] { new KeyValuePair <string, object>(variableName, value) }); await ReadValues(); return(RedirectToAction("Index", "Home")); }
public FUJIPID(string OPCTag, string NIDAQConnect_U, string NIDAQConnect_PV) //Constructor with overloading for different simulator/real process { OPC_U = new OPC(OPCTag + "_U", true); OPC_R = new OPC(OPCTag + "_R"); NI_U = new NIDAQ(NIDAQConnect_U); NI_PV = new NIDAQ(NIDAQConnect_PV); }
public async Task <IActionResult> RestartOPC() { await OPC.StartOPC(); await ReadValues(); return(RedirectToAction("Index", "Home")); }
public async Task <IActionResult> SetValues(string[] variableNames, string[] values, string[] types) { int submitCount = values.Count(h => h == "submit"); int submitsEncountered = 0; KeyValuePair <string, object>[] submitSignals = null; KeyValuePair <string, object>[] valuesToSet = new KeyValuePair <string, object> [variableNames.Length - submitCount]; for (int i = 0; i < variableNames.Length; i++) { switch (types[i]) { case "bool": valuesToSet[i - submitsEncountered] = new KeyValuePair <string, object>(variableNames[i], bool.Parse(values[i])); break; case "string": valuesToSet[i - submitsEncountered] = new KeyValuePair <string, object>(variableNames[i], (string)values[i]); break; case "ushort": valuesToSet[i - submitsEncountered] = new KeyValuePair <string, object>(variableNames[i], ushort.Parse(values[i])); break; case "int": valuesToSet[i - submitsEncountered] = new KeyValuePair <string, object>(variableNames[i], int.Parse(values[i])); break; case "submit": if (submitSignals == null) { submitSignals = new KeyValuePair <string, object> [1]; submitSignals[0] = new KeyValuePair <string, object>(variableNames[i], true); } else { submitSignals = submitSignals.Append(new KeyValuePair <string, object>(variableNames[i], true)).ToArray(); } submitsEncountered++; break; default: valuesToSet[i - submitsEncountered] = new KeyValuePair <string, object>(variableNames[i], values[i]); break; } } await OPC.WriteVar(node, valuesToSet); if (submitSignals != null) { await OPC.WriteVar(node, submitSignals); } await ReadValues(); return(RedirectToAction("Index", "Home")); }
public Form1() { InitializeComponent(); TT01 = new AnalogTransmitter("TT01"); Airheater = new Simulator(0.1); trmTick.Enabled = true; PI = new PIController(1); OPC_r = new OPC("r"); OPC_u = new OPC("u", true); }
public AnalogLog(string TransmitterTAG, string DatabaseConnectionString) { Tag = TransmitterTAG; DatabaseConnection = DatabaseConnectionString; OPC_PV = new OPC(Tag + "_PV"); Alarm = new OPC[Alarms.Length]; for (int i = 0; i < Alarms.Length; i++) { Alarm[i] = new OPC(Tag + "_" + Alarms[i]); } }
public AnalogTransmitter(string TagID, double Timestep)//Different constructors depending on the use of simulator/real process and Fuji PID/Software PID { TAG = TagID; OPC_PV = new OPC(TagID + "_PV", true); Alarm = new OPC[Alarms.Length]; AlarmLim = new OPC[Alarms.Length]; Filter = new LowPassFilter(Timestep); for (int i = 0; i < Alarms.Length; i++)//Initializing Reading Limits and writing the alarms to the OPC server { Alarm[i] = new OPC(TAG + "_" + Alarms[i], true); AlarmLim[i] = new OPC(TAG + "_" + Alarms[i] + "_Lim"); } }
public async Task <bool> ToggleValue(string variableName) { DataValue value = (await OPC.ReadVar(node, new string[] { variableName })).FirstOrDefault(); bool variable = value.GetValueOrDefault <bool>(); if (variable == false) { OPC.WriteVar(node, new KeyValuePair <string, object>[] { new KeyValuePair <string, object>(variableName, true) }); } else { OPC.WriteVar(node, new KeyValuePair <string, object>[] { new KeyValuePair <string, object>(variableName, false) }); } return(true); }
public AnalogHMI(string SensorTag, string ControllerTag) { AllAlarms = new OPC[alarms.Length]; AnalogPopup = new AnalogHMIpopup(SensorTag, ControllerTag); AnalogPopup.Hide(); #region Initialize OPC communication for (int i = 0; i < alarms.Length; i++) { AllAlarms[i] = new OPC(SensorTag + alarms[i]);//0=HH,1=H,2=L,3=LL } OPC_PV = new OPC(SensorTag + "_PV"); #endregion }
public AnalogLog(string TransmitterTAG, string DatabaseConnectionString, string ControllerTAG) { Tag = TransmitterTAG; DatabaseConnection = DatabaseConnectionString; OPC_PV = new OPC(Tag + "_PV"); OPC_R = new OPC(ControllerTAG + "_R"); OPC_U = new OPC(ControllerTAG + "_U"); Alarm = new OPC[Alarms.Length]; for (int i = 0; i < Alarms.Length; i++) { Alarm[i] = new OPC(Tag + "_" + Alarms[i]); } withPID = true; }
public AnalogHMIpopup(string SensorTag, string ControllerTAG) { InitializeComponent(); TagID = SensorTag; InitializeCharts(); this.Text = SensorTag; Alarm = new OPC[Alarms.Length]; AlarmLimits = new OPC[Alarms.Length]; for (int i = 0; i < Alarms.Length; i++) { Alarm[i] = new OPC(TagID + "_" + Alarms[i]); AlarmLimits[i] = new OPC(TagID + "_" + Alarms[i] + "_Lim", true); } OPC_PV = new OPC(TagID + "_PV"); OPC_R = new OPC(ControllerTAG + "_R"); OPC_U = new OPC(ControllerTAG + "_U"); }
public Communication() { //加载错误日志记录帮助,20170924 Log.LogSys.Info("启动时间:" + DateTime.Now.ToString("g")); CommLst = new List <CommExamine>(); UITime = new SysTime(); //初始地址字典,对应炉号的各生产时间 Room = new CokeRoom(); PushPlan = new TPushPlan(); StokingPlan = new MStokingPlan(); //开启TCP/IP通讯;20180115 服务器端不用开启 if (!Setting.IsServer) { CommHelper = new SocketHelper(); CommHelper.StartListening(); } OPCInfo = new OPC(); //初始化8辆车 InitCars(); IniTogetherInfo(); //得到工作车的联锁信息 GetCarTogetherInfo(JobCarTogetherInfo, true); GetMTogetherInfo(MJobCarTogetherInfo, true); //得到非工作车的联锁信息******** GetCarTogetherInfo(NonJobCarTogetherInfo, false); GetMTogetherInfo(MNonJobCarTogetherInfo, false); DataWrite = new DataWrite(); CommStatus = new List <CommStatus>(); IniTimer(); if (Setting.IsServer) { PushAndStokingPlan(); //20180115 服务器端处理计划推焦和计划装煤炉号 } //测试用方法 正式编译前应注释掉 20171021 //_BindingTest(); }
public IActionResult SaveSignals(string fileContent) { System.IO.File.WriteAllText("signals.json", fileContent); try { var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("signals.json").Build(); var signals = config.GetSection("PLCSignals").GetChildren().ToArray(); HomeController.signals = new Models.Signal[signals.Count()]; for (int i = 0; i < signals.Count(); i++) { Models.Signal signal = new Models.Signal(); signal.Key = signals[i].Key; signal.Name = (string)signals[i].GetValue(typeof(string), "Name"); signal.Type = (string)signals[i].GetValue(typeof(string), "Type"); signal.Controll = (string)signals[i].GetValue(typeof(string), "Controll"); signal.Sequence = (int)signals[i].GetValue(typeof(int), "Sequence"); try { signal.Devider = (bool)signals[i].GetValue(typeof(bool), "Devider"); } catch { signal.Devider = false; } try { signal.Label = (string)signals[i].GetValue(typeof(string), "Label"); } catch { signal.Label = null; } try { signal.signalGroup = (int)signals[i].GetValue(typeof(int), "SignalGroup"); } catch { signal.signalGroup = -1; } try { signal.Size = (int)signals[i].GetValue(typeof(int), "Size"); } catch { signal.Size = -1; } try { var allowedValues = signals[i].GetSection("AllowedValues").GetChildren(); if (allowedValues == null || allowedValues.Count() <= 0) { signal.AllowedValues = null; } else { signal.AllowedValues = new List <KeyValuePair <string, string> >(); signal.AllowedValues.Add(new KeyValuePair <string, string>("", "")); foreach (var allowedValue in allowedValues) { signal.AllowedValues.Add(new KeyValuePair <string, string>(allowedValue.Key, allowedValue.Value)); } } } catch { signal.AllowedValues = null; } HomeController.signals[i] = signal; } HomeController.signals = HomeController.signals.OrderBy(h => h.Sequence).ToArray(); var plcSettings = config.GetSection("PLCSettings"); string path = "opc.tcp://" + (string)plcSettings.GetValue(typeof(string), "ip"); path += ":" + (string)plcSettings.GetValue(typeof(string), "port"); OPC.SetPath(path); HomeController.node = (int)plcSettings.GetValue(typeof(int), "node"); } catch (Exception e) { Models.Signal signal = new Models.Signal(); signal.Label = "Invalid signal configuration !!!!!"; HMI.Controllers.HomeController.signals = new Models.Signal[2]; HMI.Controllers.HomeController.signals[0] = signal; signal = new Models.Signal(); signal.Label = e.Message; HMI.Controllers.HomeController.signals[1] = signal; } return(RedirectToAction("Index", "Home")); }
public PIDhmi(string PIDtag) { opcR = new OPC(PIDtag + "_R", true); opcU = new OPC(PIDtag + "_U"); }
internal ServiceConfig() { for (int i = 8; i < 13; i++) { var reader = new Reader { Comment = $"\n Readers should be of format[Reader #] and TAG should be [Readers.Read_Tag_#]\n i.e.Reader {i} \u21d4 Readers.Read_Tag_{i}\n ", Address = IPAddress.Loopback.ToString(), PortNum = 6000, ReaderName = $"Reader {i}", Tags = new Reader.ReaderTags() { ReaderTag = new Reader.ReaderTags.ReadTags() { ReadTag = $":RFID Readers.Readers.ReadTags.Read_Tag_{i}", Note = "Required, Type BOOLEAN" }, WriterTag = new Reader.ReaderTags.WriteTags() { Note = "Optional, Type BOOLEAN", WriteTag = $"2:RFID Readers.Readers.WriteTags.Write_Tag_{i}" }, UuidTag = new Reader.ReaderTags.UidTags() { Note = "Required, Type STRING, Tag of unique ID of RFID Tag", UuidTag = $"2:RFID Readers.Readers.UuidTags.Uuid_Tag_{i}" }, ErrorTag = new Reader.ReaderTags.ErrorTags() { Note = "Required, Used for Alarms and Events. Type BOOLEAN,STRING", ErrorBool = $"2:RFID Readers.Readers.AE.Error_B_Station_{i}", ErrorString = $"2:RFID Readers.Readers.AE.Error_S_Station_{i}" } }, TimeOut = 10, Uuid = new Reader.Uid() { UidGuid = Guid.NewGuid(), UidNote = "LEAVE THIS BLANK" }, Active = false }; Readers.Add(reader); } var opc = new OPC() { ServerAddress = IPAddress.Loopback.ToString(), ServerPort = 49320, Auth = new OPC.LogonAuth() { Username = "******", Password = "******", AnonymousLogin = false, Note = "Provide either Username and Password OR AnonymousLogin as true" } }; Server.Add(opc); }
/*---- Start Code Migration ----*/ public void CheckNotifications() { // Check if we need to call BeginInvoke. if (this.InvokeRequired) { // Pass the same function to BeginInvoke, // but the call would come on the correct // thread and InvokeRequired will be false. this.BeginInvoke(new Action(CheckNotifications)); return; } Thread.Sleep(50); //Delay 50ms. // -------------------------------------------- if (OPC.GetNotificationReceived("RequestVerify")) { var mac = this.machine; var _requestVerify = OPC.GetNotifiedBOOL("RequestVerify"); if (_requestVerify) { mac.RequestVerifyCode = true; this.machine = mac; VerityCode(this.machine, null); } else if (!_requestVerify) { mac.RequestVerifyCode = false; this.machine = mac; ResetVerify(this.machine, null); } } // -------------------------------------------- if (OPC.GetNotificationReceived("MachineStatus")) { var mac = this.machine; mac.OnlineFlag = OPC.GetNotifiedSINT("MachineStatus"); this.machine = mac; } // -------------------------------------------- if (OPC.GetNotificationReceived("RequestLogging")) { var mac = this.machine; var _requestFlag = OPC.GetNotifiedBOOL("RequestLogging"); if (_requestFlag) { mac.RequestLogging = true; this.machine = mac; KeepLogging(this.machine, null); } else if (!_requestFlag) { mac.RequestLogging = false; this.machine = mac; ResetComplete(this.machine, null); } } //------------------------------------------------ if (OPC.GetNotificationReceived("TraceabilityRdy")) { if (OPC.GetNotifiedBOOL("TraceabilityRdy")) { this.systemReady = true; } else { this.systemReady = false; } } // -------------------------------------------- if (OPC.GetNotificationReceived("LoggingApp")) { var mac = this.machine; mac.CompletedLogging = OPC.GetNotifiedSINT("LoggingApp"); this.machine = mac; } }
public PIController(double TimeStep, string OPCTag)//KP, Ti, Max/MinU could be inputs to the constructor, but thats for another time { Ts = TimeStep; OPC_R = new OPC(OPCTag + "_R"); OPC_U = new OPC(OPCTag + "_U", true); }