public override IEnumerable <IOTData> GetData() { List <IOTData> iots = new List <IOTData>(); foreach (DLData data in Commands) { byte[] Bt1 = new byte[200]; serialPort.Write(data.Command, 0, data.Command.Length); System.Threading.Thread.Sleep(500); int bytesRead = serialPort.Read(Bt1, 0, 200); if (bytesRead > 0) { try { //计算结果 IOTData _IOTData = new IOTData(); _IOTData.DataCode = data.Address; _IOTData.DataValue = CalcReceive(Bt1, data.Xj); _IOTData.GTime = DateTime.Now; _IOTData.DriveCode = DriveConfig.DriveCode; _IOTData.DriveType = DriveConfig.DriveType; _IOTData.DataName = data.Name; _IOTData.Unit = data.Unit; if (_IOTData.DataValue.Trim().Length > 0) { iots.Add(_IOTData); } } catch { } } } return(iots); }
private IEnumerable <IOTData> GetData(byte[] ReplyMsg) { List <IOTData> Ds = new List <IOTData>(); //大于0说明有收到数据!没有收到就说明发送出去的结果有异常 int iNum = ReplyMsg[2]; if (Commands.Any(n => n.Command[0] == ReplyMsg[0]) == false) { return(null); } SDTCommand TCmd = Commands.Single(n => n.Command[0] == ReplyMsg[0]); //判断是否是同样的命令功能 if (ReplyMsg[1] != TCmd.Command[1]) { return(null); } string strGroup = Guid.NewGuid().ToString("N"); foreach (Result Rs in TCmd.Results) { StringBuilder Sb = new StringBuilder(); Sb.Append(Rs.Expressions); int DataCount = ReplyMsg[2]; //替换公式中的字符 for (int i = 0; i < DataCount; i++) { string strTmp1 = "[D" + i.ToString() + "]"; string strTmp2 = ReplyMsg[StartNum + i].ToString(); Sb.Replace(strTmp1, strTmp2); strTmp2 = null; strTmp1 = null; } try { IOTData _IOTData = new IOTData(); _IOTData.DataCode = Rs.Address; _IOTData.DataName = Rs.Name; _IOTData.DataValue = _CustomFormulas.Computing(Sb.ToString()); _IOTData.DriveCode = DriveConfig.DriveCode; _IOTData.DriveType = DriveConfig.DriveType; _IOTData.GTime = DateTime.Now; _IOTData.Unit = Rs.Unit; if (_IOTData.DataValue.Trim().Length > 0) { Ds.Add(_IOTData); } } catch { } Sb = null; } return(Ds); }
public override IEnumerable <IOTData> GetData() { List <IOTData> iOTs = new List <IOTData>(); foreach (OPCUANode node in DriveConfig.Nodes) { try { IOTData TmpData = new IOTData(); DataValue value = m_OpcUaClient.ReadNode(node.NodeID); // 一个数据的类型是不是数组由 value.WrappedValue.TypeInfo.ValueRank 来决定的 // -1 说明是一个数值 // 1 说明是一维数组,如果类型BuiltInType是Int32,那么实际是int[] // 2 说明是二维数组,如果类型BuiltInType是Int32,那么实际是int[,] if (value.WrappedValue.TypeInfo.BuiltInType == Opc.Ua.BuiltInType.Int32) { if (value.WrappedValue.TypeInfo.ValueRank == -1) { TmpData.DataValue = ((int)value.WrappedValue.Value).ToString(); // 最终值 } else if (value.WrappedValue.TypeInfo.ValueRank == 1) { TmpData.DataValue = System.Text.Json.JsonSerializer.Serialize((int[])value.WrappedValue.Value); // 最终值 } else if (value.WrappedValue.TypeInfo.ValueRank == 2) { TmpData.DataValue = System.Text.Json.JsonSerializer.Serialize((int[, ])value.WrappedValue.Value); // 最终值 } } else if (value.WrappedValue.TypeInfo.BuiltInType == Opc.Ua.BuiltInType.UInt32) { if (value.WrappedValue.TypeInfo.ValueRank == -1) { TmpData.DataValue = ((uint)value.WrappedValue.Value).ToString(); // 最终值 } else if (value.WrappedValue.TypeInfo.ValueRank == 1) { TmpData.DataValue = System.Text.Json.JsonSerializer.Serialize((uint[])value.WrappedValue.Value); // 最终值 } else if (value.WrappedValue.TypeInfo.ValueRank == 2) { TmpData.DataValue = System.Text.Json.JsonSerializer.Serialize((uint[, ])value.WrappedValue.Value); // 最终值 } } else if (value.WrappedValue.TypeInfo.BuiltInType == Opc.Ua.BuiltInType.Float) { if (value.WrappedValue.TypeInfo.ValueRank == -1) { TmpData.DataValue = ((float)value.WrappedValue.Value).ToString(node.Format); // 最终值 } else if (value.WrappedValue.TypeInfo.ValueRank == 1) { TmpData.DataValue = System.Text.Json.JsonSerializer.Serialize((float[])value.WrappedValue.Value); // 最终值 } else if (value.WrappedValue.TypeInfo.ValueRank == 2) { TmpData.DataValue = System.Text.Json.JsonSerializer.Serialize((float[, ])value.WrappedValue.Value); // 最终值 } } else if (value.WrappedValue.TypeInfo.BuiltInType == Opc.Ua.BuiltInType.String) { if (value.WrappedValue.TypeInfo.ValueRank == -1) { TmpData.DataValue = (string)value.WrappedValue.Value; // 最终值 } else if (value.WrappedValue.TypeInfo.ValueRank == 1) { TmpData.DataValue = System.Text.Json.JsonSerializer.Serialize((string[])value.WrappedValue.Value); // 最终值 } else if (value.WrappedValue.TypeInfo.ValueRank == 2) { TmpData.DataValue = System.Text.Json.JsonSerializer.Serialize((string[, ])value.WrappedValue.Value); // 最终值 } } else if (value.WrappedValue.TypeInfo.BuiltInType == Opc.Ua.BuiltInType.DateTime) { if (value.WrappedValue.TypeInfo.ValueRank == -1) { TmpData.DataValue = ((DateTime)value.WrappedValue.Value).ToString("yyyy-MM-dd HH:mm:ss"); // 最终值 } else if (value.WrappedValue.TypeInfo.ValueRank == 1) { TmpData.DataValue = System.Text.Json.JsonSerializer.Serialize((DateTime[])value.WrappedValue.Value); // 最终值 } else if (value.WrappedValue.TypeInfo.ValueRank == 2) { TmpData.DataValue = System.Text.Json.JsonSerializer.Serialize((DateTime[, ])value.WrappedValue.Value); // 最终值 } } TmpData.DataCode = node.Address; TmpData.DataName = node.Name; TmpData.DriveCode = DriveConfig.DriveCode; TmpData.DriveType = DriveConfig.DriveType; TmpData.GTime = DateTime.Now; TmpData.Unit = node.Unit; iOTs.Add(TmpData); } catch (Exception ex) { Console.WriteLine("Read Failed", ex); } } return(iOTs); }
public override IEnumerable <IOTData> GetData() { List <string> response = readData("Q100"); List <IOTData> Ds = new List <IOTData>(); string strGroup = Guid.NewGuid().ToString("N"); Ds.Add(new IOTData { DataCode = "Avail", DataValue = ((response != null && response.Count > 1)? "AVAILABLE" : "UNAVAILABLE"), GTime = DateTime.Now, DriveType = DriveConfig.DriveType, DriveCode = DriveConfig.DriveCode, Unit = "-", DataName = "Avail" }); response = readData("Q104"); if (response != null && response.Count > 1) { var tmpdata = new IOTData { DataCode = "Mode", GTime = DateTime.Now, DriveType = DriveConfig.DriveType, DriveCode = DriveConfig.DriveCode, Unit = "-", DataName = "模式" }; switch (response[1]) { case "(MDI)": tmpdata.DataValue = "MANUAL_DATA_INPUT"; break; case "(JOG)": tmpdata.DataValue = "MANUAL"; break; case "(ZERO RET)": tmpdata.DataValue = "MANUAL"; break; default: tmpdata.DataValue = "AUTOMATIC"; break; } Ds.Add(tmpdata); var tmpZeroRet = new IOTData { DataCode = "ZeroRet", GTime = DateTime.Now, DriveType = DriveConfig.DriveType, DriveCode = DriveConfig.DriveCode, Unit = "-", DataName = "ZeroRet" }; switch (response[1]) { case "(ZERO RET)": tmpZeroRet.DataValue = "NO ZERO X"; break; default: tmpZeroRet.DataValue = "NORMAL"; break; } Ds.Add(tmpZeroRet); response = readData("Q500"); if (response != null && response.Count > 1) { if (response[0] == "PROGRAM") { if (response[1] != "MDI") { Ds.Add(new IOTData { DataCode = "Program", DataValue = response[1], GTime = DateTime.Now, DriveType = DriveConfig.DriveType, DriveCode = DriveConfig.DriveCode, Unit = "-", DataName = "程序" }); } if (response[2] == "IDLE") { Ds.Add(new IOTData { DataCode = "Execution", DataValue = "READY", GTime = DateTime.Now, DriveType = DriveConfig.DriveType, DriveCode = DriveConfig.DriveCode, Unit = "-", DataName = "运行状态" }); } else if (response[2] == "FEED HOLD") { Ds.Add(new IOTData { DataCode = "Execution", DataValue = "INTERRUPTED", GTime = DateTime.Now, DriveType = DriveConfig.DriveType, DriveCode = DriveConfig.DriveCode, Unit = "-", DataName = "运行状态" }); } if (response[2] == "ALARM ON") { Ds.Add(new IOTData { DataCode = "Execution", DataValue = "STOPPED", GTime = DateTime.Now, DriveType = DriveConfig.DriveType, DriveCode = DriveConfig.DriveCode, Unit = "-", DataName = "运行状态" }); Ds.Add(new IOTData { DataCode = "System", DataValue = "Alarm on indicator", GTime = DateTime.Now, DriveType = DriveConfig.DriveType, DriveCode = DriveConfig.DriveCode, Unit = "-", DataName = "系统" }); } else { Ds.Add(new IOTData { DataCode = "Estop", DataValue = "ARMED", GTime = DateTime.Now, DriveType = DriveConfig.DriveType, DriveCode = DriveConfig.DriveCode, Unit = "-", DataName = "停止" }); Ds.Add(new IOTData { DataCode = "System", DataValue = "NORMAL", GTime = DateTime.Now, DriveType = DriveConfig.DriveType, DriveCode = DriveConfig.DriveCode, Unit = "-", DataName = "系统" }); } } else if (response[0] == "STATUS") { if (response[1] == "BUSY") { Ds.Add(new IOTData { DataCode = "Execution", DataValue = "ACTIVE", GTime = DateTime.Now, DriveType = DriveConfig.DriveType, DriveCode = DriveConfig.DriveCode, Unit = "-", DataName = "运行状态" }); } } } // Check to make sure the correct variable is returned Ds.Add(new IOTData { DataCode = "Xact", DataValue = GetVariable(5041) ?? "", GTime = DateTime.Now, DriveType = DriveConfig.DriveType, DriveCode = DriveConfig.DriveCode, Unit = "-", DataName = "X坐标" }); Ds.Add(new IOTData { DataCode = "Yact", DataValue = GetVariable(5042) ?? "", GTime = DateTime.Now, DriveType = DriveConfig.DriveType, DriveCode = DriveConfig.DriveCode, Unit = "-", DataName = "Y坐标" }); Ds.Add(new IOTData { DataCode = "Zact", DataValue = GetVariable(5043) ?? "", GTime = DateTime.Now, DriveType = DriveConfig.DriveType, DriveCode = DriveConfig.DriveCode, Unit = "-", DataName = "Z坐标" }); Ds.Add(new IOTData { DataCode = "SpindleSpeed", DataValue = GetVariable(3027) ?? "", GTime = DateTime.Now, DriveType = DriveConfig.DriveType, DriveCode = DriveConfig.DriveCode, Unit = "-", DataName = "转速" }); } return(Ds); }