using System; using System.Collections.Generic; using System.Text; using System.Data; using ICommLayer; using CommLayerFactory; using DBFactory; using CommonLib; namespace WcfControlMonitorLib { /// /// Creator:Richard.liu /// /// 命令开关等全局变量的定义 /// public static class CStaticClass { //扬州晶澳记录跺机所在巷道 public static int YZJA11002 = 0; public static int YZJA11003 = 0; public static int YZJA11004 = 0; public static int YZJA11006 = 0; public static int YZJA11008 = 0; public static int YZJA11010 = 0; public static event CDataSourceChangeEventHandler DataChange; public static void OnDataChange(object sender,CDataChangeEventArgs e) { if (DataChange != null) { DataChange(sender , e); } } public static event RefreshMonitorEventHandler RefreshMonitor; public static void OnRefreshMonitor(RefreshMonitorEventArgs e) { if (RefreshMonitor != null) { RefreshMonitor(e); } } static StringBuilder sss = new StringBuilder(); static StringBuilder[] wv = {new StringBuilder("2") }; static StringBuilder[] witemnames ={ new StringBuilder("") }; static char[] dd = new char[1] { '.' };//20101124 static string[] sp;//20101124 static string _userID; /// /// 用户编号 /// public static string UserID { get { return CStaticClass._userID; } set { CStaticClass._userID = value; } } static int _MessageIndex; static bool _Order;// static bool _ObtainManageTask;// static bool _autoOrder; static bool _handOrder; static bool _tempOrder; static ISendDeviceOrder sdo; //20091102 public static int gcCount = 0; //20091107 static string _movedDeviceAheadTrigger = "1"; /// /// 移动设备是否被提前触发将取 /// public static string MovedDeviceAheadTrigger { get { return CStaticClass._movedDeviceAheadTrigger; } set { if ((value == "0") || (value == "1")) { CStaticClass._movedDeviceAheadTrigger = value; } else { CStaticClass._movedDeviceAheadTrigger = "1"; } } } static string _outDetectArrowIdleGoods = "1"; /// /// 堆垛机出库是否检测目标输送机空闲和有物 /// public static string OutDetectArrowIdleGoods { get { return CStaticClass._outDetectArrowIdleGoods; } set { if ((value == "0") || (value == "1")) { CStaticClass._outDetectArrowIdleGoods = value; } else { CStaticClass._outDetectArrowIdleGoods = "1"; } } } static string _deviceErrorAutoModifyRoutePath = "0"; /// /// 设备发生故障自动变更路径 /// public static string DeviceErrorAutoModifyRoutePath { get { return CStaticClass._deviceErrorAutoModifyRoutePath; } set { if ((value == "0") || (value == "1")) { CStaticClass._deviceErrorAutoModifyRoutePath = value; } else { CStaticClass._deviceErrorAutoModifyRoutePath = "0"; } } } static string _doubleForkWaitTime = "120"; /// /// 多叉关联入库任务允许等待的时间单位(秒):默认120秒 /// public static string DoubleForkWaitTime { get { return CStaticClass._doubleForkWaitTime; } set {int aa; if (int.TryParse(_doubleForkWaitTime,out aa)==true ) { CStaticClass._doubleForkWaitTime = value; } else { CStaticClass._doubleForkWaitTime = "120"; } } } static string _transportTimeout = "5"; /// /// 输送超时最大允许时间单位(分):默认5分钟//20110608 /// public static string TransportTimeout { get { return CStaticClass._transportTimeout; } set { int aa; if (int.TryParse(_transportTimeout,out aa) == true) { CStaticClass._transportTimeout = value; } else { CStaticClass._transportTimeout = "5"; } } } static string _agvAllowSingleFork = "1"; /// /// AGV是否允许单叉动作,:默认允许单叉动作 1 /// public static string AGVAllowSingleFork { get { return CStaticClass._agvAllowSingleFork; } set { if ((value == "0") || (value == "1")) { CStaticClass._agvAllowSingleFork = value; } else { CStaticClass._agvAllowSingleFork = "0"; } } } static string _stockCodeCheck = "^[B|D|G|P][A-Z][0-9]{4}$"; /// /// 条码格式检查 /// public static string StockCodeCheck { get { return _stockCodeCheck; } set { int aa; if (int.TryParse(_stockCodeCheck, out aa) == true) { _stockCodeCheck = value; } else { _stockCodeCheck = "^[B|D|G|P][A-Z][0-9]{4}$"; } } } static string _ManageServiceAddress = "http://localhost:8081"; public static string ManageServiceAddress { get { return CStaticClass._ManageServiceAddress; } set { if (value != "") { CStaticClass._ManageServiceAddress = value; } } } //20100108 /// /// 摄像头服务器IP /// public static string CameraIP = "1"; /// /// 登陆摄像头服务器的用户标识 /// public static string CameraUsername = "1"; /// /// 登陆摄像头服务器的密码 /// public static string CameraPassword = "1"; public static bool IfRemind = false; public static DateTime routetime=DateTime.Now; public static DBOperator dbo =CommonClassLib.AppSettings.dbo; //20130510 //public static DBOperator dbo1 = CommonClassLib.AppSettings.dbo1; //20130510 public static DBOperator dboM = CommonClassLib.AppSettings.dboM; //20130510 static bool _deviceInit; static string _routeSearchMode="0"; static bool _realRefresh=true; public static Model.MDevice devinfo28; //20100609 public static Dictionary serialports=new Dictionary(); static Model.MDevice devinfo; static string _manstatus = " F_Status!=-1 ";//默认,显示调度任务全部队列 static string _monstatus = " F_Status!=-1 ";//默认,显示设备指令全部队列 static StringBuilder manZWhere = new StringBuilder(); /// /// 获取的任务的排(Z)的between条件OR关系 /// public static StringBuilder ManZWhere { get { return CStaticClass.manZWhere; } set { CStaticClass.manZWhere = value; } } //20100607管理数据库类工厂初始化 static string _manDBFactory = dboM.GetValue("ManDBFactory"); /// /// 管理系统的数据库工厂:SQLServerDBFactory,OracleDBFactory,OleDBFactory /// public static string ManDBFactory { get { return CStaticClass._manDBFactory; } set { if ((value == "SQLServerDBFactory") || (value == "OracleDBFactory") || (value == "OleDBFactory")) { CStaticClass._manDBFactory = value; } else { CStaticClass._manDBFactory = "SQLServerDBFactory"; } } } static string _DBFactory = dbo.GetValue("DBFactory");//20151120调度系统数据库工厂 /// /// 调度系统数据库工厂:SQLServerDBFactory,OracleDBFactory,OleDBFactory /// public static string DBFactory {//20151120调度系统数据库工厂 get { return CStaticClass._DBFactory; } set { if ((value == "SQLServerDBFactory") || (value == "OracleDBFactory") || (value == "OleDBFactory")) { CStaticClass._DBFactory = value; } else { CStaticClass._DBFactory = "SQLServerDBFactory"; } } } /// /// 显示调度任务全部队列" F_Status!=-1 ";等待队列" F_Status=0 ";运行队列" F_Status=1 "; /// public static string Manstatus { get { return CStaticClass._manstatus; } set { CStaticClass._manstatus = value; } } /// /// 显示设备指令全部队列" F_Status!=-1 ";等待队列" F_Status=0 ";运行队列" F_Status=1 "; /// public static string Monstatus { get { return CStaticClass._monstatus; } set { CStaticClass._monstatus = value; } } /// /// 是否实时刷新监控和调度任务列表 /// public static bool RealRefresh { get { return CStaticClass._realRefresh; } set { CStaticClass._realRefresh = value; } } /// /// 路径搜索方式:0,按照最优路径选择固定路线;1,每个正在工作的节点作为起始点,向末端节点重新搜索下一个最优路径的节点 /// public static string RouteSearchMode { get { return CStaticClass._routeSearchMode; } set { if ((value == "0") || (value == "1")) { CStaticClass._routeSearchMode = value; } else { CStaticClass._routeSearchMode = "0"; } } } /// /// 执行自动命令开关 /// public static bool AutoOrder { get { return CStaticClass._autoOrder; } set { CStaticClass._autoOrder = value; } } /// /// 执行手工命令开关 /// public static bool HandOrder { get { return CStaticClass._handOrder; } set { CStaticClass._handOrder = value; } } /// /// 执行临时管理命令开关 /// public static bool TempOrder { get { return CStaticClass._tempOrder; } set { CStaticClass._tempOrder = value; } } /// /// 监控发送消息索引 /// public static int MessageIndex { get { return CStaticClass._MessageIndex; } set { if (value > 240) { value = 1; } CStaticClass._MessageIndex = value; } } /// /// 命令开关是否打开 /// public static bool Order { get { return CStaticClass._Order; } set { CStaticClass._Order = value; } } /// /// 是否获取调度任务 /// public static bool ObtainManageTask { get { return _ObtainManageTask; } set { _ObtainManageTask = value; } } /// /// 是否执行设备初始化命令 /// public static bool DeviceInit { get { return CStaticClass._deviceInit; } set { CStaticClass._deviceInit = value; } } public static void ReConnect() { //20100127 //SimensProdave6.CSimensProdave6_S7.InitCount = 0; SocketsTCPIP.CClientTCPIP.TcpIPInitCount =new Dictionary(); OPCClient.CCommonOPCClient.ConnectCount = new Dictionary(); } static StringBuilder sql = new StringBuilder(); public static int[] DeviceStateAllReturns; public static string GetDeviceReadSubscription(int deviceindex) {//20110216 //object lockthis = new object(); //lock (lockthis) { DataView dv = dbo.ExceSQL(string.Format("SELECT F_ReadSubscription FROM T_Base_Device WHERE (F_DeviceIndex = {0})",deviceindex)).Tables[0].DefaultView; if (dv.Count > 0) { return dv[0]["F_ReadSubscription"].ToString(); } else { return null; } } } /// /// 20110216支持多个S7Connnection组态OPC /// public static Dictionary MutiReadSubscriptionDeviceStateReturns=new Dictionary(); public static Dictionary MutiReadSubscriptionDeviceSplitReturns = new Dictionary(); /// /// 取得所有光电开关的信号 /// //public static void GetAllReturns() //{//20110216 // try // { // DataView dv = dbo.ExceSQL("SELECT F_DeviceIndex,F_S7Connection FROM T_Base_Device WHERE (F_DeviceKindIndex = 28)").Tables[0].DefaultView; // if (dv.Count > 0) // { // for (int i = 0; i < dv.Count; i++) // { // gds = CommModeCreate.CreateGetDeviceState(Convert.ToInt32(dv[i]["F_DeviceIndex"])); // MutiS7ConnReturns[dv[i]["F_S7Connection"].ToString()] = gds.GetDeviceState(Convert.ToInt32(dv[i]["F_DeviceIndex"]), 0); // if (gds.CommLayerError != null) // { // RefreshMonitorEventArgs rea = new RefreshMonitorEventArgs("tsStatus", "取得所有光电开关的信号时:" + gds.CommLayerError); // OnRefreshMonitor(rea); // } // } // } // else // { // MutiS7ConnReturns = null; // } // } // catch (Exception ex) // { // RefreshMonitorEventArgs rea = new RefreshMonitorEventArgs("tsStatus", "取得所有光电开关的信号时:" + ex.Message); // OnRefreshMonitor(rea); // return; // } //} /// /// 20101118根据设备号和bit位,取得F_SplitByte里的光电bit值:0,1 /// /// /// /// public static int GetDevicePhotoelectric(int deviceIdx,int abit) { try { devinfo =Model.CGetInfo.GetDeviceInfo(deviceIdx); if (devinfo != null) { switch (abit) { case 0: return devinfo.SplitByte_0; case 1: return devinfo.SplitByte_1; case 2: return devinfo.SplitByte_2; case 3: return devinfo.SplitByte_3; case 4: return devinfo.SplitByte_4; case 5: return devinfo.SplitByte_5; case 6: return devinfo.SplitByte_6; case 7: return devinfo.SplitByte_7; } return -9999; } else { return -9999; } #region 旧版标准化 ////20110216 //DeviceStateAllReturns = CStaticClass.MutiReadSubscriptionDeviceSplitReturns[GetDeviceReadSubscription(deviceIdx)]; //if (DeviceStateAllReturns != null) //{ // #region 获取开关量的值 // devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx); // int glen = 0; // int IfVis = 0; // if (devinfo.SplitByte != -1) // { // //20110216 // devinfo28 = Model.CGeneralFunction.GetDeviceReadSubscriptionDB2Data(new StringBuilder(devinfo.ReadSubscription)); // int temp = devinfo.SplitByte - devinfo28.SplitByte; // if (abit > 7) // { // glen = abit - 8; // temp = temp + 1; // } // else // { // glen = abit; // } // if (temp >= 0) // { // IfVis = CommonClassLib.CCarryConvert.GetBitFromInteger(DeviceStateAllReturns[temp], glen); // return IfVis; // } // else // { // return -1; // } // } // else // { // return -1; // } // #endregion //} //else //{ // return -1; //} #endregion } catch (Exception ex) { RefreshMonitorEventArgs rea = new RefreshMonitorEventArgs("tsStatus", string.Format("取得光电开关的信号时:{0}" ,ex.StackTrace+ex.Message )); OnRefreshMonitor(rea); return -1; } } /// /// //20101124根据【设备号.bit位】的字符串,取得F_SplitByte里的光电bit值:0,1 /// /// /// /// public static int GetDevicePhotoelectric(string devicebit) { sp = devicebit.Split(dd);//20101124 if (sp.GetLength(0) <= 1) return -1; int deviceIdx,abit; int.TryParse(sp[0], out deviceIdx); int.TryParse(sp[1], out abit); try { devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx); if (devinfo != null) { switch (abit) { case 0: return devinfo.SplitByte_0; case 1: return devinfo.SplitByte_1; case 2: return devinfo.SplitByte_2; case 3: return devinfo.SplitByte_3; case 4: return devinfo.SplitByte_4; case 5: return devinfo.SplitByte_5; case 6: return devinfo.SplitByte_6; case 7: return devinfo.SplitByte_7; } return -9999; } else { return -9999; } #region 旧版标准化 ////20110216 //DeviceStateAllReturns = CStaticClass.MutiReadSubscriptionDeviceSplitReturns[GetDeviceReadSubscription(deviceIdx)]; //if (DeviceStateAllReturns != null) //{ // #region 获取开关量的值 // devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx); // int glen = 0; // int IfVis = 0; // if (devinfo.SplitByte != -1) // { // devinfo28 = Model.CGeneralFunction.GetDeviceReadSubscriptionDB2Data(new StringBuilder(devinfo.ReadSubscription)); // int temp = devinfo.SplitByte - devinfo28.SplitByte; // if (abit > 7) // { // glen = abit - 8; // temp = temp + 1; // } // else // { // glen = abit; // } // if (temp >= 0) // { // IfVis = CommonClassLib.CCarryConvert.GetBitFromInteger(DeviceStateAllReturns[temp], glen); // return IfVis; // } // else // { // return -1; // } // } // else // { // return -1; // } // #endregion //} //else //{ // return -1; //} #endregion } catch (Exception ex) { RefreshMonitorEventArgs rea = new RefreshMonitorEventArgs("tsStatus", string.Format("取得光电开关的信号时:{0}" ,ex.StackTrace+ex.Message )); OnRefreshMonitor(rea); return -9999; } } /// /// 状态:0空闲;1运行;2故障;3离线;4被停用;5动作完成 /// 取得指定设备索引的设备状态:[0]读写标志;[1]状态;[2]任务号;[3]X坐标;[4]Y坐标;[5]设备索引 /// /// /// 设备索引 /// public static int[] GetDeviceState(int deviceIdx) { int[] states = new int[6]{1,0,0,0,0,deviceIdx}; devinfo =Model.CGetInfo.GetDeviceInfo(deviceIdx); if (devinfo != null) { states[1] = devinfo.RunState; return states; } else { return null; } #region 旧版标准化程序 //Model.MDevice askdev; //DataView dvbc; //string s = DateTime.Now.Millisecond.ToString(); //try //{ // //20110216 // DeviceStateAllReturns = CStaticClass.MutiReadSubscriptionDeviceStateReturns[GetDeviceReadSubscription(deviceIdx)]; // string s1 = DateTime.Now.Millisecond.ToString(); // if (DeviceStateAllReturns != null) // { // #region 获取设备状态 // devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx); // if (devinfo.Dbw2Address != -1) // { // //20100108 // //DataView dv; // //DataView dvM; // //Model.MDevice askdev; // //20110216 // devinfo28 = Model.CGeneralFunction.GetDeviceReadSubscriptionDB2Data(new StringBuilder(devinfo.ReadSubscription)); // int temp = devinfo.Dbw2Address - devinfo28.Dbw2Address; // decimal glen = devinfo.Dbw2Getlength; // //20100108 // states = new int[6]; // wv[0].Remove(0, wv[0].Length); // wv[0].Append("2"); // witemnames[0].Remove(0, witemnames[0].Length); // witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(",byte").Append(Convert.ToString(devinfo.Dbw2Address + 0)); // sdo = CommModeCreate.CreateSendDeviceOrder(deviceIdx); // switch (devinfo.DeviceKind.ToString()) // { // #region 现场控制触摸屏申请信息(16个字节) // case "22": // if (DeviceStateAllReturns[temp] != 1) return null; // states = new int[16]; // states[0] = 0; // states[1] = deviceIdx; // states[2] = DeviceStateAllReturns[temp + 1];//命令字 // states[3] = (DeviceStateAllReturns[temp + 2] << 8) + DeviceStateAllReturns[temp + 3];//设备索引 // states[4] = (DeviceStateAllReturns[temp + 4] << 8) + DeviceStateAllReturns[temp + 5];//任务号 // askdev = Model.CGetInfo.GetDeviceInfo(states[3]); // //states[2];//命令字 // //states[3];//设备索引(当前申请设备的索引) // //states[4];//任务号(需要修改目标位置的任务号) // //20091102 // if (askdev == null) // { // wv[0].Remove(0, wv[0].Length); // wv[0].Append("37"); // sdo.WriteDBData(witemnames, wv);//20091013 // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "37申请的设备号不存在"); // return null; // } // int bcz = 0; // StringBuilder barcode = new StringBuilder(); // for (int j = 6; j < 16; j++) // { // bcz = bcz + DeviceStateAllReturns[temp + j]; // barcode.Append(Convert.ToChar(DeviceStateAllReturns[temp + j]).ToString().ToUpper()); // states[j - 1] = DeviceStateAllReturns[temp + j]; // } // //20090902新增加arraylength // if (IsEquals(devinfo.ReturnMessage, states, 5) == false) // { // devinfo.ReturnMessage = states; // Model.CGetInfo.SetDeviceMessage(devinfo); // sss.Remove(0, sss.Length); // sss.Append("**触摸屏设备索引" + states[1]).Append("**命令字" + states[2]) // .Append("**申请的设备索引" + states[3]).Append("**申请的任务号" + states[4]).Append("**申请的条码" + barcode); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到现场控制触摸屏申请信息", deviceIdx.ToString(), sss.ToString()); // } // #region 申请重发当前设备指令(1) // if (states[2] == 1)//命令字 // { // if (states[4] == 0)//无任务号 // { // if (bcz == 0)//无条码号 // { // //32申请的任务号和条形码都不存在 // wv[0].Remove(0, wv[0].Length); // wv[0].Append("32"); // sdo.WriteDBData(witemnames, wv);//20091013 // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "32申请的任务号和条形码都不存在"); // return null; // } // else//有条码号 // { // #region 有条码号 // //DataView dv = dbo.ExceSQL("SELECT F_BarCode, F_Askkind, F_DeviceIndex FROM T_Base_PLC_Ask where F_DeviceIndex=" + DeviceIndex).Tables[0].DefaultView; // //if (dv.Count > 0) // //{ // // if (barcode == dv[i]["F_BarCode"].ToString()) // // { // // return null; // // } // // else // // { // if (askdev.UseCommonDB == "1") // { // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,").Append( // "F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_TxtParam = '").Append( // barcode).Append("' order by F_MonitorIndex asc"); // } // else // {//20090928 and F_DeviceIndex=" + states[3] + " // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,").Append( // "F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_TxtParam = '").Append( // barcode).Append("' order by F_MonitorIndex asc"); // } // //20100108 // dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvbc.Count > 0) // { // if (askdev.UseCommonDB == "1") // { // //20090915 // sql.Remove(0, sql.Length); // sql.Append("update T_Monitor_Task set F_AheadDetect='',F_DeviceIndex=").Append(states[3]).Append(" where F_MonitorIndex=").Append(dvbc[0]["F_MonitorIndex"]).Append(""); // dbo.ExceSQL(sql.ToString()); // } // //wv[0] = "4"; // //sdo.WriteDBData(witemnames, wv); // return states; // } // else // { // //35申请的设备号和条形码不匹配 // wv[0].Remove(0, wv[0].Length); // wv[0].Append("35"); // sdo.WriteDBData(witemnames, wv);//20091013 // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "35申请的设备号和条形码不匹配"); // return null; // } // // } // //} // #endregion // } // } // else//有任务号 // { // #region 有任务号 // //DataView dv = dbo.ExceSQL("SELECT F_TaskIndex, F_Askkind, F_DeviceIndex FROM T_Base_PLC_Ask where F_DeviceIndex=" + DeviceIndex).Tables[0].DefaultView; // //if (dv.Count > 0) // //{ // // if (states[4] == dv[i]["F_TaskIndex"].ToString()) // // { // // return null; // // } // // else // // { // if (askdev.UseCommonDB == "1") // { // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,").Append( // "F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_MonitorIndex = '").Append( // states[4]).Append("' order by F_MonitorIndex asc"); // } // else // {//20090928 and F_DeviceIndex=" + states[3] + " // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,").Append( // "F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_MonitorIndex = '").Append( // states[4]).Append("' order by F_MonitorIndex asc"); // } // //20101008 // dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvbc.Count > 0) // { // if (askdev.UseCommonDB == "1") // { // //20090915 // sql.Remove(0, sql.Length); // sql.Append("update T_Monitor_Task set F_AheadDetect='',F_DeviceIndex=").Append(states[3]).Append(" where F_MonitorIndex=").Append(dvbc[0]["F_MonitorIndex"]); // dbo.ExceSQL(sql.ToString()); // } // //RestoreDevice(Convert.ToInt32(dvbc[0]["F_MonitorIndex"])); // //wv[0] = "4"; // //sdo.WriteDBData(witemnames, wv); // ////记录任务号 // //dbo.ExceSQL("update T_Base_PLC_Ask set F_TaskIndex='" + states[4] // // + "' where F_DeviceIndex=" + DeviceIndex); // return states; // } // else // { // //36申请的设备号和任务号不匹配 // wv[0].Remove(0, wv[0].Length); // wv[0].Append("36"); // sdo.WriteDBData(witemnames, wv);//20091013 // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "36申请的设备号和任务号不匹配"); // return null; // } // // } // //} // #endregion // } // } // #endregion // #region 申请修改当前设备所执行任务目标位置(2) // else if (states[2] == 2)//命令字 // { // //申请修改当前设备所执行任务目标位置的F_TaskIndex重复时不允许相应申请 // return states; // } // #endregion // #region 上报完成(3) // else if (states[2] == 3)//命令字 // { // if (states[4] == 0)//无任务号 // { // if (bcz == 0)//无条码号 // { // //32申请的任务号和条形码都不存在 // wv[0].Remove(0, wv[0].Length); // wv[0].Append("32"); // sdo.WriteDBData(witemnames, wv);//20091013 // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "32申请的任务号和条形码都不存在"); // return null; // } // else//有条码号 // { // #region 有条码号 // //20100108 // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,").Append( // "F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_TxtParam = '").Append( // barcode).Append("' order by F_MonitorIndex asc"); // dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvbc.Count > 0) // { // return states; // } // else // { // //30申请的条码号不存在 // wv[0].Remove(0, wv[0].Length); // wv[0].Append("30"); // sdo.WriteDBData(witemnames, wv);//20091013 // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "30申请的条码号不存在"); // return null; // } // #endregion // } // } // else // { // #region 有任务号 // //DataView dv = dbo.ExceSQL("SELECT F_TaskIndex, F_Askkind, F_DeviceIndex FROM T_Base_PLC_Ask where F_DeviceIndex=" + DeviceIndex).Tables[0].DefaultView; // //if (dv.Count > 0) // //{ // // if (states[4] == dv[i]["F_TaskIndex"].ToString()) // // { // // return null; // // } // // else // // { // //and F_DeviceIndex=" + states[3] + " // //20100108 // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,").Append( // "F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_MonitorIndex = '").Append( // states[4]).Append("' order by F_MonitorIndex asc"); // dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvbc.Count > 0) // { // //wv[0] = "2"; // //sdo.WriteDBData(witemnames, wv); // ////记录任务号 // //dbo.ExceSQL("update T_Base_PLC_Ask set F_TaskIndex='" + states[4] // // + "' where F_DeviceIndex=" + DeviceIndex); // return states; // } // else // { // //31申请的任务号不存在 // wv[0].Remove(0, wv[0].Length); // wv[0].Append("31"); // sdo.WriteDBData(witemnames, wv);//20091013 // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "31申请的任务号不存在"); // return null; // } // // } // //} // #endregion // } // } // #endregion // #region 删除当前设备所执行的任务(4)(托盘拿走) // else if (states[2] == 4)//命令字 // { // //20090915 // if (states[4] == 0)//无任务号 // { // if (bcz == 0)//无条码号 // { // //32申请的任务号和条形码都不存在 // wv[0].Remove(0, wv[0].Length); // wv[0].Append("32"); // sdo.WriteDBData(witemnames, wv);//20091013 // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "32申请的任务号和条形码都不存在"); // return null; // } // else//有条码号 // { // #region 有条码号 // //20100108 // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,").Append( // "F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_TxtParam = '").Append( // barcode).Append("' order by F_MonitorIndex asc"); // dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvbc.Count > 0) // { // return states; // } // else // { // //30申请的条码号不存在 // wv[0].Remove(0, wv[0].Length); // wv[0].Append("30"); // sdo.WriteDBData(witemnames, wv);//20091013 // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "30申请的条码号不存在"); // return null; // } // #endregion // } // } // else // {//20090915 // #region 有任务号 // //20100108 // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,").Append( // "F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_MonitorIndex = '").Append( // states[4]).Append("' order by F_MonitorIndex asc"); // dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvbc.Count > 0) // { // return states; // } // else // { // //31申请的任务号不存在 // wv[0].Remove(0, wv[0].Length); // wv[0].Append("31"); // sdo.WriteDBData(witemnames, wv);//20091013 // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "31申请的任务号不存在"); // return null; // } // #endregion // } // } // #endregion // break; // #endregion // #region 机器人码垛信息 // case "24": // if (DeviceStateAllReturns[temp] != 1) return null; // states[0] = 0; // states[1] = deviceIdx; // states[2] = DeviceStateAllReturns[temp + 1];//机器人动作:1-取货完成;2-放货完成;3-托盘码垛完成 // states[3] = DeviceStateAllReturns[temp + 2];//托盘码垛数量 // //sdo.WriteDBData(witemnames, wv); // devinfo.ReturnMessage = states; // Model.CGetInfo.SetDeviceMessage(devinfo); // //string ssss = ""; // //for (int j = 0; j <= 3; j++) // //{ // // ssss += "**" + states[j].ToString(); // //} // //CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "CGetDeviceState", deviceIdx.ToString(), ssss); // break; // #endregion // #region 其他设备 // case "1"://堆垛机 // states[0] = DeviceStateAllReturns[temp];//读写标志 // states[1] = DeviceStateAllReturns[temp + 1];//状态 // states[2] = (DeviceStateAllReturns[temp + 2] << 8) + DeviceStateAllReturns[temp + 3];//任务号 // states[3] = DeviceStateAllReturns[temp + 7] + (DeviceStateAllReturns[temp + 6] << 8) + (DeviceStateAllReturns[temp + 5] << 16) + (DeviceStateAllReturns[temp + 4] << 32);//X坐标 // states[4] = DeviceStateAllReturns[temp + 11] + (DeviceStateAllReturns[temp + 10] << 8) + (DeviceStateAllReturns[temp + 9] << 16) + (DeviceStateAllReturns[temp + 8] << 32);//Y坐标 // states[5] = deviceIdx;//设备号索引 // if (IsEquals(devinfo.ReturnMessage, states, 3) == false) // { // devinfo.ReturnMessage = states; // Model.CGetInfo.SetDeviceMessage(devinfo); // sss.Remove(0, sss.Length); // sss.Append("**读标志" + states[0]).Append("**状态" + states[1]).Append("**任务号" + states[2]) // .Append("**列坐标" + states[3]).Append("**层坐标" + states[4]); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到堆垛机状态", deviceIdx.ToString(), sss.ToString()); // } // break; // case "2"://输送机 // states[0] = DeviceStateAllReturns[temp];//读写标志 // states[1] = DeviceStateAllReturns[temp + 1];//状态 // states[2] = (DeviceStateAllReturns[temp + 2] << 8) + DeviceStateAllReturns[temp + 3];//任务号 // states[3] = 0; // states[4] = 0; // states[5] = deviceIdx;//设备号索引 // if (IsEquals(devinfo.ReturnMessage, states, 3) == false) // { // devinfo.ReturnMessage = states; // Model.CGetInfo.SetDeviceMessage(devinfo); // sss.Remove(0, sss.Length); // sss.Append("**读标志" + states[0]).Append("**状态" + states[1]).Append("**任务号" + states[2]); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到输送机状态", deviceIdx.ToString(), sss.ToString()); // } // break; // case "4"://RGV // states[0] = DeviceStateAllReturns[temp];//读写标志 // states[1] = DeviceStateAllReturns[temp + 1];//状态 // states[2] = (DeviceStateAllReturns[temp + 2] << 8) + DeviceStateAllReturns[temp + 3];//任务号 // states[3] = DeviceStateAllReturns[temp + 7] + (DeviceStateAllReturns[temp + 6] << 8) + (DeviceStateAllReturns[temp + 5] << 16) + (DeviceStateAllReturns[temp + 4] << 32);//X坐标 // states[4] = 0; // states[5] = deviceIdx;//设备号索引 // if (IsEquals(devinfo.ReturnMessage, states, 3) == false) // { // devinfo.ReturnMessage = states; // Model.CGetInfo.SetDeviceMessage(devinfo); // sss.Remove(0, sss.Length); // sss.Append("**读标志" + states[0]).Append("**状态" + states[1]).Append("**任务号" + states[2]).Append("**X坐标" + states[3]); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "CGetDeviceState", deviceIdx.ToString(), sss.ToString()); // } // break; // #endregion // #region 高端及相关设备 // case "31"://工位输送机 // states[0] = DeviceStateAllReturns[temp];//读写标志 // states[1] = DeviceStateAllReturns[temp + 1];//状态 // StringBuilder barcode1 = new StringBuilder(); // for (int i = 2; i <= 7; i++) // { // barcode1.Append(Convert.ToChar(DeviceStateAllReturns[temp + i])); // } // states[2] = GetMonitorTaskIndexFromBarCode(barcode1); // states[3] = 0; // states[4] = 0; // states[5] = deviceIdx;//设备号索引 // if (IsEquals(devinfo.ReturnMessage, states, 3) == false) // { // devinfo.ReturnMessage = states; // Model.CGetInfo.SetDeviceMessage(devinfo); // sss.Remove(0, sss.Length); // sss.Append("**读标志" + states[0]).Append("**状态" + states[1]).Append("**条码号" + barcode1 + "**任务号" + states[2]); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到工位输送机状态", deviceIdx.ToString(), sss.ToString()); // } // break; // case "32"://工位触摸屏 // if (DeviceStateAllReturns[temp] != 1) return null; // states = new int[16]; // states[0] = 0; // states[1] = deviceIdx; // states[2] = DeviceStateAllReturns[temp + 1];//命令字 // states[3] = (DeviceStateAllReturns[temp + 2] << 8) + DeviceStateAllReturns[temp + 3];//设备索引 // int bcz11 = 0; // StringBuilder barcode11 = new StringBuilder(); // for (int j = 6; j <= 11; j++) // { // bcz11 = bcz11 + DeviceStateAllReturns[temp + j]; // barcode11.Append(Convert.ToChar(DeviceStateAllReturns[temp + j]).ToString().ToUpper()); // states[j - 1] = DeviceStateAllReturns[temp + j]; // } // states[4] = GetMonitorTaskIndexFromBarCode(barcode11);//任务号 // askdev = Model.CGetInfo.GetDeviceInfo(states[3]); // //states[2];//命令字 // //states[3];//设备索引(当前申请设备的索引) // //states[4];//任务号(需要修改目标位置的任务号) // //20091102 // if (askdev == null) // { // wv[0].Remove(0, wv[0].Length); // wv[0].Append("34"); // sdo.WriteDBData(witemnames, wv);//20091013 // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "34申请的设备号不存在"); // return null; // } // //20090902新增加arraylength // if (IsEquals(devinfo.ReturnMessage, states, 5) == false) // { // devinfo.ReturnMessage = states; // Model.CGetInfo.SetDeviceMessage(devinfo); // sss.Remove(0, sss.Length); // sss.Append("**触摸屏设备索引" + states[1]).Append("**命令字" + states[2]) // .Append("**申请的设备索引" + states[3]).Append("**申请的任务号" + states[4]).Append("**申请的条码" + barcode11); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到现场控制触摸屏申请信息", deviceIdx.ToString(), sss.ToString()); // } // if (bcz11 == 0)//无条码号 // { // //30条形码不存在 // wv[0].Remove(0, wv[0].Length); // wv[0].Append("30"); // sdo.WriteDBData(witemnames, wv);//20091013 // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "30条形码不存在"); // return null; // } // else//有条码号 // { // #region 有条码号 // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,").Append( // "F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_TxtParam = '").Append( // barcode11).Append("' order by F_MonitorIndex asc"); // dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvbc.Count > 0) // { // return states; // } // else // { // //35申请的设备号和条形码不匹配 // wv[0].Remove(0, wv[0].Length); // wv[0].Append("33"); // sdo.WriteDBData(witemnames, wv);//20091013 // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "33申请的设备号和条形码不匹配"); // return null; // } // #endregion // } // #endregion // } // return states; // } // else // { // return null; // } // #endregion // } // else // { // return null; // } //} //catch (Exception ex) //{ // string s1 = DateTime.Now.Millisecond.ToString(); // RefreshMonitorEventArgs rea = new RefreshMonitorEventArgs("tsStatus", "获得设备状态时:" + ex.Message); // OnRefreshMonitor(rea); // return null; //} //finally //{//20100108 // //dv=null; // //dvM = null; // askdev = null; // states = null; // dvbc = null; //} #endregion } public static string GetStringData(int deviceIdx) { try { //20110216 DeviceStateAllReturns = CStaticClass.MutiReadSubscriptionDeviceStateReturns[GetDeviceReadSubscription(deviceIdx)]; if (DeviceStateAllReturns != null) { #region 获取设备状态 devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx); if (devinfo.Dbw2Address != -1) { //20110216 devinfo28 = Model.CGeneralFunction.GetDeviceReadSubscriptionDB2Data(new StringBuilder(devinfo.S7Connection)); int temp = devinfo.Dbw2Address - devinfo28.Dbw2Address; decimal glen = devinfo.Dbw2Getlength; string headstr = DeviceStateAllReturns[temp].ToString(); if (headstr != "1") return null; wv[0].Remove(0, wv[0].Length); wv[0].Append("2"); witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 0)).Append(",b");//20130510 sdo = CommModeCreate.CreateSendDeviceOrder(deviceIdx); switch (devinfo.DeviceKind.ToString()) { #region 字符串信息 case "7"://条形码 sss.Remove(0, sss.Length); for (int i = 1; i <= 10; i++) { sss.Append( Convert.ToChar(DeviceStateAllReturns[temp+i])); } //sdo.WriteDBData(witemnames, wv); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "读PLC条码",deviceIdx.ToString(), "读标志1**条码:"+sss.ToString().ToUpper()); break; case "21"://一号工程码 sss.Remove(0, sss.Length); for (int i = 1; i <= 32; i++) { sss.Append(Convert.ToChar(DeviceStateAllReturns[temp + i])); } //sdo.WriteDBData(witemnames, wv); //CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "CGetDeviceState", deviceIdx.ToString(), strdata); break; #endregion } return sss.ToString().ToUpper() ; } else { return null; } #endregion } else { return null; } } catch (Exception ex) { RefreshMonitorEventArgs rea = new RefreshMonitorEventArgs("tsStatus", string.Format("CStaticClass取得设备字符串信息时:{0}" ,ex.StackTrace+ex.Message )); OnRefreshMonitor(rea); return null; } } /// /// 比较两个值型一维数组变量是否值相等 /// /// 值型一维数组1 /// 值型一维数组2 /// 比较结果,相等则true,否则false public static bool IsEquals(Array array1, Array array2,int arraylength) {//20090902新增加arraylength //比较类型是否一样 if ((array1 == null) || (array2 == null)) return false; if (!Object.ReferenceEquals(array1.GetType(), array2.GetType())) { return false; } //比较长度是否一样 if (array1.GetLength(0) != array2.GetLength(0)) { return false; } //比较成员是否对应相等 ValueType v1, v2; for (int i = 0; i < arraylength; i++) { v1 = (ValueType)array1.GetValue(i); v2 = (ValueType)array2.GetValue(i); if (!v1.Equals(v2)) { return false; } } return true; } static int GetMonitorTaskIndexFromBarCode(StringBuilder BarCode) {//20110216 DataView dv = dbo.ExceSQL(string.Format("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_TxtParam = '{0}') order by F_MonitorIndex asc", BarCode.ToString())).Tables[0].DefaultView; if (dv.Count > 0) { return Convert.ToInt32( dv[0]["F_MonitorIndex"]); } else { return -1; } } /// /// 20160501更新OEE统计相关信息 /// /// 设备索引 /// 日期 /// 管理任务数量 /// 故障次数 /// 报警系数 /// 工作时间 /// 故障时间 /// 报警时间 /// 统计报警或者故障时间问题分类:M机械问题,E电气问题,O其它问题 /// /// /// public static bool UpdateDeviceOEE(int DeviceIndex, DateTime Date, int ManageTaskCount , int ErrorCount, int AlarmCount, int RunTime, int ErrorTime, int AlarmTime,char MEO, int ScheduledRepairTime,out string errText) { errText = string.Empty; string dtdate = Date.Date.ToString("u").Substring(0, 10); try { DataView dv = dbo.ExceSQL(string.Format("SELECT F_DeviceIndex FROM T_DeviceOEE_Today where F_DeviceIndex={0} and F_Date='{1}'", DeviceIndex, dtdate)).Tables[0].DefaultView; if (dv.Count > 0) { if (ManageTaskCount > 0) { dbo.ExecuteSql(string.Format("update T_DeviceOEE_Today set f_ManageTaskCount=f_ManageTaskCount+{0} where F_DeviceIndex={1} and F_Date='{2}'", ManageTaskCount, DeviceIndex, dtdate)); } if (ErrorCount > 0) { dbo.ExecuteSql(string.Format("update T_DeviceOEE_Today set F_ErrorCount=F_ErrorCount+{0} where F_DeviceIndex={1} and F_Date='{2}'", ErrorCount, DeviceIndex, dtdate)); } if (AlarmCount > 0) { dbo.ExecuteSql(string.Format("update T_DeviceOEE_Today set F_AlarmCount=F_AlarmCount+{0} where F_DeviceIndex={1} and F_Date='{2}'", AlarmCount, DeviceIndex, dtdate)); } if (RunTime > 0) { dbo.ExecuteSql(string.Format("update T_DeviceOEE_Today set F_RunTime=F_RunTime+{0} where F_DeviceIndex={1} and F_Date='{2}'", RunTime, DeviceIndex, dtdate)); } if (ErrorTime > 0) { if (MEO == 'M') {//机械问题导致的故障 dbo.ExecuteSql(string.Format("update T_DeviceOEE_Today set F_MErrorTime=F_MErrorTime+{0} where F_DeviceIndex={1} and F_Date='{2}'", ErrorTime, DeviceIndex, dtdate)); } else if (MEO == 'E') {//电气问题导致的故障 dbo.ExecuteSql(string.Format("update T_DeviceOEE_Today set F_EErrorTime=F_EErrorTime+{0} where F_DeviceIndex={1} and F_Date='{2}'", ErrorTime, DeviceIndex, dtdate)); } else {//O//其它问题导致的故障 dbo.ExecuteSql(string.Format("update T_DeviceOEE_Today set F_OErrorTime=F_OErrorTime+{0} where F_DeviceIndex={1} and F_Date='{2}'", ErrorTime, DeviceIndex, dtdate)); } } if (AlarmTime > 0) { if (MEO == 'M') {//机械问题导致的故障 dbo.ExecuteSql(string.Format("update T_DeviceOEE_Today set F_MAlarmTime=F_MAlarmTime+{0} where F_DeviceIndex={1} and F_Date='{2}'", AlarmTime, DeviceIndex, dtdate)); } else if (MEO == 'E') {//电气问题导致的故障 dbo.ExecuteSql(string.Format("update T_DeviceOEE_Today set F_EAlarmTime=F_EAlarmTime+{0} where F_DeviceIndex={1} and F_Date='{2}'", AlarmTime, DeviceIndex, dtdate)); } else {//O//其它问题导致的故障 dbo.ExecuteSql(string.Format("update T_DeviceOEE_Today set F_OAlarmTime=F_OAlarmTime+{0} where F_DeviceIndex={1} and F_Date='{2}'", AlarmTime, DeviceIndex, dtdate)); } } if (ScheduledRepairTime > 0) { dbo.ExecuteSql(string.Format("update T_DeviceOEE_Today set F_ScheduledRepairTime=F_ScheduledRepairTime+{0} where F_DeviceIndex={1} and F_Date='{2}'", ScheduledRepairTime, DeviceIndex, dtdate)); } } else { int MAlarmTime = 0; int EAlarmTime = 0; int OAlarmTime = 0; int MErrorTime = 0; int EErrorTime = 0; int OErrorTime = 0; if (ErrorTime > 0) { if (MEO == 'M') {//机械问题导致的故障 MErrorTime = ErrorTime; } else if (MEO == 'E') {//电气问题导致的故障 EErrorTime = ErrorTime; } else {//O//其它问题导致的故障 OErrorTime = ErrorTime; } } if (AlarmTime > 0) { if (MEO == 'M') {//机械问题导致的故障 MAlarmTime = AlarmTime; } else if (MEO == 'E') {//电气问题导致的故障 EAlarmTime = AlarmTime; } else {//O//其它问题导致的故障 OAlarmTime = AlarmTime; } } devinfo = Model.CGetInfo.GetDeviceInfo(DeviceIndex); object[] ob = new object[14] {DeviceIndex, dtdate,ManageTaskCount,ErrorCount,AlarmCount, RunTime,MErrorTime,EErrorTime,OErrorTime,MAlarmTime,EAlarmTime,OAlarmTime,ScheduledRepairTime,devinfo.ScheduledDailyTaskCount }; dbo.ExecuteSql(string.Format("insert into T_DeviceOEE_Today ( F_DeviceIndex, F_Date, F_ManageTaskCount, F_ErrorCount, F_AlarmCount, F_RunTime, F_MErrorTime, F_EErrorTime, F_OErrorTime, F_MAlarmTime,F_EAlarmTime,F_OAlarmTime, F_ScheduledRepairTime,F_ScheduledDailyTaskCount ) values({0},'{1}',{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{13}) ", ob)); } return true; } catch (Exception ex) { errText = "UpdateDeviceOEE:" + ex.Message + ex.StackTrace; return false; } } } }