using System; using System.Collections.Generic; using System.ServiceModel; using System.Text; using CommonLib; using System.Data; using ICommLayer; using CommLayerFactory; using System.IO; using System.Threading; using System.Management; using System.Xml.Linq; using System.Reflection.Emit; using System.Security.AccessControl; using System.Linq; namespace WcfControlMonitorLib { // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service1”。 /// /// 调度wcf的实现 /// [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] public class SControlMonitor : IControlMonitor, IDisposable { #region 变量定义 Model.MDevice _device = null; public static System.Collections.Hashtable ClientCallbackLists = new System.Collections.Hashtable(); public static System.Collections.Hashtable ClientShowLists = new System.Collections.Hashtable(); /// /// 数据变化事件 /// public static event CDataSourceChangeEventHandler DataChange; /// /// 通道打开事件 /// public static event ClientLogEventHandler ChannelOpen; /// /// 客户端断开服务 /// public static event ClientLogEventHandler ClientLogout; public static event CUpdateDBEventHandler AGVUpdateDB; public static event CUpdateDBEventHandler PLCCommonUpdateDB; public static event CDeviceStateChangeEventHandler CDeviceState; public static event CStringInfoEventHandler SendBarcode; public static event CWriteDarkCasketEventHandler WriteDarkCasket;//20121108 public static event CSendDeviceOrderEventHandler SendDeviceOrder;//20121108 public static event CUpdateDBEventHandler SqlEXEUpdateDB;//20230718richard.liu static DBFactory.DBOperator dbo =new DBFactory.DBOperator();//20130926 static DBFactory.DBOperator dboMan = CStaticClass.dboM;//20130510 static DBFactory.DBOperator dbo1 ; CCommonFunction ccf = new CCommonFunction(); CGetState cgs = new CGetState(); static CControl cctrl = new CControl(); ISendDeviceOrder sdo; Model.MDevice devinfo; Model.MDevice modifypathdevinfo; Model.MDevice askDevinfo; StringBuilder[] wv = { new StringBuilder("2") }; StringBuilder[] witemnames = { new StringBuilder("") }; private Object thisLock = new Object(); ////add by qdty //static bool testflag = false; //static int lastDeskIndex = 0; //static int lastTestIndex = 0; //static int last26003Index = 0; //static int last16012Index = 0; //static int lastlingjianIndex = 0; //static string boxOutPort = "13078,13081,13084,13087,13090,13093,13096,13099,13102,13105,13108,13111,13114,13117,13120,13123,13126,13129,13132,13134"; //static string boxSupplyPort = "23310,23313,23321,23324,23332,23335,23342,23345,23356,23359,23366,23369,23377,23380,23387,23390"; //static string boxPickPort = "23415,23411,23442,23438,23470,23466,23499,23495,23525,23521,23548,23552,23575,23579,23608,23612,23633,23637,23658,23662"; //static Dictionary barScanOutPort = new Dictionary { { 13078, 11 }, { 13081, 12 }, { 13084, 13 }, { 13087, 14 }, { 13090, 15 } // , { 13093, 16 }, { 13096, 17 }, { 13099, 18 }, { 13102, 19 }, { 13105, 20 } // , { 13108, 21 }, { 13111, 22 }, { 13114, 23 }, { 13117, 24 }, { 13120, 25 } // , { 13123, 26 }, { 13126, 27 }, { 13129, 28 }, { 13132, 29 }, { 13134, 30 }}; //static Dictionary barScanSupplyPort = new Dictionary { { 26006, new int[2] { 23310, 23313 } } // , { 26007, new int[2] { 23321, 23324 } } // , { 26008, new int[2] { 23332, 23335 } } // , { 26009, new int[2] { 23342, 23345 } } // , { 26010, new int[2] { 23356, 23359 } } // , { 26011, new int[2] { 23366, 23369 } } // , { 26012, new int[2] { 23377, 23380 } } // , { 26013, new int[2] { 23387, 23390 } }}; //static Dictionary barScanPickPort = new Dictionary { { 26023, new int[2] { 23415, 23411 } } // , { 26022, new int[2] { 23442, 23438 } } // , { 26021, new int[2] { 23470, 23466 } } // , { 26020, new int[2] { 23499, 23495 } } // , { 26019, new int[2] { 23525, 23521 } } // , { 26014, new int[2] { 23548, 23552 } } // , { 26015, new int[2] { 23575, 23579 } } // , { 26016, new int[2] { 23608, 23612 } } // , { 26017, new int[2] { 23633, 23637 } } // , { 26018, new int[2] { 23658, 23662 } }}; //static Dictionary barScanErrorPort = new Dictionary { { 12150, 12161 }, { 12183, 12195 }, { 12318, 12328 }, { 12373, 12385 } // ,{ 32001, 32001 }, { 32005, 32005 }, { 32323, 32005 } }; //static List IsLaneGate = new List() { 12001, 12008, 12011, 12013, 12018, 12020, 12025, 12027, 12032, 12034, 12040, 12047, 12050, 12052, 12057, 12059, 12064, 12066, 12071, 12073, // 12082, 12084, 12089, 12091, 12096, 12098, 12103, 12105, 12110, 12112, 12199, 12202, 12207, 12209, 12214, 12216, 12221, 12223, 12228, 12230, // 12239, 12241, 12246, 12248, 12253, 12255, 12260, 12262, 12267, 12269, 12275, 12282, 12285, 12287, 12292, 12294, 12299, 12301, 12306, 12308, // 22001, 22008, 22009, 22016, 22017, 22024, 22025, 22032, 22033, 22040, 22041, 22048, 22049, 22056, 22057, 22064, 22065, 22072, 22073, 22080, // 22081, 22088, 22089, 22096, 22097, 22104, 22105, 22112, 22113, 22120, 22121, 22128, 22129, 22136, 22137, 22144, 22145, 22152, 22153, 22160, // 22161, 22168, 22169, 22176, 22177, 22184, 22185, 22192, 22193, 22200, 22201, 22208, 22209, 22216, 22217, 22224, 22225, 22232, 22233, 22240, // 32011, 32014, 32019, 32021, 32026, 32028, 32033, 32035, 32040, 32042, 32050, 32053, 32058, 32060, 32065, 32067, 32072, 32074, 32079, 32081, // 32089, 32092, 32097, 32099, 32104, 32106, 32111, 32113, 32118, 32120, 32135, 32138, 32143, 32145, 32150, 32152, 32157, 32159, 32164, 32166, // 32174, 32177, 32182, 32184, 32189, 32191, 32196, 32198, 32203, 32205, 32213, 32216, 32220, 32222, 32227, 32229, 32234, 32236, 32241, 32243 }; #endregion /// /// 构造函数 /// public SControlMonitor() { try { //g_manageService.ManageInStorageCheckoutCompleted += new ManageService.ManageInStorageCheckoutCompletedEventHandler(g_manageService_ManageInStorageCheckoutCompleted); //初始化管理和调度交互状态 Model.CGetInfo.AddIOControlStatus(); Model.CGetInfo.AddDeviceKindInfo(); Model.CGetInfo.AddDeviceInfo(); Model.CGetInfo.AddModifyPathDeviceInfo(); Model.CGetInfo.AddDeviceErrors(); #region 调度优化设置 CStaticClass.MovedDeviceAheadTrigger = CommonClassLib.AppSettings.GetValue("MovedDeviceAheadTrigger"); CStaticClass.OutDetectArrowIdleGoods = CommonClassLib.AppSettings.GetValue("OutDetectArrowIdleGoods"); CStaticClass.DeviceErrorAutoModifyRoutePath = CommonClassLib.AppSettings.GetValue("DeviceErrorAutoModifyRoutePath"); CStaticClass.DoubleForkWaitTime = CommonClassLib.AppSettings.GetValue("DoubleForkWaitTime"); CStaticClass.StockCodeCheck = CommonClassLib.AppSettings.GetValue("StockCodeCheck"); CStaticClass.TransportTimeout = CommonClassLib.AppSettings.GetValue("TransportTimeout"); //20121203 #endregion } catch (Exception ex) { throw ex; } } void CSendBarcode(int deviceindex,string barcode,bool confirm) {//一楼条码扫描16001入库分道管理异步回调 object sender = deviceindex.ToString(); DataView dv = new DataView(); int newdev = 160011; int _confirm = 0;//1为剔除 2为直行 try { if (confirm == true) { _confirm = 2; } else { _confirm = 1; } CStringInfoEventArgs e = new CStringInfoEventArgs(newdev, barcode, _confirm); SendBarcode(sender, e); } catch (Exception ex) { throw ex; } finally { dv.Dispose(); } } #region 事件响应 void CCommon_UpdateDB(object sender, CUpdateDBChangeEventArgs e) { if (PLCCommonUpdateDB != null) {//20150103 PLCCommonUpdateDB(sender, e); } } void CSqlEXE_UpdateDB(object sender, CUpdateDBChangeEventArgs e) {//20230718richard.liu SqlEXEUpdateDB(sender, e); } void CListenAGVState_UpdateDB(object sender, CUpdateDBChangeEventArgs e) { AGVUpdateDB(sender, e); } void CClientTCPIP_SendDeviceOrder(object sender, CSendDeviceOrderEventArgs e) { SendDeviceOrder(sender, e); } void CClientTCPIP_WriteDarkCasket(object sender, CWriteDarkCasketEventArgs e) { WriteDarkCasket(sender, e); } void MonitorRefreshMonitor(RefreshMonitorEventArgs e) { OnRefreshMonitor(e); } void MonitorDataChange(object sender, CDataChangeEventArgs e) { OnDataChange(sender, e); } 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); } } public static void OnDeviceState(object sender,CDeviceStateChangeEventArgs e) { if (CDeviceState != null) CDeviceState(sender, e); } public void OnChannelOpen(ClientLogEventArgs e) { if (ChannelOpen != null) { ChannelOpen(e); } } public void OnClientLogout(ClientLogEventArgs e) { if (ClientLogout != null) { ClientLogout(e); } } void Channel_Closing(object sender, EventArgs e) { lock (ClientCallbackLists) { var client = (IClient)sender; if (ClientCallbackLists.ContainsValue(client) == true) { ClientCallbackLists.Remove(client); } } lock (ClientShowLists) { var client = (IClient)sender; if (ClientShowLists.ContainsValue(client) == true) { ClientShowLists.Remove(client); } } } #endregion #region 自定义方法 /// /// 比较两个值型一维数组变量是否值相等 /// /// 值型一维数组1 /// 值型一维数组2 /// 比较结果,相等则true,否则false public 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; } string GetBarcodeFromMonitorIndex(int taskindex) { DataView dvb = new DataView(); StringBuilder sss = new StringBuilder(""); try { sss.Append("SELECT F_TxtParam FROM T_Monitor_Task WHERE (F_MonitorIndex = ").Append(taskindex).Append(")"); dvb = dbo.ExceSQL(sss.ToString()).Tables[0].DefaultView; if (dvb.Count > 0) { return dvb[0]["F_TxtParam"].ToString(); } else { return "-"; } } catch (Exception ex) { throw ex; } finally { dvb.Dispose(); } } //void AssociateComplete(int deviceIdx, int mindex, int status) //{ // DataView dv = new DataView(); DataView dv1 = new DataView(); DataView dv2 = new DataView(); DataView dv3 = new DataView(); // try // { // int ClearZero = 0; // if (status >= 1) // { // ClearZero = 1; // } // else // { // ClearZero = Model.CGeneralFunction.TASKFINISH; // } // int DeviceIdx = deviceIdx; // int devKind; // //20091107 // dv = dbo.ExceSQL("select F_MonitorIndex,F_Status,F_DeviceIndex,F_DeviceCommandIndex,F_NumParam4 from T_Monitor_Task where F_MonitorIndex=" + mindex).Tables[0].DefaultView; // if (dv.Count > 0) // { // //检查关联命令一起报告完成 // //如果mindex是主动任务(f_associatemonitor有数据),先报告完成被动的任务;如果mindex是被动任务,先报告完成自己,再报告完成主动任务; // dv1 = dbo.ExceSQL("select F_DeviceIndex,F_Associate from T_Monitor_Task where F_Associate IS NOT NULL and F_MonitorIndex=" + mindex).Tables[0].DefaultView; // if (dv1.Count > 0) // { // dv2 = dbo.ExceSQL("select F_DeviceIndex,F_MonitorIndex from T_Monitor_Task where F_MonitorIndex=" + Convert.ToInt32(dv1[0]["F_Associate"])).Tables[0].DefaultView; // if (dv2.Count > 0)//有关联命令,先报告完成关联命令 // { // DeviceIdx = Convert.ToInt32(dv2[0]["F_DeviceIndex"]); // devKind = ccf.GetDeviceKindIdx(DeviceIdx); // AddBatchReponse("DB1", Convert.ToInt32(dv2[0]["F_MonitorIndex"]), DeviceIdx, 2); // cgs.ActionComplete(DeviceIdx, Convert.ToInt32(dv2[0]["F_MonitorIndex"]), ClearZero); // } // //再报告完成自己 // DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]); // devKind = ccf.GetDeviceKindIdx(DeviceIdx); // AddBatchReponse("DB1", mindex, DeviceIdx, 2); // cgs.ActionComplete(DeviceIdx, mindex, ClearZero); // } // else // { // //自己是否被关联,先报告完成自己,再报告完成主任务 // dv3 = dbo.ExceSQL("select F_DeviceIndex,F_MonitorIndex from T_Monitor_Task where F_Associate ='" + mindex + "'").Tables[0].DefaultView; // if (dv3.Count > 0) // { //先报告完成自己 // DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]); // devKind = ccf.GetDeviceKindIdx(DeviceIdx); // AddBatchReponse("DB1", mindex, DeviceIdx, 2); // cgs.ActionComplete(DeviceIdx, mindex, ClearZero); // //再报告完成主任务 // DeviceIdx = Convert.ToInt32(dv3[0]["F_DeviceIndex"]); // devKind = ccf.GetDeviceKindIdx(DeviceIdx); // AddBatchReponse("DB1", Convert.ToInt32(dv3[0]["F_MonitorIndex"]), DeviceIdx, 2); // cgs.ActionComplete(DeviceIdx, Convert.ToInt32(dv3[0]["F_MonitorIndex"]), ClearZero); // } // else // { // //无关联任务,只报告完成自己 // DeviceIdx = deviceIdx; // devKind = ccf.GetDeviceKindIdx(DeviceIdx); // //20101219运行状态的长输送机链需要给最后一个报告完成的清零 // if ((devKind == 2) && (Convert.ToInt32(dv[0]["F_NumParam4"]) > 0) && (dv[0]["F_DeviceCommandIndex"].ToString() == "6") && (Convert.ToInt32(dv[0]["F_Status"]) > 0)) // { // DeviceIdx = Convert.ToInt32(dv[0]["F_NumParam4"]); // } // AddBatchReponse("DB1", mindex, DeviceIdx, 2); // cgs.ActionComplete(DeviceIdx, mindex, ClearZero); // } // } // } // } // catch (Exception ex) // { // throw ex; // } // finally // { // dv.Dispose(); // dv1.Dispose(); // dv2.Dispose(); // dv3.Dispose(); // } //} int GetRouteIDsub(int device) { DataView dv = new DataView(); try { DataView dv1 = dbo.ExceSQL("SELECT F_ChannelsIndex FROM T_Base_AGV_Gate where F_Top=" + device + "").Tables[0].DefaultView; if (dv1.Count > 0) { device = Convert.ToInt32(dv1[0]["F_ChannelsIndex"]); } dv = dbo.ExceSQL("SELECT F_RouteIDSub, F_DeviceIndex, F_RouteID FROM T_Base_Route_Device where F_DeviceIndex=" + device + "").Tables[0].DefaultView; if (dv.Count > 0) { return Convert.ToInt32(dv[0]["F_RouteIDSub"]); } else { return -1; } } catch (Exception ex) { throw ex; } finally { dv.Dispose(); } } int GetManageHandIdx() { DataSet ds = new DataSet(); DataSet dss = new DataSet(); try { int hidx = 0; ds = dbo.ExceSQL("SELECT F_ManageTaskKindIndex, max(FID) as mFID FROM T_Manage_Task Where F_ManageTaskKindIndex=4 group by F_ManageTaskKindIndex"); if (ds.Tables[0].DefaultView.Count > 0) { hidx = Convert.ToInt32(ds.Tables[0].DefaultView[0]["mFID"]) + 1; } else { dss = dbo.ExceSQL("SELECT F_ManageTaskIndex FROM T_Base_Task_Index_Hand_Task"); if (dss.Tables[0].DefaultView.Count > 0) { if ((Convert.ToInt32(dss.Tables[0].DefaultView[0]["F_ManageTaskIndex"]) + 1) >= 29998) { hidx = 20001; } else { hidx = (Convert.ToInt32(dss.Tables[0].DefaultView[0]["F_ManageTaskIndex"]) + 1); } } else { hidx = 20001; } } RecordMaxHandTaskFID(hidx); return hidx; } catch (Exception ex) { throw ex; } finally { ds.Dispose(); dss.Dispose(); } } void RecordMaxHandTaskFID(int fid) { DataView dv = new DataView(); try { dv = dbo.ExceSQL("select F_ManageTaskIndex from T_Base_Task_Index_Hand_Task").Tables[0].DefaultView; if (dv.Count > 0) { if (fid == 29998) { dbo.ExceSQL("UPDATE T_Base_Task_Index_Hand_Task SET F_ManageTaskIndex =20001"); return; } if (fid > Convert.ToInt32(dv[0]["F_ManageTaskIndex"])) { dbo.ExceSQL("UPDATE T_Base_Task_Index_Hand_Task SET F_ManageTaskIndex =" + fid); return; } } else { dbo.ExceSQL("INSERT INTO T_Base_Task_Index_Hand_Task (F_ManageTaskIndex)VALUES (" + fid + ")"); return; } } catch (Exception ex) { throw ex; } finally { dv.Dispose(); } } void ResetSendorder(int askdev, int taskindex, int routeid, int arrowdev) { StringBuilder sql = new StringBuilder(); int fid = ccf.GetManageTaskIndexFromMonitor(taskindex); int mankind = ccf.GetManageTaskKindIndexFromMonitor(taskindex); if (DeviceInRouteSub(askdev, routeid) == true) { if (arrowdev == askdev) { AssociateComplete(askdev, taskindex); } else { RestoreDevice(taskindex); } } else { sql.Remove(0, sql.Length); sql.Append("UPDATE T_Manage_Task SET FCurrentLocation=").Append(askdev).Append(" where FID=").Append(fid).Append(" and F_ManageTaskKindIndex=").Append(mankind); dbo.ExceSQL(sql.ToString()); //判断是否需要向管理申请改道:如果本主路径的所有子路经都不可用就需要向管理申请改道,否则:调度选择一个可用的子路经,自行改道 //20091005 if (GetUseableRouteIDSub(fid, mankind, askdev) == false) { if (CStaticClass.DeviceErrorAutoModifyRoutePath == "1") {//20091107 GetUsableDestination(fid, mankind); } } } } int GetMonitorWaitTaskIndexFromDeviceBarCode(string BarCode,int device) {//20110216 DataView dv = new DataView(); try { dv = dbo.ExceSQL(string.Format("SELECT T_Monitor_Task.F_MonitorIndex FROM T_Base_Device,T_Monitor_Task WHERE T_Monitor_Task.F_DeviceIndex={0} and F_TxtParam = '{1}' and F_Status=0 ", device, BarCode)).Tables[0].DefaultView; if (dv.Count > 0) { return Convert.ToInt32(dv[0]["F_MonitorIndex"]); } else { return -1; } } catch (Exception ex) { throw ex; } finally { dv.Dispose(); } } int GetMonitorSendedTaskIndexFromBarCode(string BarCode) {//20110216 DataView dv = new DataView(); try { dv = dbo.ExceSQL(string.Format("SELECT T_Monitor_Task.F_MonitorIndex FROM T_Base_Device,T_Monitor_Task WHERE T_Base_Device.F_DeviceIndex = T_Monitor_Task.F_DeviceIndex and (T_Base_Device.F_DeviceKindIndex = 7) and (F_TxtParam = '{0}') and F_Status>0 order by F_MonitorIndex asc", BarCode)).Tables[0].DefaultView;//gjn 管理确定不会下空条码的任务 if (dv.Count > 0) { return Convert.ToInt32(dv[0]["F_MonitorIndex"]); } else { return -1; } } catch (Exception ex) { throw ex; } finally { dv.Dispose(); } } int GetMonitorRunTaskIndexFromBarCode(StringBuilder BarCode) {//20110216 DataView dv = new DataView(); try { string bc = BarCode.ToString(); dv = dbo.ExceSQL(string.Format("SELECT T_Monitor_Task.F_MonitorIndex FROM T_Base_Device,T_Monitor_Task WHERE T_Base_Device.F_DeviceIndex = T_Monitor_Task.F_DeviceIndex and ((T_Base_Device.F_DeviceKindIndex = 13) OR (T_Base_Device.F_DeviceKindIndex = 31)) and (F_TxtParam = '{0}') and F_Status>0 order by F_MonitorIndex asc", bc)).Tables[0].DefaultView; if (dv.Count > 0) { return Convert.ToInt32(dv[0]["F_MonitorIndex"]); } else { return -1; } } catch (Exception ex) { throw ex; } finally { dv.Dispose(); } } int GetMonitorAskTaskIndexFromBarCode(StringBuilder BarCode) {//20110216 DataView dv = new DataView(); try { string bc = BarCode.ToString(); dv = dbo.ExceSQL(string.Format("SELECT T_Monitor_Task.F_MonitorIndex FROM T_Base_Device,T_Monitor_Task WHERE T_Base_Device.F_DeviceIndex = T_Monitor_Task.F_DeviceIndex and ((T_Base_Device.F_DeviceKindIndex = 13) OR (T_Base_Device.F_DeviceKindIndex = 31)) and (F_TxtParam = '{0}') and ((F_Status>0) or (F_SendFlag=2 and F_Status=0)) and F_DeviceCommandIndex=6 order by F_MonitorIndex asc", bc)).Tables[0].DefaultView; if (dv.Count > 0) { return Convert.ToInt32(dv[0]["F_MonitorIndex"]); } else { return -1; } } catch (Exception ex) { throw ex; } finally { dv.Dispose(); } } int GetMonitorTaskIndexFromBarCode(StringBuilder BarCode,Model.MDevice devinf) {//20110216 DataView dv = new DataView(); try { string bc = BarCode.ToString(); dv = dbo.ExceSQL(string.Format("SELECT T_Monitor_Task.F_MonitorIndex FROM T_Base_Device,T_Monitor_Task WHERE T_Base_Device.F_DeviceIndex = T_Monitor_Task.F_DeviceIndex and ((T_Base_Device.F_DeviceKindIndex = 13) OR (T_Base_Device.F_DeviceKindIndex = 31)) and (F_TxtParam = '{0}') and (F_NumParam4 = {1} or F_NumParam4 = {2}) and F_Status>0 order by F_MonitorIndex asc", bc,devinf.DeviceIndex,devinf.DeviceVisual)).Tables[0].DefaultView; if (dv.Count > 0) { return Convert.ToInt32(dv[0]["F_MonitorIndex"]); } else { //dv = dbo.ExceSQL(string.Format("SELECT T_Monitor_Task.F_MonitorIndex FROM T_Base_Device,T_Monitor_Task WHERE T_Base_Device.F_DeviceIndex = T_Monitor_Task.F_DeviceIndex and ((T_Base_Device.F_DeviceKindIndex = 13) OR (T_Base_Device.F_DeviceKindIndex = 31)) and (F_TxtParam = '{0}') and F_Status>0 order by F_MonitorIndex asc", bc)).Tables[0].DefaultView; //if (dv.Count > 0) //{ // return Convert.ToInt32(dv[0]["F_MonitorIndex"]); //} //else //{ return -1; //} } } catch (Exception ex) { throw ex; } finally { dv.Dispose(); } } string GetMonitorTaskStartTime(int taskindex,out int order) {//20110216 DataView dv = new DataView(); try { dv = dbo.ExceSQL(string.Format("SELECT F_StartTime,F_DeviceCommandIndex FROM T_Monitor_Task WHERE F_MonitorIndex={0}", taskindex)).Tables[0].DefaultView; if (dv.Count > 0) { order = Convert.ToInt32(dv[0]["F_DeviceCommandIndex"]); return dv[0]["F_StartTime"].ToString(); } else { order = -1; return "-"; } } catch (Exception ex) { throw ex; } finally { dv.Dispose(); } } void RestoreDevice(int mindex) { StringBuilder sql = new StringBuilder(); DataView dv = new DataView(); DataView dv1 = new DataView(); DataView dv2 = new DataView(); DataView dv3 = new DataView(); try { int DeviceIdx, devKind; sql.Remove(0, sql.Length); sql.Append("select F_MonitorIndex,F_DeviceIndex from T_Monitor_Task where F_MonitorIndex=").Append(mindex); dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv.Count > 0) { //检查关联命令一起复位 //如果mindex是主动任务(f_associatemonitor有数据),先复位被动的任务;如果mindex是被动任务,先复位自己,再复位主动任务; sql.Remove(0, sql.Length); sql.Append("select F_DeviceIndex,F_Associate from T_Monitor_Task where F_Associate IS NOT NULL and F_MonitorIndex=").Append(mindex); dv1 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv1.Count > 0) { sql.Remove(0, sql.Length); sql.Append("select F_DeviceIndex,F_MonitorIndex from T_Monitor_Task where F_MonitorIndex=").Append(Convert.ToInt32(dv1[0]["F_Associate"])); dv2 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv2.Count > 0)//有关联命令,先复位关联命令 { DeviceIdx = Convert.ToInt32(dv2[0]["F_DeviceIndex"]); devKind = ccf.GetDeviceKindIdx(DeviceIdx); WriteResponseData(DeviceIdx, "DB1", "2", out string errtxt1); sql.Remove(0, sql.Length); sql.Append("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=").Append(Convert.ToInt32(dv2[0]["F_DeviceIndex"])); dbo.ExceSQL(sql.ToString()); sql.Remove(0, sql.Length); sql.Append("update T_Monitor_Task set F_Status=0 where F_MonitorIndex=").Append(Convert.ToInt32(dv2[0]["F_MonitorIndex"])); dbo.ExceSQL(sql.ToString()); } //20091128 //再复位自己 DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]); devKind = ccf.GetDeviceKindIdx(DeviceIdx); WriteResponseData(DeviceIdx, "DB1", "2", out string errtxt); sql.Remove(0, sql.Length); sql.Append("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=").Append(Convert.ToInt32(dv[0]["F_DeviceIndex"])); dbo.ExceSQL(sql.ToString()); sql.Remove(0, sql.Length); sql.Append("update T_Monitor_Task set F_Status=0 where F_MonitorIndex=").Append(Convert.ToInt32(dv[0]["F_MonitorIndex"])); dbo.ExceSQL(sql.ToString()); } else { //自己是否被关联,先复位自己,再复位主任务 sql.Remove(0, sql.Length); sql.Append("select F_DeviceIndex,F_MonitorIndex from T_Monitor_Task where F_Associate ='").Append(mindex).Append("'"); dv3 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv3.Count > 0) { //先复位自己 DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]); devKind = ccf.GetDeviceKindIdx(DeviceIdx); WriteResponseData(DeviceIdx, "DB1", "2", out string errtxt); sql.Remove(0, sql.Length); sql.Append("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=").Append(Convert.ToInt32(dv[0]["F_DeviceIndex"])); dbo.ExceSQL(sql.ToString()); sql.Remove(0, sql.Length); sql.Append("update T_Monitor_Task set F_Status=0 where F_MonitorIndex=").Append(mindex); dbo.ExceSQL(sql.ToString()); //再复位主任务 DeviceIdx = Convert.ToInt32(dv3[0]["F_DeviceIndex"]); devKind = ccf.GetDeviceKindIdx(DeviceIdx); WriteResponseData(DeviceIdx, "DB1", "2", out errtxt); sql.Remove(0, sql.Length); sql.Append("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=").Append(Convert.ToInt32(dv3[0]["F_DeviceIndex"])); dbo.ExceSQL(sql.ToString()); sql.Remove(0, sql.Length); sql.Append("update T_Monitor_Task set F_Status=0 where F_MonitorIndex=").Append(Convert.ToInt32(dv3[0]["F_MonitorIndex"])); dbo.ExceSQL(sql.ToString()); } else { //无关联任务,只复位自己 DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]); devKind = ccf.GetDeviceKindIdx(DeviceIdx); WriteResponseData(DeviceIdx, "DB1", "2", out string errtxt); sql.Remove(0, sql.Length); sql.Append("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=").Append(Convert.ToInt32(dv[0]["F_DeviceIndex"])); dbo.ExceSQL(sql.ToString()); sql.Remove(0, sql.Length); sql.Append("update T_Monitor_Task set F_Status=0 where F_MonitorIndex=").Append(mindex); dbo.ExceSQL(sql.ToString()); } } } CDataChangeEventArgs cea = new CDataChangeEventArgs(null, null); OnDataChange("SControlMonitor", cea); } catch (Exception ex) { throw ex; } finally { dv.Dispose(); dv1.Dispose(); dv2.Dispose(); dv3.Dispose(); } } void AssociateComplete(int deviceIdx, int mindex) { DataView dv = new DataView(); DataView dv1 = new DataView(); DataView dv2 = new DataView(); DataView dv3 = new DataView(); int DeviceIdx = deviceIdx; StringBuilder sql = new StringBuilder(); int devKind; try { AA: sql.Remove(0, sql.Length); sql.Append("select F_MonitorIndex,F_DeviceIndex from T_Monitor_Task where F_MonitorIndex=").Append(mindex); dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv.Count > 0) { Model.MDevice devm = Model.CGetInfo.GetDeviceInfo(deviceIdx); int[] dblmonitor=null ; if (devm.IfCorrelDoubleFork == "1") { dblmonitor = Model.CGeneralFunction.MutiForkIfSync(mindex, deviceIdx, devm.DeviceKind); } //检查关联命令一起复位 //如果mindex是主动任务(f_associatemonitor有数据),先复位被动的任务;如果mindex是被动任务,先复位自己,再复位主动任务; sql.Remove(0, sql.Length); sql.Append("select F_DeviceIndex,F_Associate from T_Monitor_Task where F_Associate IS NOT NULL and F_MonitorIndex=").Append(mindex); dv1 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv1.Count > 0) { sql.Remove(0, sql.Length); sql.Append("select F_DeviceIndex,F_MonitorIndex from T_Monitor_Task where F_MonitorIndex=").Append(Convert.ToInt32(dv1[0]["F_Associate"])); dv2 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv2.Count > 0)//有关联命令,先复位关联命令 { DeviceIdx = Convert.ToInt32(dv2[0]["F_DeviceIndex"]); devKind = ccf.GetDeviceKindIdx(DeviceIdx); cgs.ActionComplete(DeviceIdx, Convert.ToInt32(dv2[0]["F_MonitorIndex"]), 1); } //再复位自己 DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]); devKind = ccf.GetDeviceKindIdx(DeviceIdx); cgs.ActionComplete(DeviceIdx, mindex, 1); } else { //自己是否被关联,先复位自己,再复位主任务 sql.Remove(0, sql.Length); sql.Append("select F_DeviceIndex,F_MonitorIndex from T_Monitor_Task where F_Associate ='").Append(mindex).Append("'"); dv3 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv3.Count > 0) { //先复位自己 DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]); devKind = ccf.GetDeviceKindIdx(DeviceIdx); cgs.ActionComplete(DeviceIdx, mindex, 1); //再复位主任务 DeviceIdx = Convert.ToInt32(dv3[0]["F_DeviceIndex"]); devKind = ccf.GetDeviceKindIdx(DeviceIdx); cgs.ActionComplete(DeviceIdx, Convert.ToInt32(dv3[0]["F_MonitorIndex"]), 1); } else { //无关联任务,只复位自己 DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]); devKind = ccf.GetDeviceKindIdx(DeviceIdx); cgs.ActionComplete(DeviceIdx, mindex, 1); } } if (devm != null) { if (devm.IfCorrelDoubleFork == "1") { if (dblmonitor != null) { foreach (int dm in dblmonitor) { mindex = Convert.ToInt32(dblmonitor[dm]); goto AA; } } } } } } catch (Exception ex) { throw ex; } finally { dv.Dispose(); dv1.Dispose(); dv2.Dispose(); dv3.Dispose(); } } /// /// 获取可用的目标位置:入库的巷道或者出库站台 /// /// 调度任务索引 /// 调度任务类别 /// bool GetUsableDestination(int manageTaskIdx, int manageKindIdx) { //20091128 //DataView DV; DataView dv = new DataView(); DataRowView dr = null ; string adviceDev = ""; char[] cc = new char[1] { ';' }; string[] sp; DataView dvIO = new DataView(); DataView dvu = new DataView(); StringBuilder sql = new StringBuilder(); try { sql.Remove(0, sql.Length); sql.Append("SELECT * FROM T_Manage_Task WHERE (FID = ").Append(manageTaskIdx).Append(") AND (F_ManageTaskKindIndex = ").Append(manageKindIdx).Append(")"); dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv.Count <= 0) { return false; } dr = dv[0]; //只修申请改调度任务的路径,不修改调度自动任务路径 if (dr["F_ManageTaskKindIndex"].ToString() != "1") return false; //20091128 sql.Remove(0, sql.Length); sql.Append("select CONTROL_ID, CONTROL_STATUS from IO_Control where (CONTROL_ID = ").Append(Convert.ToInt32(dr["FID"])).Append(") AND ((CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKALTERROUTEAPPLY).Append(") or (CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKCANCEL).Append(") or(CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKALTERROUTEREPLY).Append("))"); dvIO = dboMan.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvIO.Count <= 0) { #region 根据T_Base_Device表的F_UsableEndDevice查找可用终点设备 sql.Remove(0, sql.Length); sql.Append("select F_UsableEndDevice from T_Base_Device where F_UsableEndDevice is not null and F_DeviceIndex=").Append(dr["FCurrentLocation"]); dvu = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvu.Count > 0) { sp = dvu[0]["F_UsableEndDevice"].ToString().Split(cc); for (int i = sp.GetLowerBound(0); i <= sp.GetUpperBound(0); i++) { if (CDisassembleTask.MinRouteID(Convert.ToInt32(dr["FSTARTDEVICE"]), Convert.ToInt32(sp[i]), dr["FUseAwayFork"]) != -1) { adviceDev = sp[i]; break; } } } //20091128 //dvu = null; if (adviceDev == "") { return false; } #endregion string dtime = DateTime.Now.ToString("u"); dtime = dtime.Substring(0, dtime.Length - 1); dboMan.TransBegin(); try { #region 入库任务运到出库站台需要上报IO_CONTROL表FSTATUS=960 //3241;3249;3256;3257;3258 string[] outstation = new string[5] { "3241", "3249", "3256", "3257", "3258" }; if (ccf.GetFCONTROLTASKTYPEFromManageTask(manageKindIdx, manageTaskIdx) == 1)//入库任务 { if (Array.IndexOf(outstation, dr["FCurrentLocation"].ToString()) >= 0) { sql.Remove(0, sql.Length); sql.Append("update IO_Control set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKCANCEL).Append(",ERROR_TEXT='入库任务被误搬运到出库站台!' where CONTROL_ID=").Append(manageTaskIdx); dboMan.ExceSQL(sql.ToString()); } } //20091128 outstation = null; #endregion //20090918 sql.Remove(0, sql.Length); sql.Append(" update IO_CONTROL set CONTROL_STATUS=").Append(Model.CGeneralFunction.TASKALTERROUTEAPPLY).Append(" where CONTROL_ID=").Append(dr["FID"]).Append(" and CONTROL_STATUS!=").Append(Model.CGeneralFunction.TASKCANCEL); dboMan.ExceSQL(sql.ToString()); //向管理申请修改任务//20101108 int appid = dboMan.GetManageTableIndex("IO_CONTROL_APPLY", true); sql.Remove(0, sql.Length); sql.Append("INSERT INTO IO_CONTROL_APPLY ( CONTROL_APPLY_ID,CONTROL_ID, WAREHOUSE_CODE, STOCK_BARCODE, DEVICE_CODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK)").Append( "VALUES (").Append(appid).Append(",").Append(dr["FID"]).Append(",'").Append(dr["FENDWAREHOUSE"]).Append("','").Append(dr["FPALLETBARCODE"]).Append("','").Append(adviceDev).Append("',0,'").Append(dtime).Append("',null)"); dboMan.ExceSQL(sql.ToString()); dboMan.TransCommit(); //把ManageTaskIdx,ManageKindIdx 的调度任务全部申请改道 sql.Remove(0, sql.Length); sql.Append("UPDATE T_Monitor_Task SET F_Status = 3 WHERE (F_ManageTaskIndex = ").Append(manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX =").Append(manageKindIdx).Append(")"); dbo.ExceSQL(sql.ToString()); //20090910 CDataChangeEventArgs cea = new CDataChangeEventArgs(null, null); OnDataChange("SControlMonitor", cea); return true; } catch (Exception ex) { RefreshMonitorEventArgs rme = new RefreshMonitorEventArgs("tsStatus",string.Format( "{0},GetUsableDesination向管理申请改道时错误:{1}" , this.ToString() , ex.StackTrace+ex.Message )); OnRefreshMonitor(rme); dboMan.TransRollback(); return false; } } else { return false; } } catch (Exception ex) { RefreshMonitorEventArgs rme = new RefreshMonitorEventArgs("tsStatus",string.Format( "{0},GetUsableDesination获取可用的目标位置时错误:{1}" , this.ToString(), ex.StackTrace+ex.Message )); OnRefreshMonitor(rme); return false; } finally { dvu.Dispose(); dv.Dispose(); dr = null; cc = null; sp = null; dvIO.Dispose(); } } /// /// 20091005判断是否可以获得可用的路径子路经 /// /// 调度任务索引 /// 任务类型索引 /// 当前设备索引 /// bool GetUseableRouteIDSub(int manageTaskIdx, int manageKindIdx, int curLocation) { DataView dvmi = new DataView(); DataView DMAN = new DataView(); DataView dvnew = new DataView(); DataView dvc = new DataView(); StringBuilder sql = new StringBuilder(); try { #region 调度任务存在 //20091128 sql.Remove(0, sql.Length); sql.Append("SELECT * FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX =1) order by F_MonitorIndex asc"); dvmi = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvmi.Count > 0) {//已经开始执行的需要更改调度任务 //判断申请修改路径的第一个调度任务: int monitorIndex = (int)dvmi[0]["F_MonitorIndex"]; int associateMonitor = -1; if (dvmi[0]["F_Associate"] != DBNull.Value) { associateMonitor = Convert.ToInt32(dvmi[0]["F_Associate"]); } int devindex = Convert.ToInt32(dvmi[0]["F_DeviceIndex"]); int devKind = ccf.GetDeviceKindIdx(Convert.ToInt32(dvmi[0]["F_DeviceIndex"])); int devCommand = Convert.ToInt32(dvmi[0]["F_DeviceCommandIndex"]); int routeID = Convert.ToInt32(dvmi[0]["F_RouteID"]); int NumParam1 = Convert.ToInt32(dvmi[0]["F_NumParam1"]); int NumParam4 = Convert.ToInt32(dvmi[0]["F_NumParam4"]); string AheadDetect = dvmi[0]["F_AheadDetect"].ToString(); //20091128 sql.Remove(0, sql.Length); sql.Append("select * from T_Manage_Task WHERE (FID = ").Append(manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX =1)"); DMAN = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (DMAN.Count > 0) { int routeidNew = CDisassembleTask.MinRouteID(Convert.ToInt32(DMAN[0]["FSTARTDEVICE"]), Convert.ToInt32(DMAN[0]["FENDDEVICE"]), curLocation); if (routeidNew == -1) { //20091005 return false; } //20091005 //删除原来的申请修改路径任务,拆分新的任务并且只保留现有设备开始的任务 sql.Remove(0, sql.Length); sql.Append("DELETE FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append(manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX =1)"); dbo.ExceSQL(sql.ToString()); //20090910 if (CDisassembleTask.CreateMonitor(1, manageTaskIdx, routeidNew, DMAN[0], 3) <= 0) { //重新生成申请修改路径的申请任务 sql.Remove(0, sql.Length); sql.Append("INSERT INTO T_Monitor_Task ").Append( "(F_ManageTaskIndex, F_ManageTASKKINDINDEX, F_MonitorIndex,F_MonitorTaskLevel,").Append( " F_DeviceIndex, F_DeviceCommandIndex, F_RouteID, F_Status,F_NumParam1, F_NumParam4,").Append( " F_AheadDetect,F_TxtParam)").Append( "VALUES (").Append(manageTaskIdx).Append(",1,").Append(monitorIndex).Append(",1,").Append(devindex).Append(",").Append(devCommand).Append(",").Append(routeID).Append(",3,").Append(NumParam1).Append(",").Append(NumParam4 ).Append(",'").Append(AheadDetect).Append("','").Append(DMAN[0]["FPALLETBARCODE"]).Append("')"); dbo.ExceSQL(sql.ToString()); return false; } if (devKind == 4) { if (devCommand == 7) { int RGVsn = ccf.GetSerialNumberFromRouteDevice(routeID, devindex); int Consn = ccf.GetSerialNumberFromRouteDevice(routeID, NumParam1); #region RGV运动到接货点 if (RGVsn > Consn) { //删除RGV运动到接货点之前的任务 //20091128 sql.Remove(0, sql.Length); sql.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = ").Append( devindex).Append(") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = ").Append(routeidNew).Append( ") AND (F_NumParam1 = ").Append(NumParam1).Append(")"); dvnew = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvnew.Count > 0) { sql.Remove(0, sql.Length); sql.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1) "); dbo.ExceSQL(sql.ToString()); sql.Remove(0, sql.Length); sql.Append("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1) "); dbo.ExceSQL(sql.ToString()); } } #endregion #region RGV运动到送货点 if (RGVsn < Consn) { //删除RGV运动到送货点之前的任务 //DataView dvnew = dbo.ExceSQL("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = " + // manageTaskIdx + ") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = " + // devindex + ") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = " + routeidNew + // ") AND (F_Status = 3) AND (F_NumParam1 != " + NumParam1 + ")").Tables[0].DefaultView; int RGVsn1 = ccf.GetSerialNumberFromRouteDevice(routeidNew, devindex); //找到接货输送机设备索引 List nextcon = CDisassembleTask.GetNextDevice(routeidNew, RGVsn1); int condev = nextcon[0]; //删除RGV运动到送货点之前的任务 //20091128 sql.Remove(0, sql.Length); sql.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = ").Append( devindex).Append(") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = ").Append(routeidNew).Append( ") AND (F_NumParam1 = ").Append(condev).Append(")"); dvnew = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvnew.Count > 0) { sql.Remove(0, sql.Length); sql.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1)"); dbo.ExceSQL(sql.ToString()); sql.Remove(0, sql.Length); sql.Append("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1)"); dbo.ExceSQL(sql.ToString()); } } #endregion } #region RGV送货 if ((devCommand == 3) || (devCommand == 5)) { int RGVsn = ccf.GetSerialNumberFromRouteDevice(routeidNew, devindex); //找到接货输送机设备索引 List nextcon = CDisassembleTask.GetNextDevice(routeidNew, RGVsn); int condev = nextcon[0]; //删除RGV运动到送货点之前的任务 //20091128 sql.Remove(0, sql.Length); sql.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = ").Append( devindex).Append(") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = ").Append(routeidNew).Append( ") AND (F_NumParam1 = ").Append(condev).Append(")"); dvnew = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvnew.Count > 0) { sql.Remove(0, sql.Length); sql.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1) "); dbo.ExceSQL(sql.ToString()); sql.Remove(0, sql.Length); sql.Append("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1)"); dbo.ExceSQL(sql.ToString()); } } #endregion #region RGV接货 if ((devCommand == 2) || (devCommand == 4)) { int RGVsn = ccf.GetSerialNumberFromRouteDevice(routeidNew, devindex); //找到送货输送机设备索引 List priorcon = CDisassembleTask.GetPriorDevice(routeidNew, RGVsn); int condev = priorcon[0]; //删除RGV运动到接货点之前的任务 //20091128 sql.Remove(0, sql.Length); sql.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = ").Append( devindex).Append(") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = ").Append(routeidNew).Append( ") AND (F_NumParam1 = ").Append(condev).Append(")"); dvnew = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvnew.Count > 0) { sql.Remove(0, sql.Length); sql.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1)"); dbo.ExceSQL(sql.ToString()); sql.Remove(0, sql.Length); sql.Append("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1)"); dbo.ExceSQL(sql.ToString()); } } #endregion } if (devKind == 2) { #region 输送机送货 if (devCommand == 3) { int consn = ccf.GetSerialNumberFromRouteDevice(routeidNew, devindex); //找到接货RGV设备索引 List nextrgv = CDisassembleTask.GetNextDevice(routeidNew, consn); int rgvdev = nextrgv[0]; //删除RGV运动到接货点之前的任务 //20091128 sql.Remove(0, sql.Length); sql.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = ").Append( rgvdev).Append(") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = ").Append(routeidNew).Append( ") AND (F_NumParam1 = ").Append(devindex).Append(")"); dvnew = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvnew.Count > 0) { sql.Remove(0, sql.Length); sql.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1)"); dbo.ExceSQL(sql.ToString()); sql.Remove(0, sql.Length); sql.Append("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1)"); dbo.ExceSQL(sql.ToString()); } } #endregion #region 输送机的接货 if (devCommand == 4) { int consn = ccf.GetSerialNumberFromRouteDevice(routeID, devindex); //找到送货RGV设备索引 List priorrgv = CDisassembleTask.GetPriorDevice(routeID, consn); int rgvdev = priorrgv[0]; int rgvsn = ccf.GetSerialNumberFromRouteDevice(routeidNew, rgvdev); List nextdev = CDisassembleTask.GetNextDevice(routeidNew, rgvdev); int condev = nextdev[0]; //删除RGV运动到送货点之前的任务 //20091128 sql.Remove(0, sql.Length); sql.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = ").Append( rgvdev).Append(") AND (F_DeviceCommandIndex = 7) AND (F_RouteID = ").Append(routeidNew).Append( ") AND (F_NumParam1 = ").Append(condev).Append(")"); dvnew = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvnew.Count > 0) { sql.Remove(0, sql.Length); sql.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1)"); dbo.ExceSQL(sql.ToString()); sql.Remove(0, sql.Length); sql.Append("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1)"); dbo.ExceSQL(sql.ToString()); } } #endregion #region 输送机的送出 if (devCommand == 6) { //20091128 sql.Remove(0, sql.Length); sql.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = ").Append( devindex).Append(") AND (F_DeviceCommandIndex = 6) AND (F_RouteID = ").Append(routeidNew).Append( ")"); dvnew = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvnew.Count > 0) { sql.Remove(0, sql.Length); sql.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1) "); dbo.ExceSQL(sql.ToString()); int CurrentLocation = 0; sql.Remove(0, sql.Length); sql.Append("SELECT FCurrentLocation FROM T_Manage_Task where FID=").Append(manageTaskIdx).Append(" and F_ManageTaskKindIndex=1"); dvc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvc.Count > 0) { CurrentLocation = Convert.ToInt32(dvc[0]["FCurrentLocation"]); } if (CurrentLocation == 0) return false; sql.Remove(0, sql.Length); sql.Append("update T_Monitor_Task set F_DeviceIndex=").Append(CurrentLocation).Append(" where F_MonitorIndex=").Append(dvnew[0]["F_MonitorIndex"]); dbo.ExceSQL(sql.ToString()); //20090910已经搬运到CurrentLocation(F_NumParam4=CurrentLocation) 删除送出任务 sql.Remove(0, sql.Length); sql.Append("delete from T_Monitor_Task where F_DeviceIndex=").Append(CurrentLocation).Append(" and F_NumParam4=").Append(CurrentLocation); dbo.ExceSQL(sql.ToString()); sql.Remove(0, sql.Length); sql.Append("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1)"); dbo.ExceSQL(sql.ToString()); } } #endregion } #region 堆垛机的送货重 if (devKind == 1) {//堆垛机的送货重,只保留堆垛机的送货任务 //20091128 sql.Remove(0, sql.Length); sql.Append("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1) AND (F_DeviceIndex = ").Append( devindex).Append(") AND (F_DeviceCommandIndex = 5) AND (F_RouteID = ").Append(routeidNew).Append( ")"); dvnew = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvnew.Count > 0) { sql.Remove(0, sql.Length); sql.Append("delete from T_Monitor_Task where F_MonitorIndex<").Append(dvnew[0]["F_MonitorIndex"]).Append(" and (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1)"); dbo.ExceSQL(sql.ToString()); sql.Remove(0, sql.Length); sql.Append("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=").Append(devindex); dbo.ExceSQL(sql.ToString()); sql.Remove(0, sql.Length); sql.Append("update T_Monitor_Task set F_Status =0 where (F_ManageTaskIndex = ").Append( manageTaskIdx).Append(") AND (F_ManageTASKKINDINDEX = 1) "); dbo.ExceSQL(sql.ToString()); } } #endregion }//20090910 CDataChangeEventArgs cea = new CDataChangeEventArgs(null, null); OnDataChange("SControlMonitor", cea); return true; }//20091005 #endregion else {//调度任务不存在 return false; } } catch (Exception ex) { RefreshMonitorEventArgs rme = new RefreshMonitorEventArgs("tsStatus", this.ToString() + "GetUseableRouteIDSub时错误:" +ex.StackTrace+ ex.Message); OnRefreshMonitor(rme); return false; } finally { dvmi.Dispose(); dvnew.Dispose(); DMAN.Dispose(); dvc.Dispose(); } } /// /// 判断设备是否被包含在子路径中 /// /// 设备索引 /// 子路经 /// bool DeviceInRouteSub(int deviceIdx, int routeSub) { DataView dv = new DataView(); try { StringBuilder sql = new StringBuilder(); sql.Remove(0, sql.Length); sql.Append("SELECT F_RouteIDSub, F_DeviceIndex FROM T_Base_Route_Device Where F_RouteIDSub=").Append(routeSub).Append(" and F_DeviceIndex=").Append(deviceIdx); dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv.Count > 0) { return true; } else { return false; } } catch (Exception ex) { throw ex; } finally { dv.Dispose(); } } void DeleteDeviceTask(int taskindex) { DataView dvm = new DataView(); StringBuilder sql = new StringBuilder(); try { int fid = ccf.GetManageTaskIndexFromMonitor(taskindex); int mti = ccf.GetManageTaskKindIndexFromMonitor(taskindex); if (ccf.GetFCONTROLTASKTYPEFromManageTask(mti, fid) == 2) return; sql.Remove(0, sql.Length); sql.Append("update T_Manage_Task set FExceptionNO=").Append(Model.CGeneralFunction.TASKDELETE).Append(" where (F_ManageTaskKindIndex = ").Append(mti).Append(") AND (FID = ").Append(fid).Append(")"); dbo.ExceSQL(sql.ToString()); sql.Remove(0, sql.Length); sql.Append("update T_Monitor_Task set F_STATUS=-1 where F_ManageTaskKindIndex=").Append(mti).Append(" and F_ManageTaskIndex=").Append(fid).Append(" and F_STATUS=0"); dbo.ExceSQL(sql.ToString()); //通知管理程序删除整个调度任务 //20091128 sql.Remove(0, sql.Length); sql.Append("SELECT F_ManageTaskKindIndex, F_ManageTaskIndex,F_DeviceIndex,F_MonitorIndex,F_Status ").Append( " FROM T_Monitor_Task Where F_ManageTaskIndex=").Append(fid).Append(" and F_ManageTaskKindIndex= ").Append( mti); dvm = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvm.Count > 0) { for (int ii = 0; ii < dvm.Count; ii++) { if (Convert.ToInt32(dvm[ii]["F_Status"]) >= 1) { cgs.ActionComplete(Convert.ToInt32(dvm[ii]["F_DeviceIndex"]), Convert.ToInt32(dvm[ii]["F_MonitorIndex"]), 1); } else { cgs.ActionComplete(Convert.ToInt32(dvm[ii]["F_DeviceIndex"]), Convert.ToInt32(dvm[ii]["F_MonitorIndex"]), Model.CGeneralFunction.TASKDELETE); } } } } catch (Exception ex) { throw ex; } finally { dvm.Dispose(); } } #endregion #region 契约实现 /// /// 根据安装条码扫描器的输送机设备索引查询【在PLC读到的条码】和【已经给管理上报的条码】20140218 /// /// 安装条码扫描器的输送机 /// 在PLC读到的条码 /// 已经给管理上报的条码 /// public bool GetReadedAndReportedBarcode(int bindDeviceOfBarcode, out string readedBarcode, out string reportedBarcode, out string errorText) { DataView dv=new DataView(); errorText = ""; readedBarcode = ""; reportedBarcode = ""; StringBuilder rb=new StringBuilder(""); try { dv = dbo.ExceSQL(string.Format("SELECT F_DeviceIndex,F_PalletBarcodeLength,F_BarCode,F_BarcodeLength,F_Askkind,F_BarcodeReservedLength,F_BarcodeForkAmount FROM T_Base_PLC_Ask WHERE (F_Askkind = 4 OR F_Askkind = 14 OR F_Askkind = 17) AND (F_BindingDevice = {0})", bindDeviceOfBarcode)).Tables[0].DefaultView; if (dv.Count > 0) { _device = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(dv[0]["F_DeviceIndex"])); if (_device.ReturnMessage != null) { int barcodeLenth = 0; int beginchar = 2; if (dv[0]["F_Askkind"].ToString() == "17" ) {//PLC打包上报箱垛条码组,F_BarCode只记录记录最上面一箱条码 barcodeLenth = Convert.ToInt32(dv[0]["F_BarcodeLength"]); beginchar = 2; } else if (dv[0]["F_Askkind"].ToString() == "15") {//多叉堆垛机在顶升机,条码组申请入库F_BarCode记录所堆垛机最大叉的箱条码 barcodeLenth = Convert.ToInt32(dv[0]["F_BarcodeLength"]); beginchar = 2+ Convert.ToInt32(dv[0]["F_BarcodeReservedLength"]) * (Convert.ToInt32(dv[0]["F_BarcodeForkAmount"])-1); } else//F_Askkind = 4 OR F_Askkind = 14 {//扫单箱或者码垛入库的托盘条码 barcodeLenth = Convert.ToInt32(dv[0]["F_PalletBarcodeLength"]); } for (int j = beginchar; j < barcodeLenth + beginchar; j++)//0字节是【头】,1字节是【数量】2字节开始是条码 { rb.Append(Convert.ToChar(_device.ReturnMessage[j]).ToString().ToUpper()); } readedBarcode = rb.ToString(); if (readedBarcode != dv[0]["F_BarCode"].ToString()) { reportedBarcode = ""; } else { reportedBarcode = dv[0]["F_BarCode"].ToString(); } } else { readedBarcode = ""; reportedBarcode = dv[0]["F_BarCode"].ToString(); } } else { return false; } return true; } catch (Exception ex) { errorText =ex.Message+ ex.StackTrace; return false; } } /// /// 卸载 /// public void Dispose() { EndListen(); ClientCallbackLists.Clear(); ClientShowLists.Clear(); OPCClient.CCommonOPCClient.DisConnectOPCServer(); } public Model.MError GetDeviceAllErrors(int deviceKindIndex, out string errorText) { errorText = string.Empty; return Model.CGetInfo.DeviceErrors[deviceKindIndex]; } public List GetAllRouteinfo(out string errorText) { List lmr = new List(); DataView dv = new DataView(); errorText = string.Empty; StringBuilder sql = new StringBuilder(); try { sql.Remove(0, sql.Length); sql.Append("select F_RouteID,F_RouteName,F_StartDevice,F_EndDevice,F_RouteKind,F_Status from T_Base_Route "); dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; Model.MRoute mr = new Model.MRoute(); for (int i = 0; i < dv.Count; i++) { mr.RouteID = Convert.ToInt32(dv[0]["F_RouteID"]); mr.RouteName = dv[0]["F_RouteName"].ToString(); mr.StartDevice = Convert.ToInt32(dv[0]["F_StartDevice"]); mr.EndDevice = Convert.ToInt32(dv[0]["F_EndDevice"]); mr.RouteKind = Convert.ToInt32(dv[0]["F_RouteKind"]); mr.Status = Convert.ToInt32(dv[0]["F_Status"]); lmr.Add(mr); } return lmr; } catch (Exception ex) { errorText = ex.Message; return null; } finally { dv.Dispose(); } } public List GetDeviceJoinRouteinfo(int deviceIndex, out string errorText) { List lmr = new List(); DataView dv = new DataView(); errorText = string.Empty; StringBuilder sql = new StringBuilder(); try { sql.Remove(0, sql.Length); sql.Append("SELECT distinct T_Base_Route.F_RouteID, T_Base_Route.F_RouteName, T_Base_Route.F_StartDevice, T_Base_Route.F_EndDevice, T_Base_Route.F_RouteKind, T_Base_Route.F_Status FROM T_Base_Route,T_Base_Route_Device where T_Base_Route.F_RouteID = T_Base_Route_Device.F_RouteID and F_DeviceIndex=").Append(deviceIndex); dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; Model.MRoute mr = new Model.MRoute(); for (int i = 0; i < dv.Count; i++) { mr.RouteID = Convert.ToInt32(dv[i]["F_RouteID"]); mr.RouteName = dv[i]["F_RouteName"].ToString(); mr.StartDevice = Convert.ToInt32(dv[i]["F_StartDevice"]); mr.EndDevice = Convert.ToInt32(dv[i]["F_EndDevice"]); mr.RouteKind = Convert.ToInt32(dv[i]["F_RouteKind"]); mr.Status = Convert.ToInt32(dv[i]["F_Status"]); lmr.Add(mr); } return lmr; } catch (Exception ex) { errorText = ex.Message; return null; } finally { dv.Dispose(); } } public DeviceStateType GetDeviceStateInfo(int deviceIndex, out string errorText) { errorText = string.Empty; try { DataView dv = dbo.ExceSQL(string.Format("SELECT F_DeviceIndex,F_DeviceName, F_DeviceKindIndex, F_LockedState ,F_errorcode, F_ManTaskReserve FROM T_Base_Device where F_DeviceIndex={0}", deviceIndex)).Tables[0].DefaultView; if (dv.Count > 0) { int a = 0; int a1 = 0; int a2 = 0; int a3 = 0; int.TryParse(dv[0]["F_DeviceKindIndex"].ToString(), out a); int.TryParse(dv[0]["F_LockedState"].ToString(), out a1); int.TryParse(dv[0]["F_errorcode"].ToString(), out a2); int.TryParse(dv[0]["F_ManTaskReserve"].ToString(), out a3); DeviceStateType ds = new DeviceStateType(); ds.DeviceIndex = Convert.ToInt32(dv[0]["F_DeviceIndex"]);//(int) .ToString() ds.DeviceKind = a; ds.DeviceName = dv[0]["F_DeviceName"].ToString(); ds.ErrorCode = a2; ds.LockedState = a1; ds.ManTaskReserve = a3; return ds; } else { return null; } } catch (Exception ex) { errorText = ex.Message; return null; } } public ManageTask[] GetManageTasks(string FieldName, string content, out string errorText) { errorText = string.Empty; try { ManageTask[] mt; DataView dv = dbo.ExceSQL(string.Format("SELECT * FROM T_Manage_Task where {0} like '%{1}%'", FieldName, content)).Tables[0].DefaultView; if (dv.Count > 0) { mt = new ManageTask[dv.Count]; for (int i = 0; i < dv.Count; i++) { mt[i] = new ManageTask(); mt[i].ManageTaskKindIndex = Convert.ToInt32(dv[i]["F_ManageTaskKindIndex"]); mt[i].FID = Convert.ToInt32(dv[i]["FID"]); mt[i].ControlTaskType = Convert.ToInt32(dv[i]["FControlTaskType"]); mt[i].PalletBarcode = dv[i]["FPalletBarcode"].ToString(); mt[i].StartDevice = dv[i]["FStartDevice"].ToString(); mt[i].StartCell = dv[i]["FStartCell"].ToString(); mt[i].EndDevice = dv[i]["FEndDevice"].ToString(); mt[i].EndCell = dv[i]["FEndCell"].ToString(); mt[i].Begtime = dv[i]["FBegtime"].ToString(); mt[i].Status = Convert.ToInt32(dv[i]["FStatus"]); } return mt; } else { return null; } } catch (Exception ex) { errorText = ex.Message; return null; } } public MonitorTask[] GetMonitorTasks(string FieldName, string content, out string errorText) { errorText = string.Empty; try { MonitorTask[] mt; DataView dv = dbo.ExceSQL(string.Format("SELECT F_TxtParam,F_ManageTaskIndex,F_MonitorIndex,T_Monitor_Task.F_DeviceIndex,F_DeviceName,T_Monitor_Task.F_DeviceCommandIndex,F_DeviceCommandName,T_Monitor_Task.F_ErrorCode,F_ErrorName,F_Status,F_UseAwayFork,F_NumParam1,F_NumParam2,F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task, T_Base_Device,T_Base_Device_Command,T_Base_Device_State where T_Monitor_Task.F_Status = T_Base_Device_State.F_DeviceErrorIndex and T_Base_Device_State.F_DeviceKindIndex = T_Base_Device.F_DeviceKindIndex and T_Monitor_Task.F_DeviceIndex = T_Base_Device.F_DeviceIndex and T_Monitor_Task.F_DeviceCommandIndex = T_Base_Device_Command.F_DeviceCommandIndex and T_Base_Device_Command.F_DeviceKindIndex = T_Base_Device.F_DeviceKindIndex and {0} like '%{1}%'", FieldName, content)).Tables[0].DefaultView; if (dv.Count > 0) { mt = new MonitorTask[dv.Count]; for (int i = 0; i < dv.Count; i++) { mt[i] = new MonitorTask(); mt[i].BarCode = dv[i]["F_TxtParam"].ToString(); mt[i].ManageTaskIndex = Convert.ToInt32(dv[i]["F_ManageTaskIndex"]); mt[i].MonitorIndex = Convert.ToInt32(dv[i]["F_MonitorIndex"]); mt[i].DeviceIndex = Convert.ToInt32(dv[i]["F_DeviceIndex"]); mt[i].DeviceName = dv[i]["F_DeviceName"].ToString(); mt[i].DeviceCommandIndex = Convert.ToInt32(dv[i]["F_DeviceCommandIndex"]); mt[i].DeviceCommandName = dv[i]["F_DeviceCommandName"].ToString(); mt[i].ErrorCode = Convert.ToInt32(dv[i]["F_ErrorCode"]); mt[i].ErrorName = dv[i]["F_ErrorName"].ToString(); mt[i].Status = Convert.ToInt32(dv[i]["F_Status"]); mt[i].ForkNo = Convert.ToInt32(dv[i]["F_UseAwayFork"]); mt[i].NumParam1Z = Convert.ToInt32(dv[i]["F_NumParam1"]); mt[i].NumParam2X = Convert.ToInt32(dv[i]["F_NumParam2"]); mt[i].NumParam3Y = Convert.ToInt32(dv[i]["F_NumParam3"]); mt[i].NumParam4Z = Convert.ToInt32(dv[i]["F_NumParam4"]); mt[i].NumParam5X = Convert.ToInt32(dv[i]["F_NumParam5"]); mt[i].NumParam6Y = Convert.ToInt32(dv[i]["F_NumParam6"]); } return mt; } else { return null; } } catch (Exception ex) { errorText = ex.Message; return null; } } public ST_Cell[] GetAllCellInfos(out string errorText) { errorText = string.Empty; ST_Cell[] sc; DataView dv = new DataView(); try { dv = dbo.ExceSQL("SELECT FID, FWAREHOUSE, FLaneWay, FCELLCODE, FCELLNAME, FCELLSTATUS,FRUNSTATUS, F_Z, F_X, F_Y, FPALLETBARCODE, FStack FROM ST_CELL").Tables[0].DefaultView; if (dv.Count > 0) { sc = new ST_Cell[dv.Count]; for (int i = 0; i < dv.Count; i++) { sc[i] = new ST_Cell(); sc[i].FID = Convert.ToInt32(dv[i]["FID"]); sc[i].WAREHOUSE = dv[i]["FWAREHOUSE"].ToString(); sc[i].LaneWay = Convert.ToInt32(dv[i]["FLaneWay"]); sc[i].CELLCODE = dv[i]["FCELLCODE"].ToString(); sc[i].CELLNAME = dv[i]["FCELLNAME"].ToString(); sc[i].CELLSTATUS = dv[i]["FCELLSTATUS"].ToString(); sc[i].RUNSTATUS = dv[i]["FRUNSTATUS"].ToString(); sc[i].RUNSTATUS = dv[i]["FRUNSTATUS"].ToString(); sc[i].Z = Convert.ToInt32(dv[i]["F_Z"]); sc[i].X = Convert.ToInt32(dv[i]["F_X"]); sc[i].Y = Convert.ToInt32(dv[i]["F_Y"]); sc[i].Stack = Convert.ToInt32(dv[i]["FStack"]); sc[i].PALLETBARCODE = dv[i]["FPALLETBARCODE"].ToString(); } return sc; } else { return null; } } catch (Exception ex) { errorText = ex.Message; return null; } finally { dv.Dispose(); } } public bool SetDeviceStateInfo(DeviceStateType devstate, out string errorText) { errorText = string.Empty; try { object[] ob = new object[4] { devstate.LockedState, devstate.ErrorCode, devstate.ManTaskReserve, devstate.DeviceIndex }; int acount = dbo.ExecuteSql(string.Format("update T_Base_Device set F_LockedState={0},F_errorcode={1},F_ManTaskReserve={2} where F_DeviceIndex={3}", ob)); return true; } catch (Exception ex) { errorText = ex.Message; return false; } } public bool SetRouteStateInfo(int routeID, bool isEnabled, out string errorText) { int fstatus = 0; errorText = string.Empty; try { if (isEnabled == true) { fstatus = 1; } else { fstatus = 0; } Model.MRoute mr = new Model.MRoute(); mr.RouteID = routeID; mr.Status = fstatus; return SetRouteState(mr, out errorText); } catch (Exception ex) { errorText = ex.Message; return false; } } public bool SetDeviceJoinRouteStateInfo(int deviceIndex, bool isEnabled, out string errorText) { DataView dv = new DataView(); int fstatus = 0; errorText = string.Empty; StringBuilder sql = new StringBuilder(); try { if (isEnabled == true) { fstatus = 1; } else { fstatus = 0; } sql.Remove(0, sql.Length); sql.Append("select distinct F_RouteID from T_Base_Route_Device where F_DeviceOrder>0 and F_DeviceIndex=").Append(deviceIndex); dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; Model.MRoute mr = new Model.MRoute(); for (int i = 0; i < dv.Count; i++) { mr.RouteID = (int)dv[0]["F_RouteID"]; mr.Status = fstatus; SetRouteState(mr, out errorText); } return true; } catch (Exception ex) { errorText = ex.Message; return false; } finally { dv.Dispose(); } } public LanguageContent[] GetLanguageContent(string language, out string errorText) { errorText = string.Empty; try { LanguageContent[] lan; DataView dv = dbo.ExceSQL(string.Format("SELECT Name, {0} FROM T_Base_MultiLanguage", language)).Tables[0].DefaultView; lan = new LanguageContent[dv.Count]; for (int i = 0; i < dv.Count; i++) { LanguageContent ml = new LanguageContent(); ml.key = dv[i][0].ToString(); ml.value = dv[i][1].ToString(); lan[i] = ml; } return lan; } catch (Exception ex) { errorText = ex.Message; return null; } } public string[] GetLanguageFields(out string errorText) { errorText = string.Empty; string[] lf; try { DataView dv = dbo.ExceSQL("SELECT name FROM syscolumns WHERE (id = OBJECT_ID('T_Base_MultiLanguage')) and name!='Name'").Tables[0].DefaultView; if (dv.Count > 0) { lf = new string[dv.Count]; for (int i = 0; i < dv.Count; i++) { lf[i] = dv[i][0].ToString(); } return lf; } else { return null; } } catch (Exception ex) { errorText = ex.Message; return null; } } public DevicesDic GetDevicesDic(out string errorText) { errorText = string.Empty; try { DevicesDic dd = new DevicesDic(); dd.MDevices = Model.CGetInfo.DeviceInfo; return dd; } catch (Exception ex) { errorText = ex.Message; return null; } } /// /// 通过设置订阅的监控模式,刷新订阅 /// /// public bool RefreshMonitoringMode() {//20150103增加断网恢复 OPCClient.CCommonOPCClient.RefreshMonitoringMode(); return true; } /// /// 注册客户端 /// /// 客户端标识 /// /// public bool RegisterClient(string userID,string userDescription,out string errText) { try { #region 检测用户是否存在 if (ClientShowLists.ContainsValue(userID) == true ) { errText = "用户:" + userDescription + "已经登录了!请更换其它用户名称重新登录!"; return false; } #endregion var client = OperationContext.Current.GetCallbackChannel(); var id = OperationContext.Current.SessionId; OperationContext.Current.Channel.Closing += new EventHandler(Channel_Closing); OperationContext.Current.Channel.Faulted += new EventHandler(Channel_Closing); ClientCallbackLists.Add(client, userDescription); ClientShowLists.Add(client, userID); ClientLogEventArgs coea = new ClientLogEventArgs(userDescription + ":连接服务!"); OnChannelOpen(coea); errText = string.Empty; return true; } catch(Exception ex) { errText =ex.StackTrace+ ex.Message; return false; } } public Model.MDevice SendAllDeviceStates(int device) { return Model.CGetInfo.GetDeviceInfo(device); } /// /// 注销客户端 /// /// 用户标识 /// /// public bool LogoutClient(string userID, out string ErrText) { try { var client = OperationContext.Current.GetCallbackChannel(); ClientCallbackLists.Remove(client); ClientShowLists.Remove(client); ClientLogEventArgs coea = new ClientLogEventArgs(userID + ":断开服务!"); OnClientLogout(coea); ErrText = string.Empty; return true; } catch (Exception ex) { ErrText =ex.StackTrace+ ex.Message; return false; } } /// /// 获取任务 /// /// 巷道限制 /// 更新"UPDATE",追加"APPEND",替换"REPLACE" /// public bool ObtainTask(string laneway,string Order) { try { if (Order == "UPDATE") { CStaticClass.ManZWhere = new StringBuilder(laneway); } else if (Order == "APPEND") { if (CStaticClass.ManZWhere.ToString().IndexOf(laneway.ToString()) < 0) { CStaticClass.ManZWhere.Append(laneway); } } else if (Order == "REPLACE") { CStaticClass.ManZWhere.Replace(laneway, ""); } CStaticClass.ObtainManageTask = true; CObtainTask.StartListenObtainTask(); //add for qdty //CCallService.StartListen(); //CStorageCheck.StartListen(); var client = (IClient)OperationContext.Current.Channel; string userDescription = ClientCallbackLists[client].ToString(); CommonClassLib.CCarryConvert.WriteDarkCasket("获取任务开关", "手工打开", "", "操作者:" + userDescription); return true ; } catch { return false; } } public bool StopObtainTask() { try { CStaticClass.ManZWhere.Remove(0, CStaticClass.ManZWhere.Length); CStaticClass.ObtainManageTask = false; CObtainTask.EndListenObtainTask(); ////add for qdty //CCallService.EndListen(); //CStorageCheck.EndListen(); var client = (IClient)OperationContext.Current.Channel; string userDescription = ClientCallbackLists[client].ToString(); CommonClassLib.CCarryConvert.WriteDarkCasket("获取任务开关", "手工关闭", "", "操作者:" + userDescription); return true; } catch { return false; } } public bool OrderTurnOn() { if (CStaticClass.Order == true) return true;//20121203 DataView dvx = new DataView(); DataView dv = new DataView(); try { //CStaticClass.RefreshMonitor += new RefreshMonitorEventHandler(MonitorRefreshMonitor); //CGetState.RefreshMonitor += new RefreshMonitorEventHandler(MonitorRefreshMonitor); //CControl.RefreshMonitor += new RefreshMonitorEventHandler(MonitorRefreshMonitor); //CDisassembleTask.RefreshMonitor += new RefreshMonitorEventHandler(MonitorRefreshMonitor); //CObtainTask.RefreshMonitor += new RefreshMonitorEventHandler(MonitorRefreshMonitor); //CParsePLCData.RefreshMonitor += new RefreshMonitorEventHandler(MonitorRefreshMonitor); //OPCClient.CCommonOPCClient.UpdateDB += new CUpdateDBEventHandler(CCommon_UpdateDB); //SocketsTCPIP.CClientTCPIP.UpdateDB += new CUpdateDBEventHandler(CListenAGVState_UpdateDB); //SocketsTCPIP.CClientTCPIP.SendDeviceOrder += new CSendDeviceOrderEventHandler(CClientTCPIP_SendDeviceOrder); //SocketsTCPIP.CClientTCPIP.WriteDarkCasket+=new CWriteDarkCasketEventHandler(CClientTCPIP_WriteDarkCasket); dv = dbo.ExceSQL("SELECT F_ReadSubscription, F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_S7Connection, F_SplitByte FROM T_Base_Device WHERE (F_ReadSubscription IS NOT NULL) AND (F_ReadSubscription =F_DeviceIndex) ORDER BY F_ReadSubscription").Tables[0].DefaultView; for (int i = 0; i < dv.Count; i++) { dvx = dbo.ExceSQL(string.Format("SELECT (MAX(F_DBW2Address) + F_DBWGetLength) AS maxdbw2 FROM T_Base_Device WHERE (F_ReadSubscription = '{0}') AND (F_DeviceKindIndex != 33) GROUP BY F_DBWGetLength ORDER BY maxdbw2 DESC", dv[i]["F_ReadSubscription"])).Tables[0].DefaultView; if (dvx.Count > 0) { if (CStaticClass.MutiReadSubscriptionDeviceStateReturns.ContainsKey(dv[i]["F_ReadSubscription"].ToString()) == false) { CStaticClass.MutiReadSubscriptionDeviceStateReturns.Add(dv[i]["F_ReadSubscription"].ToString(), new int[Convert.ToInt32(dvx[0]["maxdbw2"]) - Convert.ToInt32(dv[i]["F_DBW2Address"])]); } } } dv = dbo.ExceSQL("SELECT F_ReadSubscription, F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_S7Connection, F_SplitByte FROM T_Base_Device WHERE (F_ReadSubscription IS NOT NULL) AND (F_DeviceKindIndex=33) ORDER BY F_ReadSubscription").Tables[0].DefaultView; for (int i = 0; i < dv.Count; i++) { if (CStaticClass.MutiReadSubscriptionDeviceSplitReturns.ContainsKey(dv[i]["F_ReadSubscription"].ToString()) == false) { CStaticClass.MutiReadSubscriptionDeviceSplitReturns.Add(dv[i]["F_ReadSubscription"].ToString(), new int[Convert.ToInt32(dv[i]["F_DBWGetLength"])]); } } CStaticClass.Order = true; CStaticClass.ReConnect(); CParsePLCData.StartListen(); CUpdateIoControl.StartListen(); // NewWrieDarkCasket 位置1 OPCClient.CCommonOPCClient.CreateSubscriptionGroup(); return true; } catch { return false; } finally { dv.Dispose(); dvx.Dispose(); } } public bool OrderTurnOff() { try { CStaticClass.Order = false; //CStaticClass.RefreshMonitor -= new RefreshMonitorEventHandler(MonitorRefreshMonitor); //CGetState.RefreshMonitor -= new RefreshMonitorEventHandler(MonitorRefreshMonitor); //CControl.RefreshMonitor -= new RefreshMonitorEventHandler(MonitorRefreshMonitor); //CDisassembleTask.RefreshMonitor -= new RefreshMonitorEventHandler(MonitorRefreshMonitor); //CObtainTask.RefreshMonitor -= new RefreshMonitorEventHandler(MonitorRefreshMonitor); ////CObtainTask.UpdateDB -= new CUpdateDBEventHandler(CSqlEXE_UpdateDB); //CParsePLCData.RefreshMonitor -= new RefreshMonitorEventHandler(MonitorRefreshMonitor); //OPCClient.CCommonOPCClient.UpdateDB -= new CUpdateDBEventHandler(CCommon_UpdateDB); OPCClient.CCommonOPCClient.DisConnectOPCServer();//20141201张磊发现错误,应该注销订阅和事件 CDisassembleTask.EndListen(); //20121108 //SocketsTCPIP.CClientTCPIP.UpdateDB -= new CUpdateDBEventHandler(CListenAGVState_UpdateDB); //SocketsTCPIP.CClientTCPIP.WriteDarkCasket -= new CWriteDarkCasketEventHandler(CClientTCPIP_WriteDarkCasket); //SocketsTCPIP.CClientTCPIP.SendDeviceOrder -= new CSendDeviceOrderEventHandler(CClientTCPIP_SendDeviceOrder); SocketsTCPIP.CClientTCPIP.EndConnect(); CParsePLCData.EndListen(); CUpdateIoControl.EndListen(); // NewWrieDarkCasket 位置2 return true; } catch { return false; } } public bool DeviceCommunicationInit(string CommunicationType, out string ErrText) { try { if(CommunicationType.IndexOf("OPCClient")>=0) { OPCClient.CCommonOPCClient.ConnectCount = new Dictionary(); } else if (CommunicationType.IndexOf("SocketsTCPIP") >= 0) {//CommunicationType="SocketsTCPIP:191.168.1.3,3000" char[] cc = new char[1] { ':' }; string[] sp=CommunicationType.Split(cc); string remoteip = string.Empty; int port = 0; if (sp.Length > 1) { cc = new char[1] { ',' }; string[] sp1 = sp[1].Split(cc); remoteip = sp1[0]; port = Convert.ToInt32(sp1[1]); SocketsTCPIP.CClientTCPIP.TcpIPInitCount[remoteip] = 0; SocketsTCPIP.CClientTCPIP.InitClientTCPIP(remoteip, port); } } ErrText = string.Empty; return true; } catch (Exception ex) { ErrText=ex.StackTrace+ex.Message; return false; } } public DataTable GetUsers(out string Errtext) { DataView dv = new DataView(); try { dv = dbo.ExceSQL(string.Format("SELECT f_userid, f_username, f_purview, f_password FROM T_Base_Users")).Tables[0].DefaultView; Errtext = string.Empty; if (dv.Count <= 0) { return null; } else return dv.Table; } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return null; } finally { dv.Dispose(); } } public bool BuildHandTask(Model.HandTask Handtask, out string Errtext) {//20141201张磊发现没验证货位和巷道 DataView dv = new DataView(); try { string Sql = string.Empty; string dtime = DateTime.Now.ToString("u"); dtime = dtime.Substring(0, dtime.Length - 1); string qcell = string.Empty, scell = string.Empty; int hidx = GetManageHandIdx(); int hmindx = ccf.GetMonitorIndex(hidx, 4); int rehidx = 0, rehmindx = 0; int[] relfid=null; //20101028 int z = 0, x = 0, y = 0, z1 = 0, x1 = 0, y1 = 0, Inworkbench = 0; ; int routeIDsub = GetRouteIDsub(Convert.ToInt32(Handtask._deviceIndex)); if ((routeIDsub == -1) && (ccf.GetDeviceKindIdx(Handtask._deviceIndex) != 13) && (ccf.GetDeviceKindIdx(Handtask._deviceIndex) != 31)) { Errtext = "您选择的设备错误!"; return false; } #region 堆垛机 if (ccf.GetDeviceKindIdx(Handtask._deviceIndex) == 1) { char[] cc = new char[1] { '-' }; string[] sp = Handtask._cellcodeBegin.Split(cc); if (sp.Length >= 3) { z = Convert.ToInt32(sp[0]); StringBuilder sql = new StringBuilder();//gjn手工任务转换排值 sql.Clear(); sql.Append("select f_lanedeviceindex from T_BASE_LANEINFO WHERE f_stackindex=").Append(Convert.ToInt32(Handtask._deviceIndex)); dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv.Count > 0) { sql.Clear(); sql.Append("select F_SENDZ from T_BASE_SENDROW WHERE F_WMSZ=").Append(Convert.ToInt32(z)).Append(" and F_LANENO= ").Append(Convert.ToInt32(dv[0]["f_lanedeviceindex"])); dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv.Count > 0) { sp[0] = Convert.ToString(dv[0][0]); } } z = Convert.ToInt32(sp[0]); x = Convert.ToInt32(sp[1]); y = Convert.ToInt32(sp[2]); } sp = Handtask._cellcodeEnd.Split(cc); if (sp.Length >= 3) { z1 = Convert.ToInt32(sp[0]); StringBuilder sql = new StringBuilder();//gjn手工任务转换排值 sql.Clear(); sql.Append("select f_lanedeviceindex from T_BASE_LANEINFO WHERE f_stackindex=").Append(Convert.ToInt32(Handtask._deviceIndex)); dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv.Count > 0) { sql.Clear(); sql.Append("select F_SENDZ from T_BASE_SENDROW WHERE F_WMSZ=").Append(Convert.ToInt32(z1)).Append(" and F_LANENO= ").Append(Convert.ToInt32(dv[0]["f_lanedeviceindex"])); dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dv.Count > 0) { sp[0] = Convert.ToString(dv[0][0]); } } z1 = Convert.ToInt32(sp[0]); x1 = Convert.ToInt32(sp[1]); y1 = Convert.ToInt32(sp[2]); } } #endregion #region 物流输送机 if (ccf.GetDeviceKindIdx(Handtask._deviceIndex) == 2) { z = Handtask._deviceIndex; z1 = Convert.ToInt32(Handtask._arrowLocation); } #endregion if (ccf.GetDeviceKindIdx(Handtask._deviceIndex) == 4) {//RGV //z = Convert.ToInt32(Handtask._arrowLocation); //z1 = 0; if (Convert.ToInt32(Handtask._deviceOrder) == 2 || Convert.ToInt32(Handtask._deviceOrder) == 7) { z = Convert.ToInt32(Handtask._arrowLocation); z1 = 0; } else if (Convert.ToInt32(Handtask._deviceOrder) == 3) { z = 0; z1 = Convert.ToInt32(Handtask._arrowLocation); } } #region 高端输送机 if (ccf.GetDeviceKindIdx(Handtask._deviceIndex) == 13) { z = Handtask._begindeviceIndex; z1 = Convert.ToInt32(Handtask._arrowLocation); Inworkbench = Handtask._forkNo; } #endregion string useawayfork = "-"; int[] xx; int[] xx1; string barcode = string.Empty; useawayfork = Handtask._forkNo.ToString(); char[] cp=new char[1]{','}; //if (Handtask._correlTaskForks.Length > 0) if (false) { string[] cforks = Handtask._correlTaskForks.Split(cp); xx = new int[cforks.Length]; xx1 = new int[cforks.Length]; relfid = new int[cforks.Length]; for (int i = 0; i < cforks.Length; i++) { if (ccf.GetDeviceKindIdx(Handtask._deviceIndex) == 1) { string useawayfork1 = cforks[i]; xx[i] = x;//+ (Convert.ToInt32(useawayfork1)-Handtask._forkNo);//扬州晶澳 xx1[i] = x1;// +(Convert.ToInt32(useawayfork1) - Handtask._forkNo); #region 堆垛机 if ((Handtask._deviceOrder == 4) || (Handtask._deviceOrder == 5)) { object[] ob;//20141201 rehidx = hidx + 1+i; rehmindx = ccf.GetMonitorIndex(rehidx, 4); string bc = rehmindx.ToString(); int bcl = bc.Length; for (int j = 0; j < (6 - bcl); j++) { bc += j.ToString(); } if (Handtask._deviceOrder == 4)//取货 {//z-x-y if (x == 1) { //xx[i] = 1; } else { ob = new object[4] { z, xx[i], y, ccf.GetLaneWayNoFromStack(Handtask._deviceIndex) };//20141201 dv = dbo.ExceSQL(string.Format("SELECT FID FROM ST_CELL WHERE (F_Z = {0}) AND (F_X = {1}) AND (F_Y = {2}) and FLaneWay={3}", ob)).Tables[0].DefaultView;//20141201 if (dv.Count == 0) { Errtext = "堆垛机取货坐标在数据库不存在!"; return false; } } qcell = z.ToString() + "-" + xx[i].ToString() + "-" + y.ToString();//20101028 dbo.ExceSQL("insert into T_Monitor_Task(F_RouteID,F_ManageTaskIndex,F_ManageTaskKindIndex,F_MonitorIndex," + "F_DeviceIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6,F_UseAwayFork,F_TxtParam) " + "values(" + routeIDsub + "," + rehidx + ",4," + rehmindx + "," + Handtask._deviceIndex + "," + Handtask._deviceOrder + "," + z + "," + xx[i] + "," + y + ",0,0,0,'" + useawayfork1 + "','" + bc + "')"); } else if (Handtask._deviceOrder == 5)//送货 {//z1-x1-y1 if (x1 == 1) { //20130710xx1[i] = 1; } else { ob = new object[4] { z1, xx1[i], y1, ccf.GetLaneWayNoFromStack(Handtask._deviceIndex) };//20141201 dv = dbo.ExceSQL(string.Format("SELECT FID FROM ST_CELL WHERE (F_Z = {0}) AND (F_X = {1}) AND (F_Y = {2}) and FLaneWay={3}",ob)).Tables[0].DefaultView;//20141201 if (dv.Count == 0) { Errtext = "堆垛机送货坐标在数据库不存在!"; return false; } } scell = z1.ToString() + "-" + xx1[i].ToString() + "-" + y1.ToString();//20101028 dbo.ExceSQL("insert into T_Monitor_Task(F_RouteID,F_ManageTaskIndex,F_ManageTaskKindIndex,F_MonitorIndex," + "F_DeviceIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6,F_UseAwayFork,F_TxtParam) " + "values(" + routeIDsub + "," + rehidx + ",4," + rehmindx + "," + Handtask._deviceIndex + "," + Handtask._deviceOrder + ",0,0,0," + z1 + "," + xx1[i] + "," + y1 + ",'" + useawayfork1 + "','" + bc + "')"); } dbo.ExceSQL("insert into T_Manage_Task(FPALLETBARCODE,FID,F_ManageTaskKindIndex,F_RELATIVECONTORLID,FIntoStepOK,FSTARTDEVICE,FREMARK,FSTARTCELL,FENDDEVICE,FENDCELL,FBEGTIME) values('" + //bc + "'," + rehidx + ",4,-1,1," + Handtask._deviceIndex + ",'" + Handtask._deviceOrder + "','" + qcell + "'," + Handtask._deviceIndex + ",'" + scell + "','" + dtime + "')"); bc + "'," + rehidx + ",4,-1,1," + Handtask._deviceIndex + ",'','" + qcell + "'," + Handtask._deviceIndex + ",'" + scell + "','" + dtime + "')"); RecordMaxHandTaskFID(rehidx); relfid[i] = rehidx; } #endregion } else if (ccf.GetDeviceKindIdx(Handtask._deviceIndex) == 2) { rehidx = hidx + 1+i; rehmindx = ccf.GetMonitorIndex(rehidx, 4); string bc = rehmindx.ToString(); int bcl = bc.Length; for (int j = 0; j < (6 - bcl); j++) { bc += j.ToString(); } string useawayfork1 = (Handtask._forkNo + 1 + i).ToString(); string S_f_aheaddetect = "I" + Convert.ToString(Handtask._deviceIndex); Sql = "insert into T_Monitor_Task(F_RouteID,F_ManageTaskIndex,F_ManageTaskKindIndex,F_MonitorIndex," + "F_DeviceIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6,F_UseAwayFork,F_TxtParam) " + "values(" + routeIDsub + "," + rehidx + ",4," + rehmindx + "," + Handtask._deviceIndex + "," + Handtask._deviceOrder + "," + z + "," + x + "," + y + "," + z1 + "," + x1 + "," + y1 + ",'" + useawayfork1 + "','" + bc + "')"; dbo.ExceSQL(Sql); Sql = "insert into T_Manage_Task(FPALLETBARCODE,FID,F_ManageTaskKindIndex,F_RELATIVECONTORLID,FIntoStepOK,FSTARTDEVICE,FREMARK,FSTARTCELL,FENDDEVICE,FENDCELL,FBEGTIME,WORK_MODE) values('" + //bc + "'," + rehidx + ",4,-1,1," + Handtask._deviceIndex + ",'" + Handtask._deviceOrder + "','" + z.ToString() + "-" + x.ToString() + "-" + y.ToString() bc + "'," + rehidx + ",4,-1,1," + Handtask._deviceIndex + ",'','" + z.ToString() + "-" + x.ToString() + "-" + y.ToString() + "'," + Handtask._arrowLocation + ",'" + z1.ToString() + "-" + x1.ToString() + "-" + y1.ToString() + "','" + dtime + "'," + Handtask._forkNo + ")"; dbo.ExceSQL(Sql); RecordMaxHandTaskFID(rehidx); relfid[i] = rehidx; } } } //if ((ccf.GetDeviceKindIdx(Handtask._deviceIndex) == 13) || (ccf.GetDeviceKindIdx(Handtask._deviceIndex) == 31)) //{ // barcode = Handtask._cellcodeBegin; //} //else //{ // barcode = hmindx.ToString(); //} //int bcll = barcode.Length; //for (int j = 0; j < (6 - bcll); j++) //{ // barcode += j.ToString(); //} barcode = Handtask._correlTaskForks; Sql = "insert into T_Monitor_Task(F_RouteID,F_ManageTaskIndex,F_ManageTaskKindIndex,F_MonitorIndex," + "F_DeviceIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6,F_UseAwayFork,F_TxtParam,f_no1) " + "values(" + routeIDsub + "," + hidx + ",4," + hmindx + "," + Handtask._deviceIndex + "," + Handtask._deviceOrder + "," + z + "," + x + "," + y + "," + z1 + "," + x1 + "," + y1 + ",'" + useawayfork + "','" + barcode + "','1')"; dbo.ExceSQL(Sql); Sql = "insert into T_Manage_Task(FPALLETBARCODE,FID,F_ManageTaskKindIndex,F_RELATIVECONTORLID,FIntoStepOK,FSTARTDEVICE,FREMARK,FSTARTCELL,FENDDEVICE,FENDCELL,FBEGTIME,WORK_MODE) values('" + barcode + "'," + hidx + ",4,-1,1," + Handtask._deviceIndex + ",'" + Handtask._deviceOrder + "','" + z.ToString() + "-" + x.ToString() + "-" + y.ToString() + "'," + Handtask._arrowLocation + ",'" + z1.ToString() + "-" + x1.ToString() + "-" + y1.ToString() + "','" + dtime + "'," + Handtask._forkNo + ")"; dbo.ExceSQL(Sql); RecordMaxHandTaskFID(hidx); if (relfid!=null ) { dbo.ExecuteSql("update T_Manage_Task set F_RELATIVECONTORLID=" + hidx + " where F_ManageTaskKindIndex=4 and FID=" + hidx); for (int i = 0; i < relfid.Length; i++) { dbo.ExecuteSql("update T_Manage_Task set F_RELATIVECONTORLID=" + hidx + " where F_ManageTaskKindIndex=4 and FID=" + relfid[i]); } } Errtext = string.Empty; CDataChangeEventArgs cea = new CDataChangeEventArgs(null, null); OnDataChange("BuildHandTask", cea); return true; } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return false; } finally { dv.Dispose(); } } public bool BuildHandAssociateTask(int ConveyorIndex, int ConveyorOrder, int RgvIndex, int RgvOrder, string RgvOrderName, out string Errtext) { try { int routeRGVIDsub = GetRouteIDsub(RgvIndex); int routeIDsub = GetRouteIDsub(ConveyorIndex); int hidx = GetManageHandIdx(); int hmindx = ccf.GetMonitorIndex(hidx, 4); int hmindx1 = ccf.GetMonitorIndex(hidx, 4); string Sql = string.Empty; string dtime = DateTime.Now.ToString("u"); dtime = dtime.Substring(0, dtime.Length - 1); if (RgvOrderName.Contains("接") == true) {//输送机送货是主任务 Sql = "insert into T_Monitor_Task(F_RouteID,F_ManageTaskIndex,F_ManageTaskKindIndex,F_MonitorIndex," + "F_DeviceIndex,F_DeviceCommandIndex,F_NumParam1,F_Associate) " + "values(" + routeIDsub + "," + hidx + ",4," + hmindx + "," + ConveyorIndex + "," + ConveyorOrder + "," + ConveyorIndex + "," + hmindx1 + ")"; dbo.ExceSQL(Sql); Sql = "insert into T_Manage_Task(FPALLETBARCODE,FID,F_ManageTaskKindIndex,F_RELATIVECONTORLID,FIntoStepOK,FSTARTDEVICE,FREMARK,FSTARTCELL,FENDDEVICE,FENDCELL,FBEGTIME,WORK_MODE) values('-'," + hidx + ",4,-1,1," + ConveyorIndex + ",'" + ConveyorOrder + "','-',0,'-','" + dtime + "',2)"; dbo.ExceSQL(Sql); RecordMaxHandTaskFID(hidx); Sql = "insert into T_Monitor_Task(F_RouteID,F_ManageTaskIndex,F_ManageTaskKindIndex,F_MonitorIndex," + "F_DeviceIndex,F_DeviceCommandIndex,F_NumParam1) " + "values(" + routeRGVIDsub + "," + (hidx+1) + ",4," + hmindx1 + "," + RgvIndex + "," + RgvOrder + "," + ConveyorIndex+ ")"; dbo.ExceSQL(Sql); Sql = "insert into T_Manage_Task(FPALLETBARCODE,FID,F_ManageTaskKindIndex,F_RELATIVECONTORLID,FIntoStepOK,FSTARTDEVICE,FREMARK,FSTARTCELL,FENDDEVICE,FENDCELL,FBEGTIME,WORK_MODE) values('-'," + (hidx+1) + ",4,-1,1," + RgvIndex + ",'" + RgvOrder + "','-',0,'-','" + dtime + "',2)"; dbo.ExceSQL(Sql); RecordMaxHandTaskFID((hidx+1)); } else {//RGV送货 主任务 Sql = "insert into T_Monitor_Task(F_RouteID,F_ManageTaskIndex,F_ManageTaskKindIndex,F_MonitorIndex," + "F_DeviceIndex,F_DeviceCommandIndex,F_NumParam1,F_Associate) " + "values(" + routeRGVIDsub + "," + hidx + ",4," + hmindx + "," + RgvIndex + "," + RgvOrder + "," + ConveyorIndex + "," + hmindx1 + ")"; dbo.ExceSQL(Sql); Sql = "insert into T_Manage_Task(FPALLETBARCODE,FID,F_ManageTaskKindIndex,F_RELATIVECONTORLID,FIntoStepOK,FSTARTDEVICE,FREMARK,FSTARTCELL,FENDDEVICE,FENDCELL,FBEGTIME,WORK_MODE) values('-'," + (hidx) + ",4,-1,1," + RgvIndex + ",'" + RgvOrder + "','-',0,'-','" + dtime + "',2)"; dbo.ExceSQL(Sql); RecordMaxHandTaskFID((hidx )); Sql = "insert into T_Monitor_Task(F_RouteID,F_ManageTaskIndex,F_ManageTaskKindIndex,F_MonitorIndex," + "F_DeviceIndex,F_DeviceCommandIndex,F_NumParam1) " + "values(" + routeIDsub + "," + (hidx+1) + ",4," + hmindx1 + "," + ConveyorIndex + "," + ConveyorOrder + "," + ConveyorIndex + ")"; dbo.ExceSQL(Sql); Sql = "insert into T_Manage_Task(FPALLETBARCODE,FID,F_ManageTaskKindIndex,F_RELATIVECONTORLID,FIntoStepOK,FSTARTDEVICE,FREMARK,FSTARTCELL,FENDDEVICE,FENDCELL,FBEGTIME,WORK_MODE) values('-'," + (hidx+1) + ",4,-1,1," + ConveyorIndex + ",'" + ConveyorOrder + "','-',0,'-','" + dtime + "',2)"; dbo.ExceSQL(Sql); RecordMaxHandTaskFID((hidx+1)); } Errtext = string.Empty; CDataChangeEventArgs cea = new CDataChangeEventArgs(null, null); OnDataChange("BuildHandTask", cea); return true; } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return false; } } public bool BuildAutoTask(Model.AutoTask Autotask, out string Errtext) { DataView dv = new DataView(); try { string Sql, _tasktype; if ((Autotask._enableStartCell == true) && (ccf.GetDeviceKindIdx(Convert.ToInt32(Autotask._startDevice)) == 10)) { if (dbo.Exists("SELECT FID FROM ST_CELL where FLaneWay=" + Autotask._startDevice + " and FCELLCODE='" + Autotask._startCell + "'") == false) { Errtext= "起始位置和起始货位编码在数据库中没有记录!"; return false; } } if ((Autotask._enableEndCell == true) && (ccf.GetDeviceKindIdx(Convert.ToInt32(Autotask._endDevice)) == 10)) { if (dbo.Exists("SELECT FID FROM ST_CELL where FLaneWay=" + Autotask._endDevice + " and FCELLCODE='" + Autotask._endCell + "'") == false) { Errtext= "终点位置和终点货位编码在数据库中没有记录!"; return false; } } #region AGV通道 if ((Autotask._enableStartCell == true) && (ccf.GetDeviceKindIdx(Convert.ToInt32(Autotask._startDevice)) == 11)) { if (dbo.Exists("SELECT F_AGVGateDeviceIndex FROM T_Base_AGV_Gate WHERE (F_ChannelsIndex = " + Autotask._startDevice + ") AND (F_AGVGateDeviceIndex = " + Autotask._startCell + ")") == false) { Errtext="AGV站点设备在数据库中没有记录!"; return false ; } } if ((Autotask._enableEndCell == true) && (ccf.GetDeviceKindIdx(Convert.ToInt32(Autotask._endDevice)) == 11)) { if (dbo.Exists("SELECT F_AGVGateDeviceIndex FROM T_Base_AGV_Gate WHERE (F_ChannelsIndex = " + Autotask._endDevice + ") AND (F_AGVGateDeviceIndex = " + Autotask._endCell + ")") == false) { Errtext="AGV站点设备在数据库中没有记录!"; return false; } } #endregion Sql = "SELECT F_RouteID FROM T_Base_Route WHERE (F_StartDevice = " + Autotask._startDevice + ") AND (F_EndDevice = " + Autotask._endDevice + ")"; dv = dbo.ExceSQL(Sql).Tables[0].DefaultView; if (dv.Count <= 0) { Errtext="起始位置和结束位置不在有效路径的范围内!"; return false; } _tasktype = Autotask._controlType.ToString(); string FSTARTCELL = Autotask._startCell, FENDCELL = Autotask._endCell, UseAwayFork = "-"; int FSTARTDEVICE = Convert.ToInt32(Autotask._startDevice); int FENDDEVICE = Convert.ToInt32(Autotask._endDevice); Model.MDevice devinfo = Model.CGetInfo.GetDeviceInfo(FSTARTDEVICE); int flaneway = 0; int stackno = 0; //dbo.TransBegin(); try { if (devinfo != null) { int uc = 0; if (int.TryParse(FSTARTCELL, out uc) == true) { UseAwayFork = dbo.GetSingle("SELECT F_UseAwayFork FROM T_Base_AGV_Gate WHERE ( F_AGVGateDeviceIndex= " + uc + ")").ToString(); } if ((UseAwayFork == "-") || (UseAwayFork == null)) { UseAwayFork = devinfo.DoubleFork; } } if ((UseAwayFork == "-") || (UseAwayFork == null)) {//20110412 devinfo = Model.CGetInfo.GetDeviceInfo(FENDDEVICE); if (devinfo != null) { int uc = 0; if (int.TryParse(FENDCELL, out uc) == true) { UseAwayFork = dbo.GetSingle("SELECT F_UseAwayFork FROM T_Base_AGV_Gate WHERE ( F_AGVGateDeviceIndex= " + uc + ")").ToString(); } if ((UseAwayFork == "-") || (UseAwayFork == null)) { UseAwayFork = devinfo.DoubleFork; } } } StringBuilder sbs = new StringBuilder(); int FSTARTUCODE = 0; int FENDUCODE = 0; sbs.Clear(); sbs.Append("SELECT FUCODE,FUCONVEYOR FROM ST_CELL where FCELLCODE='").Append(FSTARTCELL) .Append("' and FLaneWay=").Append(FSTARTDEVICE).Append(" and FUCODE>0"); dv = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dv.Count > 0) { FSTARTUCODE = Convert.ToInt32(dv[0][0]); FSTARTCELL = dv[0][1].ToString(); } sbs.Clear(); sbs.Append("SELECT FUCODE,FUCONVEYOR FROM ST_CELL where FCELLCODE='").Append(FENDCELL) .Append("' and FLaneWay=").Append(FENDDEVICE).Append(" and FUCODE>0"); dv = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; if (dv.Count > 0) { FENDUCODE = Convert.ToInt32(dv[0][0]); FENDCELL = dv[0][1].ToString(); } int a = 0; if (int.TryParse(FSTARTCELL, out a) == false) {//货位编码 //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT FLaneWay,FStack FROM ST_CELL where FCELLCODE='").Append(FSTARTCELL).Append("' and FLaneWay=").Append(FSTARTDEVICE); dv = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; //20101124 if (dv.Count > 0) { flaneway = FSTARTDEVICE; stackno = Convert.ToInt32(dv[0]["FStack"]);//20101028 } } if (int.TryParse(FENDCELL, out a) == false) { //20101124 sbs.Remove(0, sbs.Length); sbs.Append("SELECT FLaneWay,FStack FROM ST_CELL where FCELLCODE='").Append(FENDCELL).Append("' and FLaneWay=").Append(FENDDEVICE); dv = dbo.ExceSQL(sbs.ToString()).Tables[0].DefaultView; //20101124 if (dv.Count > 0) { flaneway = FENDDEVICE; stackno = Convert.ToInt32(dv[0]["FStack"]);//20101028 } } string dtime = DateTime.Now.ToString("u");//20101028 dtime = dtime.Substring(0, dtime.Length - 1);//20101028 int AutoManageIdx = ccf.GetTempManageIdx(); UseAwayFork = "0"; string managetasktype = "2"; int modelType = 0; int dadai = 0; modelType = Autotask._diepan; dadai = Autotask._dadai; //插入临时调度任务T_Manage_Task(监控下的调度任务): Sql = "insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL," + "FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME,FSTARTUCODE,FENDUCODE,FCONTORL_BATCH,FMANAGETASKTYPE,BOXBOS,CONTROL_FLAG,f_relativecontorlid,FLOGIC_AREA) " + "values(" + AutoManageIdx + ",'" + Autotask._palletBarcode + "','" + _tasktype + "',2,'" + ccf.GetWarehouseIndex(FSTARTDEVICE, FSTARTCELL) + "','" + FSTARTDEVICE + "','" + FSTARTCELL + "','" + ccf.GetWarehouseIndex(FENDDEVICE, FENDCELL) + "','" + FENDDEVICE + "','" + FENDCELL + "'," + flaneway + "," + stackno + ",'" + UseAwayFork + "','" + dtime + "'," + FSTARTUCODE + "," + FENDUCODE + "," + Autotask._inWorkbench + ",'" + managetasktype + "'," + modelType + "," + dadai + ", -1" + ",'" + FENDDEVICE +"')";//20101028 dbo.ExecuteSql(Sql); //通知客户端更新界面 CDataChangeEventArgs cea = new CDataChangeEventArgs(null, null); OnDataChange("BuildAutoTask", cea); } catch (Exception ex) { Errtext = ex.StackTrace + ex.Message; return false; } Errtext = string.Empty; return true; } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return false; } finally { dv.Dispose(); } } public bool ModifyManageTask(int Mankind, int ManagetaskID, int ActionID, out string Errtext) { string barcode=ccf.GetBarCodeFromManageTask(ManagetaskID, Mankind); string remark = ccf.GetFremarkFromManageTask(Mankind,ManagetaskID); int enddevice = ccf.GetEndDeviceFromManage(ManagetaskID, Mankind); int ControlType = ccf.GetFCONTROLTASKTYPEFromManageTask(ManagetaskID, Mankind); int mti = Mankind; int fid = ManagetaskID; string cap = string.Empty; switch (mti) { case 1: cap = "调度任务"; break; case 2: cap = "自动任务"; break; case 3: cap = "临时任务"; break; case 4: cap = "手工任务"; break; } DataView dv = new DataView(); DataView dvaa = new DataView(); DataTable tableAGVGate = new DataTable(); var client = (IClient)OperationContext.Current.Channel; string userDescription = ClientCallbackLists[client].ToString(); //dbo.TransBegin(); try { #region 报告完成 if (ActionID == Model.CGeneralFunction.TASKFINISH) { dbo.ExceSQL(string.Format("update T_Monitor_Task set F_STATUS=-1 where F_ManageTaskKindIndex={0} and F_ManageTaskIndex={1} and F_STATUS=0", mti, fid)); dv = dbo.ExceSQL(string.Format("SELECT F_ManageTaskKindIndex, F_ManageTaskIndex,F_DeviceIndex,F_MonitorIndex,F_Status,F_DeviceCommandIndex " + ",F_NumParam2,F_NumParam5,F_NumParam4,F_TxtParam FROM T_Monitor_Task Where F_ManageTaskIndex={0} and F_ManageTaskKindIndex={1} order by F_MonitorIndex", fid, mti)).Tables[0].DefaultView; if (dv.Count > 0) {//有调度任务 //20100108 CommonClassLib.CCarryConvert.WriteDarkCasket("调度任务管理", "调度任务手工报告完成", "托盘条码:" + barcode, "调度任务索引:" + fid.ToString()+"操作者:"+ userDescription); for (int i = 0; i < dv.Count; i++) { if (ccf.GetDeviceKindIdx(Convert.ToInt32(dv[i]["F_DeviceIndex"])) == 6) { cgs.ActionComplete(Convert.ToInt32(dv[i]["F_DeviceIndex"]), Convert.ToInt32(dv[i]["F_MonitorIndex"]), Model.CGeneralFunction.TASKFINISH); //1 辅料出库;2 空托盘回收;3残托盘回收 if (Convert.ToInt32(dv[i]["F_DeviceCommandIndex"]) == 1) { tableAGVGate = dbo.ExceSQL("SELECT F_AGVGateDeviceIndex FROM T_BASE_AGV_GATE WHERE F_ADDRESS = " + Convert.ToInt32(dv[i]["F_NumParam5"]) + "").Tables[0]; if (tableAGVGate.Rows.Count > 0) { dbo.ExecuteSql("UPDATE T_BASE_DEVICE SET F_PALLETBARCODE='" + dv[i]["F_TxtParam"] + "',F_HAVEGOODS = 1 WHERE F_DEVICEINDEX = " + Convert.ToInt32(tableAGVGate.Rows[0]["F_AGVGateDeviceIndex"]) + ""); } } if ((Convert.ToInt32(dv[i]["F_DeviceCommandIndex"]) == 2) || (Convert.ToInt32(dv[i]["F_DeviceCommandIndex"]) == 3)) { tableAGVGate = dbo.ExceSQL("SELECT F_AGVGateDeviceIndex FROM T_BASE_AGV_GATE WHERE F_ADDRESS = " + Convert.ToInt32(dv[i]["F_NumParam2"]) + "").Tables[0]; if (tableAGVGate.Rows.Count > 0) { //if (mti == 1) //{ // //20090817给管理置无托盘信息 // dboM.ExecuteSql("UPDATE T_ITEMDEVICE SET devicestatus ='0' WHERE devicecode = '" + tableAGVGate.Rows[0]["F_AGVGateDeviceIndex"] + "'"); //} dbo.ExecuteSql("UPDATE T_BASE_DEVICE SET F_PALLETBARCODE='-',F_HAVEGOODS = 0 WHERE F_DEVICEINDEX = " + Convert.ToInt32(tableAGVGate.Rows[0]["F_AGVGateDeviceIndex"]) + ""); } } } else { int tempdeviex = 0; if ((ccf.GetDeviceKindIdx(Convert.ToInt32(dv[i]["F_DeviceIndex"])) == 2) && (Convert.ToInt32(dv[i]["F_DeviceCommandIndex"]) == 6)) { tempdeviex = Convert.ToInt32(dv[i]["F_NumParam4"]); } else { tempdeviex = Convert.ToInt32(dv[i]["F_DeviceIndex"]); } if (Convert.ToInt32(dv[i]["F_Status"]) >= 1) { cgs.ActionComplete(tempdeviex, Convert.ToInt32(dv[i]["F_MonitorIndex"]), 1); } else { cgs.ActionComplete(tempdeviex, Convert.ToInt32(dv[i]["F_MonitorIndex"]), Model.CGeneralFunction.TASKFINISH); } } } } else { //回写管理表 cgs.ReturnManageInfo(fid, mti, cap, true); if (mti == 1) { dboMan.ExceSQL("update IO_Control set Control_STATUS=" + Model.CGeneralFunction.TASKFINISH + " where Control_ID=" + fid); ////add for qdty //if (ControlType == 2) //{ // //出库任务更新数据库状态 // if (remark != "") // { // dboMan.ExceSQL("update IDX_ASRS_RECEIVE set COMPLETIONTIME =sysdate, TASKSTATUS=5 where TASKTYPE = 'PK' and (TASKSTATUS=0 or TASKSTATUS=3) and GROUPTASKID='" + remark + "'"); // } //} //else //{ // //入库任务调用webservice接口 // string dtime = DateTime.Now.ToString("u"); // dtime = dtime.Substring(0, dtime.Length - 1); // dbo.ExceSQL("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_ID,CONTROL_APPLY_TYPE,BOX_QUANTITY,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK)VALUES (IO_CONTROL_APPLY_SEQ.nextval,2,1," // + enddevice.ToString() + ",'" + barcode + "',0,'" + dtime + "','" + remark + "')"); //} } } } #endregion #region 报告删除 else if (ActionID == Model.CGeneralFunction.TASKDELETE) { //20110222CGetState cgs = new CGetState(); //20090902 int taskindex = ccf.IfExistFarCellTask(mti, fid); if (taskindex > 0) { Errtext = string.Format("存在双伸货位中远货位的任务:{0},该近货位的任务不能删除!\r删除远货位的任务后,才能删除近货位的任务!", taskindex); return false; } dbo.ExceSQL("update T_Manage_Task set FExceptionNO=" + Model.CGeneralFunction.TASKDELETE + " where (F_ManageTaskKindIndex = " + mti + ") AND (FID = " + fid + ")"); dbo.ExceSQL("update T_Monitor_Task set F_STATUS=-1 where F_ManageTaskKindIndex=" + mti + " and F_ManageTaskIndex=" + fid + " and F_STATUS=0"); //20110110 dv = dbo.ExceSQL("SELECT F_ManageTaskKindIndex, F_ManageTaskIndex,F_DeviceIndex,F_MonitorIndex,F_Status,F_DeviceCommandIndex " + ",F_NumParam2,F_NumParam5,F_TxtParam FROM T_Monitor_Task Where F_ManageTaskIndex=" + fid + " and F_ManageTaskKindIndex= " + mti).Tables[0].DefaultView; if (dv.Count > 0) { //20100108 CommonClassLib.CCarryConvert.WriteDarkCasket("调度任务管理", "调度任务被手工删除!", "托盘条码:" + barcode, "调度任务索引:" + fid.ToString() + "操作者:" + userDescription); for (int i = 0; i < dv.Count; i++) { if (ccf.GetDeviceKindIdx( Convert.ToInt32(dv[i]["F_DeviceIndex"])) == 6) {//20170622删除AGV任务 cgs.ActionComplete(Convert.ToInt32(dv[i]["F_DeviceIndex"]), Convert.ToInt32(dv[i]["F_MonitorIndex"]), Model.CGeneralFunction.TASKDELETE); //1 辅料出库;2 空托盘回收;3残托盘回收 if ((Convert.ToInt32(dv[i]["F_DeviceCommandIndex"]) == 2) || (Convert.ToInt32(dv[i]["F_DeviceCommandIndex"]) == 3)) { tableAGVGate = dbo.ExceSQL("SELECT F_AGVGateDeviceIndex FROM T_BASE_AGV_GATE WHERE F_ADDRESS = " + Convert.ToInt32(dv[i]["F_NumParam2"]) + "").Tables[0]; if (tableAGVGate.Rows.Count > 0) { dbo.ExecuteSql("UPDATE T_BASE_DEVICE SET F_PALLETBARCODE='" + dv[i]["F_TxtParam"] + "',F_HAVEGOODS = 1 WHERE F_DEVICEINDEX = " + Convert.ToInt32(tableAGVGate.Rows[0]["F_AGVGateDeviceIndex"]) + ""); } } } else {//20170622删除非AGV任务 //if (Convert.ToInt32(dv[i]["F_Status"]) >= 1) //{//如果保留此段落,管理任务的最后一条报警时会变成报完成操作。 // int fstatus = 1; // cgs.ActionComplete(Convert.ToInt32(dv[i]["F_DeviceIndex"]), Convert.ToInt32(dv[i]["F_MonitorIndex"]), fstatus); //} //else //{ cgs.ActionComplete(Convert.ToInt32(dv[i]["F_DeviceIndex"]), Convert.ToInt32(dv[i]["F_MonitorIndex"]), Model.CGeneralFunction.TASKDELETE); //} } } } else {//20110412 CommonClassLib.CCarryConvert.WriteDarkCasket("调度任务管理", "调度任务被手工删除!", "托盘条码:" + barcode, "调度任务索引:" + fid.ToString() + "操作者:" + userDescription); //回写管理表 cgs.ReturnManageInfo(fid, mti, cap, false); if (mti == 1) { dboMan.ExceSQL("update IO_Control set Control_STATUS=" + Model.CGeneralFunction.TASKDELETE + " where Control_ID=" + fid); ////add for qdty //if ((barcode != "") && (remark != "")) //{ // dboMan.ExecuteSql("INSERT INTO IDX_ASRS_WCSCANCEL(SeqNo,GroupTaskID,GroupTaskSequence, PalletID, TaskType, EDIStatus, CreationTime,AddWho)VALUES (IDX_ASRS_WCSCANCEL_SEQ.Nextval,'" // + remark + "'," + ccf.GetManageIDFromManageTask(ManagetaskID, Mankind) + ",'" + barcode + "','PK',0,sysdate,'WCS')"); //} } } } #endregion //dbo.TransCommit(); CDataChangeEventArgs cea = new CDataChangeEventArgs(null, null); OnDataChange("SControlMonitor", cea); Errtext = string.Empty; return true; } catch (Exception ex) { //dbo.TransRollback(); Errtext =ex.StackTrace+ ex.Message; return false; } finally { dv.Dispose(); dvaa.Dispose(); tableAGVGate.Dispose(); } } public bool ModifyMonitorTask(int DeviceIndex,int MonitortaskID, int ActionID, out string Errtext) { //int resetOrder = 4;//故障复位 DataView dv = new DataView(); DataView dv1 = new DataView(); DataView dv2 = new DataView(); DataView dv3 = new DataView(); try { var client = (IClient)OperationContext.Current.Channel; string userDescription = ClientCallbackLists[client].ToString(); int mankind = ccf.GetManageTaskKindIndexFromMonitor(MonitortaskID); int fid = ccf.GetManageTaskIndexFromMonitor(MonitortaskID); string remark = ccf.GetFremarkFromManageTask(mankind, fid); dv = dbo.ExceSQL(String.Format("SELECT * FROM T_Monitor_Task Where F_MonitorIndex={0}",MonitortaskID)).Tables[0].DefaultView; if (dv.Count > 0) { if (ActionID == Model.CGeneralFunction.TASKFINISH) { #region 指令完成 CommonClassLib.CCarryConvert.WriteDarkCasket("设备指令管理", "手工报告完成", "托盘条码:" + dv[0]["F_TxtParam"].ToString(), "设备索引:" + dv[0]["F_DeviceIndex"].ToString() + ";设备指令索引:" + MonitortaskID.ToString()+"操作者:"+ userDescription); //if (dv[0]["f_devicecommandindex"].ToString() == "6") //{ // DeviceIndex = Convert.ToInt32(dv[0]["f_numparam4"]); //} Dictionary df = Model.CGeneralFunction.GetDoubleForkMonitorInfo(MonitortaskID, DeviceIndex); int[] snyc = Model.CGeneralFunction.MutiForkIfSync(MonitortaskID, DeviceIndex, 1); cgs.ActionComplete(DeviceIndex, MonitortaskID, Convert.ToInt32(dv[0]["F_Status"])); #region 多叉关联任务,能同步的同时报告完成;异步的直接执行关联的命令 //20100323 devinfo = Model.CGetInfo.GetDeviceInfo(DeviceIndex); if ((devinfo.IfCorrelDoubleFork == "1") && (df != null)) { if (snyc != null)//20100702 { foreach (int cortask in snyc) { if (cortask != MonitortaskID) { cgs.ActionComplete(DeviceIndex, cortask, 1); } df.Remove(cortask); } } } #endregion #endregion } else if (ActionID == Model.CGeneralFunction.TASKDELETE) { #region 指令删除 CommonClassLib.CCarryConvert.WriteDarkCasket("设备指令管理", "手工删除设备指令", "托盘条码:" + dv[0]["F_TxtParam"].ToString(), "设备索引:" + dv[0]["F_DeviceIndex"].ToString() + ";设备指令索引:" + MonitortaskID.ToString() + "操作者:" + userDescription); cgs.ActionComplete(Convert.ToInt32(dv[0]["F_DeviceIndex"]), Convert.ToInt32(dv[0]["F_MonitorIndex"]), Model.CGeneralFunction.TASKDELETE); #endregion } else if (ActionID == Model.CGeneralFunction.TASKRESTORE) { #region 指令重发 int mindex = MonitortaskID; int DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]); int devKind = ccf.GetDeviceKindIdx(DeviceIdx); string sss = "设备索引:" + dv[0]["F_DeviceIndex"].ToString() + ";设备指令索引:" + dv[0]["F_MonitorIndex"].ToString(); //20100108操作黑匣子增加托盘条码 CommonClassLib.CCarryConvert.WriteDarkCasket("设备指令管理", "手工复位", "托盘条码:" + dv[0]["F_TxtParam"].ToString(), sss +"操作者:" + userDescription); if ((DeviceIdx == 37001) || (DeviceIdx == 37002) || (DeviceIdx == 37003)) { SendDeviceReset(out Errtext, DeviceIdx, 0); dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert.ToInt32(dv[0]["F_DeviceIndex"])); dbo.ExceSQL("update T_Monitor_Task set F_SendCount=0,F_Status=0 where F_MonitorIndex=" + mindex); } else { //检查关联命令一起复位 //如果mindex是主动任务(f_associatemonitor有数据),先复位被动的任务;如果mindex是被动任务,先复位自己,再复位主动任务; dv1 = dbo.ExceSQL("select F_DeviceIndex,F_Associate from T_Monitor_Task where F_Associate IS NOT NULL and F_MonitorIndex=" + mindex).Tables[0].DefaultView; if (dv1.Count > 0) { dv2 = dbo.ExceSQL("select F_DeviceIndex,F_MonitorIndex from T_Monitor_Task where F_MonitorIndex=" + Convert.ToInt32(dv1[0]["F_Associate"])).Tables[0].DefaultView; if (dv2.Count > 0)//有关联命令,先复位关联命令 { DeviceIdx = Convert.ToInt32(dv2[0]["F_DeviceIndex"]); //SendDeviceReset(out Errtext, DeviceIdx, resetOrder); SendDeviceReset(out Errtext, DeviceIdx, 2); dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert.ToInt32(dv2[0]["F_DeviceIndex"])); dbo.ExceSQL("update T_Monitor_Task set F_SendCount=0,F_Status=0 where F_MonitorIndex=" + Convert.ToInt32(dv2[0]["F_MonitorIndex"])); } //再复位自己 DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]); //SendDeviceReset(out Errtext, DeviceIdx, resetOrder); SendDeviceReset(out Errtext, DeviceIdx, 2); dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert.ToInt32(dv[0]["F_DeviceIndex"])); dbo.ExceSQL("update T_Monitor_Task set F_SendCount=0,F_Status=0 where F_MonitorIndex=" + Convert.ToInt32(dv[0]["F_MonitorIndex"])); } else { //自己是否被关联,先复位自己,再复位主任务 dv3 = dbo.ExceSQL("select F_DeviceIndex,F_MonitorIndex from T_Monitor_Task where F_Associate ='" + mindex + "'").Tables[0].DefaultView; if (dv3.Count > 0) { //先复位自己 DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]); //SendDeviceReset(out Errtext, DeviceIdx, resetOrder); SendDeviceReset(out Errtext, DeviceIdx, 2); dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert.ToInt32(dv[0]["F_DeviceIndex"])); dbo.ExceSQL("update T_Monitor_Task set F_SendCount=0,F_Status=0 where F_MonitorIndex=" + mindex); //再复位主任务 DeviceIdx = Convert.ToInt32(dv3[0]["F_DeviceIndex"]); //SendDeviceReset(out Errtext, DeviceIdx, resetOrder); SendDeviceReset(out Errtext, DeviceIdx, 2); dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert.ToInt32(dv3[0]["F_DeviceIndex"])); dbo.ExceSQL("update T_Monitor_Task set F_SendCount=0,F_Status=0 where F_MonitorIndex=" + Convert.ToInt32(dv3[0]["F_MonitorIndex"])); } else { //无关联任务,只复位自己 DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]); //SendDeviceReset(out Errtext, DeviceIdx, resetOrder); SendDeviceReset(out Errtext, DeviceIdx, 2); dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert.ToInt32(dv[0]["F_DeviceIndex"])); dbo.ExceSQL("update T_Monitor_Task set F_SendCount=0,F_Status=0 where F_MonitorIndex=" + mindex); } } } //给管理FERRORCODE清空 if (mankind == 1) { //dboMan.ExceSQL("UPDATE IO_CONTROL SET ERROR_TEXT ='' WHERE CONTROL_ID=" + fid + ""); } dbo.ExceSQL("UPDATE T_Manage_Task SET FERRORCODE ='' WHERE FID=" + fid + " and F_ManageTaskKindIndex=" + mankind + ""); CDataChangeEventArgs cea = new CDataChangeEventArgs(null, null); OnDataChange("TASKRESTORE", cea); #endregion } ////add for qdty //else if (ActionID == Model.CGeneralFunction.TASKREPEATINPUT) //{ // #region 重新申请入库货位 // int mindex = MonitortaskID; // int DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]); // int devKind = ccf.GetDeviceKindIdx(DeviceIdx); // string sss = "设备索引:" + dv[0]["F_DeviceIndex"].ToString() + ";设备指令索引:" + dv[0]["F_MonitorIndex"].ToString(); // //20100108操作黑匣子增加托盘条码 // CommonClassLib.CCarryConvert.WriteDarkCasket("设备指令管理", "重新申请入库货位", "托盘条码:" + dv[0]["F_TxtParam"].ToString(), sss); // StringBuilder sql = new StringBuilder(); // string dtime = DateTime.Now.ToString("u"); // dtime = dtime.Substring(0, dtime.Length - 1); // sql.Append("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_ID,CONTROL_APPLY_TYPE,BOX_QUANTITY,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK)VALUES ").Append( // "(IO_CONTROL_APPLY_SEQ.nextval,2,2,").Append(DeviceIdx).Append(",'").Append(dv[0]["F_TxtParam"].ToString()).Append("',0,'").Append(dtime).Append("','").Append(remark).Append("')"); // dbo.ExecuteSql(sql.ToString()); // #endregion //} } Errtext = string.Empty; return true; } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return false; } finally { dv.Dispose(); dv1.Dispose(); dv2.Dispose(); dv3.Dispose(); } } public bool SetDeviceState(Model.MDevice Devinfo, out string Errtext) { try { string errText = string.Empty; int lockstate=0; int manTaskReserve=Devinfo.ManTaskReserve; int errcode = 0; int oldlockstate=ccf.GetDeviceLockedState(Devinfo.DeviceIndex); int devidx = Devinfo.DeviceIndex; Model.MError errs = Model.CGetInfo.GetErrorInfo(Convert.ToInt32(Devinfo.DeviceKind.ToString() + Devinfo.ErrorCode.ToString())); StringBuilder sql = new StringBuilder();//20160501 if (Devinfo.RunState == 4) { if (oldlockstate != -1) { #region 20160501统计上次报警 if (errs != null) { DataView dv = dbo.ExceSQL(string.Format("SELECT F_ManageTaskNo,F_DeviceIndex,F_ErrorIndex,F_DateTime FROM T_Base_Device_Error_Log where F_DeviceIndex={0} and F_ErrorIndex={1} order by F_DateTime desc",devidx,errs.ErrorIndex)).Tables[0].DefaultView; if (dv.Count > 0) {//richard.liu20181212对报警记录更新最近一个的修复时间 sql.Remove(0, sql.Length); sql.Append("UPDATE T_Base_Device_Error_Log SET F_FixDateTime ='").Append(DateTime.Now.ToString("u")).Append("' Where F_DeviceIndex=") .Append(devidx).Append(" and F_ErrorIndex=").Append(errs.ErrorIndex).Append(" and F_ManageTaskNo=").Append(Convert.ToInt32( dv[0]["F_ManageTaskNo"])); dbo.ExceSQL(sql.ToString()); } if (errs.IfAlarm == '1') {//20160501 //CStaticClass.UpdateDeviceOEE(devidx, DateTime.Now.Date, 0, 0, 0, 0 //, 0, ccf.GetAlarmTimeSpan(devidx), errs.ErrorKind, 0, out errText);//统计上次报警 //dbo.ExecuteSql(string.Format("update T_Base_Device set F_AlarmStartTime='-' where F_DeviceIndex ={0}", devidx)); } else { //CStaticClass.UpdateDeviceOEE(devidx, DateTime.Now.Date, 0, 0, 0, 0 //, ccf.GetErrorTimeSpan(devidx), 0, errs.ErrorKind, 0, out errText);//统计上次故障 //dbo.ExecuteSql(string.Format("update T_Base_Device set F_ErrorStartTime='-' where F_DeviceIndex ={0}", devidx)); } } #endregion #region 20160501记录计划检修开始时间(停用时间) dbo.ExecuteSql(string.Format("update T_Base_Device set F_ScheduledRepairStartTime='{1}' where F_DeviceIndex ={0}", Devinfo.DeviceIndex, DateTime.Now.ToString("u").Substring(0,19))); #endregion } lockstate = -1; errcode = 998; ////add for qdty //if (Devinfo.DeviceKind == 1) //{ // //向管理上报堆垛机异常状态 // string laneindex = (devidx < 11010) ? ("0" + (devidx - 11000).ToString()) : (devidx - 11000).ToString(); // sql.Remove(0, sql.Length); // sql.Append("INSERT INTO IDX_ASRS_STS (SEQNO, AISLENO, ASRSstatus,Status, AddTime)VALUES (IDX_ASRS_STS_SEQ.Nextval, '").Append(laneindex).Append("','1','0',sysdate)"); // dboMan.ExecuteSql(sql.ToString()); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到堆垛机状态", devidx.ToString(), "向管理上报堆垛机异常状态"); //} } else { if (oldlockstate == -1) {//上次计划检修(停用)结束 #region 20160501上次计划检修(停用)结束 // CStaticClass.UpdateDeviceOEE(Devinfo.DeviceIndex, DateTime.Now.Date, 0, 0, 0, 0 //, 0, 0,'O', ccf.GetScheduledRepairTimeSpan(Devinfo.DeviceIndex), out errText); //dbo.ExecuteSql(string.Format("update T_Base_Device set F_ScheduledRepairStartTime='-' where F_DeviceIndex ={0}", Devinfo.DeviceIndex )); #endregion } errcode = Devinfo.ErrorCode; lockstate = Devinfo.RunState; } object[] ob=new object[4]{lockstate,errcode,manTaskReserve,Devinfo.DeviceIndex}; dbo.ExecuteSql( string.Format("UPDATE T_Base_Device SET F_LockedState ={0},f_errorcode={1},F_ManTaskReserve ={2} where F_DeviceIndex= {3}",ob)); Model.CGetInfo.SetDeviceInfo(Devinfo); modifypathdevinfo = Model.CGetInfo.GetModifyPathDeviceInfo(devidx);//richard.liu20181212更改路径状态 if (modifypathdevinfo != null) {//richard.liu20181212更改路径状态 modifypathdevinfo.RunState = Devinfo.RunState; modifypathdevinfo.ErrorCode = Devinfo.ErrorCode; Model.CGetInfo.SetModifyPathDeviceInfo(modifypathdevinfo); } CDeviceStateChangeEventArgs csce = new CDeviceStateChangeEventArgs(Devinfo); OnDeviceState("SControlMonitor.SetDeviceState", csce); Errtext = string.Empty; return true; } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return false; } } public Model.MDevice GetDeviceInfo(int Deviceindex, out string Errtext) { try { Errtext = string.Empty; return Model.CGetInfo.GetDeviceInfo(Deviceindex); } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return null; } } public DataTable GetDeviceInfos(string errorcode, out string Errtext) { DataView dv = new DataView(); try { dv = dbo.ExceSQL(string.Format("SELECT T_Base_Device.F_DeviceIndex,F_DeviceName,T_Base_Device.F_DeviceKindIndex,F_DeviceKindName,F_LockedState,F_errorcode,F_ManTaskReserve,F_HaveGoods FROM T_Base_Device,T_Base_Device_Kind Where T_Base_Device.F_DeviceKindIndex = T_Base_Device_Kind.F_DeviceKindIndex and '{0}'", errorcode)).Tables[0].DefaultView; if (dv.Count > 0) { Errtext = string.Empty; return dv.Table; } else { Errtext = "没有符合条件“" + errorcode + "”的设备信息!"; return null; } } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return null; } finally { dv.Dispose(); } } public bool SetRouteState(Model.MRoute Routeinfo, out string Errtext) { try { dbo.ExecuteSql( string.Format( "update T_Base_Route set f_status={0} where F_RouteID={1}",Routeinfo.Status,Routeinfo.RouteID)); dboMan.ExecuteSql(string.Format("update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS={0} where CONTROL_ROUTE_ID={1}",Routeinfo.Status,Routeinfo.RouteID)); Errtext = string.Empty; return true; } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return false; } } public Model.MRoute GetRouteInfo(decimal RouteID, out string Errtext) { DataView dv = new DataView(); try { Errtext = string.Empty; Model.MRoute mr = new Model.MRoute(); dv = dbo.ExceSQL(string.Format("SELECT F_RouteID, F_RouteName, F_StartDevice, F_EndDevice, F_RouteKind, F_OutsideAltDevice, F_InsideAltDevice, F_Status, F_AutoUpdate FROM T_Base_Route where F_RouteID={0}", RouteID)).Tables[0].DefaultView; if (dv.Count > 0) { mr.RouteID = RouteID; mr.RouteName = dv[0]["F_RouteName"].ToString(); mr.StartDevice = Convert.ToDecimal(dv[0]["F_StartDevice"]); mr.EndDevice = Convert.ToDecimal(dv[0]["F_EndDevice"]); mr.RouteKind = Convert.ToInt32(dv[0]["F_RouteKind"]); mr.OutsideAltDevice = Convert.ToInt32(dv[0]["F_OutsideAltDevice"]); mr.InsideAltDevice = Convert.ToInt32(dv[0]["F_InsideAltDevice"]); mr.Status = Convert.ToInt32(dv[0]["F_Status"]); mr.AutoUpdate = Convert.ToChar(dv[0]["F_AutoUpdate"]); return mr; } else { Errtext = "路径编号在数据库不存在!"; return null; } } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return null; } finally { dv.Dispose(); } } public Model.MRoute[] GetRouteInfos(int RouteState, out string Errtext) { DataView dv = new DataView(); try { Model.MRoute[] mrs; Model.MRoute mr = new Model.MRoute(); Errtext = string.Empty; dv = dbo.ExceSQL(string.Format("SELECT F_RouteID, F_RouteName, F_StartDevice, F_EndDevice, F_RouteKind, F_OutsideAltDevice, F_InsideAltDevice, F_Status, F_AutoUpdate FROM T_Base_Route where F_Status={0}", RouteState)).Tables[0].DefaultView; if (dv.Count > 0) { mrs = new Model.MRoute[dv.Count]; for (int i = 0; i < dv.Count; i++) { mr.RouteID = Convert.ToDecimal(dv[i]["F_RouteID"]); ; mr.RouteName = dv[i]["F_RouteName"].ToString(); mr.StartDevice = Convert.ToDecimal(dv[i]["F_StartDevice"]); mr.EndDevice = Convert.ToDecimal(dv[i]["F_EndDevice"]); mr.RouteKind = Convert.ToInt32(dv[i]["F_RouteKind"]); mr.OutsideAltDevice = Convert.ToInt32(dv[i]["F_OutsideAltDevice"]); mr.InsideAltDevice = Convert.ToInt32(dv[i]["F_InsideAltDevice"]); mr.Status = Convert.ToInt32(dv[i]["F_Status"]); mr.AutoUpdate = Convert.ToChar(dv[i]["F_AutoUpdate"]); mrs[i] = mr; } return mrs; } else { Errtext = "路径状态在数据库不存在!"; return null; } } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return null; } finally { dv.Dispose(); } } public bool SetForkCombinWaitTime(int WaitTime, out string Errtext) { try { Errtext = string.Empty; CommonClassLib.AppSettings.SetValue("DoubleForkWaitTime", WaitTime.ToString()); CStaticClass.DoubleForkWaitTime = WaitTime.ToString(); return true; } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return false; } } public int GetForkCombinWaitTime(out string Errtext) { try { int a = -1; Errtext = string.Empty; int.TryParse(CommonClassLib.AppSettings.GetValue("DoubleForkWaitTime"), out a); return a; } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return -1; } } public bool SetConveyorTimeOutTime(int Timeout, out string Errtext) { try { Errtext = string.Empty; CommonClassLib.AppSettings.SetValue("TransportTimeout", Timeout.ToString()); CStaticClass.TransportTimeout = Timeout.ToString(); return true; } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return false; } } public int GetConveyorTimeOutTime(out string Errtext) { try { int a = -1; Errtext = string.Empty; int.TryParse(CommonClassLib.AppSettings.GetValue("TransportTimeout"), out a); return a; } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return -1; } } public bool SetDBConnection(string MonitorOrManageDB, string ServerHostName, string DBServiceName, string Username, string Password, out string Errtext) { try { string dbf = dbo.GetValue("DBFactory"); string[] temp, connstr; string server = "", dbService = "", uid = "", pwd = ""; char[] dh = new char[1] { '=' }; char[] fh = new char[1] { ';' }; Errtext= string.Empty; if (MonitorOrManageDB == "Manage") { dbf = dbo.GetValue("ManDBFactory"); connstr = dbo.GetValue("ManConnString").Split(fh); } else //if (MonitorOrManageDB == "Monitor") { dbf = dbo.GetValue("DBFactory"); connstr = dbo.GetValue("ConnString").Split(fh); } for (int i = connstr.GetLowerBound(0); i <= connstr.GetUpperBound(0); i++) { temp = connstr[i].Split(dh); switch (dbf) { case "SQLServerDBFactory": //"Server = (local) ; uid = SA ; pwd =; database = SSWCMS ; MAX Pool Size = 512 " switch (temp[0].Trim()) { case "Server": server = temp[1].Trim(); break; case "database": dbService = temp[1].Trim(); break; case "uid": uid = temp[1].Trim(); break; case "pwd": pwd = temp[1].Trim(); break; } break; case "OracleDBFactory": //"Data Source=Richard-liu;User ID=pdadmin;Password=pdadmin ; MAX Pool Size = 512 " switch (temp[0].Trim()) { case "Data Source": dbService = temp[1].Trim(); break; case "User ID": uid = temp[1].Trim(); break; case "Password": pwd = temp[1].Trim(); break; default: server = "127.0.0.1"; break; } break; case "OleDBFactory": //"Provider=OraOLEDB.Oracle.1;Data Source=Richard-liu;User ID=sa;Password= ; MAX Pool Size = 512 " switch (temp[0].Trim()) { case "Data Source": dbService = temp[1].Trim(); break; case "User ID": uid = temp[1].Trim(); break; case "Password": pwd = temp[1].Trim(); break; case "Provider": server = temp[1].Trim(); break; } break; default: //"Server = (local) ; uid = SA ; pwd =; database = SSWCMS ; MAX Pool Size = 512 " switch (temp[0].Trim()) { case "Server": server = temp[1].Trim(); break; case "database": dbService = temp[1].Trim(); break; case "uid": uid = temp[1].Trim(); break; case "pwd": pwd = temp[1].Trim(); break; default: server = "(local)"; uid = "SA"; dbService = "SSWCMS"; break; } break; } } return true; } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return false; } } public bool GetDBConnection(string MonitorOrManageDB, out string ServerHostName, out string DBServiceName, out string Username, out string Password, out string Errtext) { try { Errtext = string.Empty; string dbf = dbo.GetValue("DBFactory"); string[] temp, connstr; string server = "", dbService = "", uid = "", pwd = ""; char[] dh = new char[1] { '=' }; char[] fh = new char[1] { ';' }; if (MonitorOrManageDB == "Manage") { dbf = dbo.GetValue("ManDBFactory"); connstr = dbo.GetValue("ManConnString").Split(fh); } else //if (MonitorOrManageDB == "Monitor") { dbf = dbo.GetValue("DBFactory"); connstr = dbo.GetValue("ConnString").Split(fh); } for (int i = connstr.GetLowerBound(0); i <= connstr.GetUpperBound(0); i++) { temp = connstr[i].Split(dh); switch (dbf) { case "SQLServerDBFactory": //"Server = (local) ; uid = SA ; pwd =; database = SSWCMS ; MAX Pool Size = 512 " switch (temp[0].Trim()) { case "Server": server = temp[1].Trim(); break; case "database": dbService = temp[1].Trim(); break; case "uid": uid = temp[1].Trim(); break; case "pwd": pwd = temp[1].Trim(); break; } break; case "OracleDBFactory": //"Data Source=Richard-liu;User ID=pdadmin;Password=pdadmin ; MAX Pool Size = 512 " switch (temp[0].Trim()) { case "Data Source": dbService = temp[1].Trim(); break; case "User ID": uid = temp[1].Trim(); break; case "Password": pwd = temp[1].Trim(); break; default: server = "127.0.0.1"; break; } break; case "OleDBFactory": //"Provider=OraOLEDB.Oracle.1;Data Source=Richard-liu;User ID=sa;Password= ; MAX Pool Size = 512 " switch (temp[0].Trim()) { case "Data Source": dbService = temp[1].Trim(); break; case "User ID": uid = temp[1].Trim(); break; case "Password": pwd = temp[1].Trim(); break; case "Provider": server = temp[1].Trim(); break; } break; default: //"Server = (local) ; uid = SA ; pwd =; database = SSWCMS ; MAX Pool Size = 512 " switch (temp[0].Trim()) { case "Server": server = temp[1].Trim(); break; case "database": dbService = temp[1].Trim(); break; case "uid": uid = temp[1].Trim(); break; case "pwd": pwd = temp[1].Trim(); break; default: server = "(local)"; uid = "SA"; dbService = "SSWCMS"; break; } break; } } ServerHostName = server; DBServiceName = dbService; Username = uid; Password = pwd; return true; } catch (Exception ex) { ServerHostName = ""; DBServiceName = ""; Username = ""; Password = ""; Errtext =ex.StackTrace+ ex.Message; return false; } } public bool SetIOStationProperty(int deviceIndex, int IOStationProperty, out string Errtext) { DataView dvf = new DataView(); DataView dv = new DataView(); try { Errtext = string.Empty; string iotype = " (T_Base_Route.F_RouteKind != 0) "; if (IOStationProperty == 1)//入库站台 { iotype = " (T_Base_Route.F_RouteKind = 1) "; dbo.ExecuteSql("update t_base_route set F_Status=1,F_AutoUpdate=1 where F_StartDevice=" + deviceIndex); dboMan.ExceSQL("update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=1 where START_DEVICE=" + deviceIndex); dbo.ExecuteSql("update t_base_route set F_Status=0,F_AutoUpdate=0 where F_EndDevice=" + deviceIndex); dboMan.ExceSQL("update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=0 where END_DEVICE=" + deviceIndex); } else if (IOStationProperty == 2)//出库站台 { iotype = " (T_Base_Route.F_RouteKind = 2) "; dbo.ExecuteSql("update t_base_route set F_Status=1,F_AutoUpdate=1 where F_EndDevice=" + deviceIndex); dboMan.ExceSQL("update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=1 where END_DEVICE=" + deviceIndex); dbo.ExecuteSql("update t_base_route set F_Status=0,F_AutoUpdate=0 where F_StartDevice=" + deviceIndex); dboMan.ExceSQL("update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=0 where START_DEVICE=" + deviceIndex); } else//0拣选站台 { iotype = " (T_Base_Route.F_RouteKind != 0) "; dbo.ExecuteSql("update t_base_route set F_Status=1,F_AutoUpdate=1 where ((F_EndDevice=" + deviceIndex + ") or (F_StartDevice=" + deviceIndex + "))"); dboMan.ExceSQL("update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=1 where ((End_Device=" + deviceIndex + ") or (Start_Device=" + deviceIndex + "))"); } dv = dbo.ExceSQL("SELECT DISTINCT T_Base_Route.F_RouteID, T_Base_Route.F_RouteKind, " + "T_Base_Route_Device.F_DeviceIndex FROM T_Base_Route,T_Base_Route_Device where " + "T_Base_Route.F_RouteID = T_Base_Route_Device.F_RouteID and " + iotype + " AND (T_Base_Route_Device.F_DeviceIndex = " + deviceIndex + ")").Tables[0].DefaultView; for (int i = 0; i < dv.Count; i++) { dbo.ExecuteSql("update t_base_route set F_Status=1,F_AutoUpdate=1 where f_routeid=" + dv[i]["F_RouteID"]); dboMan.ExceSQL("update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=1 where CONTROL_ROUTE_ID='" + dv[i]["F_RouteID"] + "' and CONTROL_ROUTE_STATUS=0"); if (dv[i]["F_RouteKind"].ToString() == "1") { dvf = dbo.ExceSQL("SELECT DISTINCT T_Base_Route.F_RouteID, T_Base_Route.F_RouteKind, " + "T_Base_Route_Device.F_DeviceIndex FROM T_Base_Route,T_Base_Route_Device where " + "T_Base_Route.F_RouteID = T_Base_Route_Device.F_RouteID and T_Base_Route.F_RouteKind = 2 " + " AND (T_Base_Route_Device.F_DeviceIndex = " + deviceIndex + ")").Tables[0].DefaultView; for (int f = 0; f < dvf.Count; f++) { dbo.ExecuteSql("update t_base_route set F_Status=0,F_AutoUpdate=0 where f_routeid=" + dvf[f]["F_RouteID"]); dboMan.ExceSQL("update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=0 where CONTROL_ROUTE_ID='" + dvf[f]["F_RouteID"] + "' and CONTROL_ROUTE_STATUS=1"); } } else if (dv[i]["F_RouteKind"].ToString() == "2") { dvf = dbo.ExceSQL("SELECT DISTINCT T_Base_Route.F_RouteID, T_Base_Route.F_RouteKind, " + "T_Base_Route_Device.F_DeviceIndex FROM T_Base_Route,T_Base_Route_Device where " + "T_Base_Route.F_RouteID = T_Base_Route_Device.F_RouteID and T_Base_Route.F_RouteKind = 1 " + " AND (T_Base_Route_Device.F_DeviceIndex = " + deviceIndex + ")").Tables[0].DefaultView; for (int f = 0; f < dvf.Count; f++) { dbo.ExecuteSql("update t_base_route set F_Status=0,F_AutoUpdate=0 where f_routeid=" + dvf[f]["F_RouteID"]); dboMan.ExceSQL("update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=0 where CONTROL_ROUTE_ID='" + dvf[f]["F_RouteID"] + "' and CONTROL_ROUTE_STATUS=1"); } } } return true; } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return false; } finally { dvf.Dispose(); dv.Dispose(); } } //public DataView GetIOStationProperty(int deviceIndex, out string Errtext) //{ //} public bool SetBlackBoxParameter(int FileCount, int FileSize, out string Errtext) { Errtext = string.Empty; try { double ssize = 1048576 * Convert.ToDouble(FileSize); CommonClassLib.AppSettings.SetValue("DarkCasketSize", ssize.ToString()); CommonClassLib.AppSettings.SetValue("DarkCasketSum", FileCount.ToString()); return true; } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return false; } } public string GetBlackBoxInfo(string deviceIndex, DateTime BeginTime, DateTime EndTime, out string Errtext) { try { Errtext = string.Empty; string filePath = System.IO.Path.GetFullPath(System.Reflection.Assembly.GetExecutingAssembly().GetName().ToString()); filePath = System.IO.Path.GetDirectoryName(filePath); if (deviceIndex.StartsWith("wms")) { filePath = System.IO.Path.Combine(filePath, "CallServiceDarkCasket"); deviceIndex = deviceIndex.Substring(3); } else { filePath = System.IO.Path.Combine(filePath, "DarkCasket"); } // 没找到目录返回 if (Directory.Exists(filePath) == false) { return ""; } string[] files = Directory.GetFiles(filePath); Array.Sort(files); // 目录为空时候返回 if (files.Length < 1) { Errtext="目录为空!"; return ""; } string opf = files[files.Length - 1]; string[] cc = new string[1] { "**" }; string[] sp = null; string rtext =string.Empty; char[] st = new char[1] { ':' }; string[] sf ; DateTime dt; bool ifExit = false;//richard20181122 using (StreamReader sr = new StreamReader(opf)) { sr.ReadLine(); while (!sr.EndOfStream) { ifExit = false;//richard20181122 sp = sr.ReadLine().Split(cc, StringSplitOptions.RemoveEmptyEntries); for (int j = 0; j < sp.GetLength(0); j++) { if (sp[j].IndexOf(deviceIndex.ToString()) >= 0) {//richard20181122 ifExit = true; ; } } if (ifExit == false) {//richard20181122 continue; } dt = Convert.ToDateTime(sp[0].Substring(0,19)); if ((dt.Hour < BeginTime.Hour) || ((dt.Hour > EndTime.Hour))) { continue; } if (sp.GetLength(0) > 0) { rtext+=sp[0] ; for (int i = 1; i < sp.GetLength(0); i++) { rtext += sp[i]; } rtext += "\r\n"; } } } return rtext; } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return ""; } } public DataTable GetAutoTaskHistory(DateTime BeginTime, DateTime EndTime, out string Errtext) { Errtext = string.Empty; try { DataView dv = dbo.ExceSQL(string.Format("SELECT * FROM T_Manage_Task_BAK WHERE (FBEGTIME >= '{0}') AND (FBEGTIME <= '{1}')", BeginTime, EndTime)).Tables[0].DefaultView; return dv.Table; } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return null; } } public bool DeleteAutoTaskHistory(DateTime BeginTime, DateTime EndTime, out string Errtext) { Errtext = string.Empty; try { dbo.ExecuteSql(string.Format("DELETE FROM T_Manage_Task_BAK WHERE (FBEGTIME >= '{0}') AND (FBEGTIME <= '{1}')", BeginTime, EndTime)); return true; } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return false; } } public bool SetUserAndPurview(string UserID, string UserName, string Password, string Purview, out string Errtext) { DataView dc = new DataView(); Errtext = string.Empty; try { dc = dbo.ExceSQL(string.Format("select f_userid from t_base_users where f_userid= '{0}'", UserID)).Tables[0].DefaultView; if (dc.Count > 0) { object[] ob = new object[4] { UserName, Purview, Password, UserID }; int a = dbo.ExecuteSql(string.Format("UPDATE t_base_users SET f_username = '{0}',f_purview='{1}',f_password='{2}' where f_userid= '{3}'", ob)); if (a > 0) { return true; } else { Errtext = "修改用户信息失败!"; return false; } } else { object[] ob = new object[4] { UserID, UserName, Purview, Password }; int a = dbo.ExecuteSql(string.Format("insert into t_base_users(f_userid,f_username,f_purview,f_password) values('{0}','{1}','{2}','{3}')", ob)); if (a > 0) { return true; } else { Errtext = "增加用户信息失败!"; return false; } } } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return false; } finally { dc.Dispose(); } } public bool GetUserAndPurview(string UserID, out string UserName, out string Password, out string Purview, out string Errtext) { DataView dv = new DataView(); UserName = ""; Password = ""; Purview = ""; Errtext = string.Empty; try { dv = dbo.ExceSQL(string.Format("SELECT f_userid, f_username, f_purview, f_password FROM T_Base_Users where f_userid={0}", UserID)).Tables[0].DefaultView; if (dv.Count > 0) { UserName = dv[0]["f_username"].ToString(); Password = dv[0]["f_password"].ToString(); Purview = dv[0]["f_purview"].ToString(); return true; } else { Errtext = "用户不存在!"; return false; } } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return false; } finally { dv.Dispose(); } } public bool SetUserPassword(string UserID, string Password, out string Errtext) { Errtext = string.Empty; try { int a = dbo.ExecuteSql(string.Format("UPDATE t_base_users SET f_password='{0}' where f_userid= '{1}'",Password,UserID)); if (a > 0) { return true; } else { Errtext = "修改用户密码失败!"; return false; } } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return false; } } public string GetUserPassword(string UserID, out string Errtext) { DataView dv = new DataView(); Errtext = string.Empty; try { dv = dbo.ExceSQL(string.Format("SELECT f_password FROM T_Base_Users where f_userid={0}", UserID)).Tables[0].DefaultView; if (dv.Count > 0) { return dv[0]["f_password"].ToString(); } else { Errtext = "用户不存在!"; return ""; } } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return ""; } finally { dv.Dispose(); } } public bool ShutDownControlSystem(out string ErrText) { ErrText=string.Empty; try { SocketsTCPIP.CClientTCPIP.EndConnect(); CDisassembleTask.EndListen(); CObtainTask.EndListenObtainTask(); CParsePLCData.EndListen(); ////add for qdty //CCallService.EndListen(); //CStorageCheck.EndListen(); //Application.Exit(); return true; } catch (Exception ex) { ErrText =ex.StackTrace+ ex.Message; return false; } } public bool StartGetALLDeviceState(out string Errtext) { //cgs.GetDeviceState(); Errtext = cgs.CGetStateError; return true; } public bool StartSendDeviceOrder(out string Errtext) { if (CStaticClass.Order == true) {//20130510 lock (thisLock) { cctrl.StartOrder(); } } Errtext = cctrl.CControlError; return true; } //public bool ListenPLCAsk(out string Errtext) //{ // //clpa.DealwithPLCAsk(); // //Errtext = clpa.ListenPLCAskError; // return true; //} public bool DataClear(out string Errtext) { DataView dv = new DataView(); try { Errtext = string.Empty; dbo.ExecuteSql("delete from T_Manage_Task"); dv = dbo.ExceSQL("select * from T_Monitor_Task").Tables[0].DefaultView;//20100610 for (int i = 0; i < dv.Count; i++) { cgs.ActionComplete(Convert.ToInt32(dv[i]["F_DeviceIndex"]), Convert.ToInt32(dv[i]["F_MonitorIndex"]), Model.CGeneralFunction.TASKDELETE); } CommonClassLib.CCarryConvert.WriteDarkCasket("Login", "UserID:" + CStaticClass.UserID + "的操作日志", "进行数据清理操作", "", ""); return true; } catch (Exception ex) { Errtext =ex.StackTrace+ ex.Message; return false; } finally { dv.Dispose(); } } /// /// 获得管理任务种类 /// /// /// 设备指令索引 /// public int GetManageTaskKindFromMonitor(out string errtext, int monitorIndex) { try { errtext = string.Empty; return ccf.GetManageTaskKindIndexFromMonitor(monitorIndex); } catch (Exception ex) { errtext =ex.StackTrace+ ex.Message; return -1; } } /// /// 获得管理任务索引 /// /// /// 设备指令索引 /// public int GetManageTaskIndexFromMonitor(out string errtext, int monitorIndex) { try { errtext = string.Empty; return ccf.GetManageTaskIndexFromMonitor(monitorIndex); } catch (Exception ex) { errtext =ex.StackTrace+ ex.Message; return -1; } } /// /// 获得设备种类索引 /// /// /// 设备索引 /// public int GetDeviceKindIndex(out string errtext, int deviceIndex) { try { errtext = string.Empty; return ccf.GetDeviceKindIdx(deviceIndex); } catch (Exception ex) { errtext =ex.StackTrace+ ex.Message; return -1; } } /// /// 发送设备置位清零 /// /// /// /// public bool SendDeviceReset(out string errtext, int deviceIndex,int ResetOrder) { errtext = string.Empty; try { sdo = CommModeCreate.CreateSendDeviceOrder(deviceIndex); _device = Model.CGetInfo.GetDeviceInfo(deviceIndex); int deviceKind = GetDeviceKindIndex(out errtext, deviceIndex); if ((deviceKind == 1) || (deviceKind == 6)) { if (ResetOrder < 10) { if ((ResetOrder == 2) && (CStaticClass.GetDeviceState(deviceIndex)[1] == 1)) { } else { WriteResponseData(deviceIndex, "DB1", ResetOrder.ToString(), out string errtxt); } } else { //大于10为紧急停车标识 witemnames[0].Clear(); witemnames[0].Append(Model.CGeneralFunction.DBSend).Append(".").Append(Convert.ToString(_device.Dbw1Address + 19)).Append(",b"); wv[0].Clear(); wv[0].Append(ResetOrder - 10); if (sdo.WriteDBData(witemnames, wv, _device.S7Connection) == true) { CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "上位机发送紧急停车", deviceIndex.ToString(), "写标志:" + (ResetOrder - 10).ToString()); } else { errtext =sdo.CommLayerError; return false; } } } else { if ((ResetOrder >= 10)&&(deviceKind == 4)) { //大于10为紧急停车标识 witemnames[0].Clear(); if(_device.DeviceIndex == 15403) { witemnames[0].Append(Model.CGeneralFunction.DBSend).Append(".").Append(Convert.ToString(_device.Dbw1Address + 9)).Append(",b"); } else { witemnames[0].Append(Model.CGeneralFunction.DBSend).Append(".").Append(Convert.ToString(_device.Dbw1Address + 15)).Append(",b"); } wv[0].Clear(); wv[0].Append(ResetOrder - 10); if (sdo.WriteDBData(witemnames, wv, _device.S7Connection) == true) { CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "上位机发送紧急停车", deviceIndex.ToString(), "写标志:" + (ResetOrder - 10).ToString()); } else { errtext = sdo.CommLayerError; return false; } } else { if (deviceKind != 13) {//不是鸿安环穿主站 WriteResponseData(deviceIndex, "DB1", ResetOrder.ToString(), out string errtxt1); } } } //_device = Model.CGetInfo.GetDeviceInfo(deviceIndex); _device.SendMessage = null; Model.CGetInfo.SetDeviceInfo(_device); Thread.Sleep(500);//20131121richard return true; } catch (Exception ex) { errtext =ex.StackTrace+ ex.Message; return false; } } /// /// 心跳诊断 /// /// public bool Heartbeat(out Model.MonitorInfo monitorinfo) {//20130817richard Model.MonitorInfo _monitorinfo = new Model.MonitorInfo(CStaticClass.ObtainManageTask, CStaticClass.Order, OPCClient.CCommonOPCClient.ConnectCount, null); monitorinfo = _monitorinfo; return true; } /// /// 获得指定SQL语句返回的DataView /// /// /// /// public DataTable GetDataView(out string errtext, string SQL) { try { errtext=string.Empty; DataView dv = dbo.ExceSQL(SQL).Tables[0].DefaultView; if (dv.Count > 0) { return dv.Table; } else { errtext = "没查到数据!"; return null; } } catch (Exception ex) { errtext =ex.StackTrace+ ex.Message; return null; } } /// /// 只执行SQL,不反悔数据集的,例如insert,update,delete等 /// /// /// /// public int ExeSQLNoneQuery(out string errtext, string SQL) { try { errtext = string.Empty; int a=dbo.ExecuteSql(SQL); return a; } catch (Exception ex) { errtext =ex.StackTrace+ ex.Message; return -1; } } /// /// 获得指定SQL语句返回的DataView /// /// /// /// public DataTable GetManDataView(out string errtext, string SQL) { DataView dv = new DataView(); try { errtext = string.Empty; dv= dboMan.ExceSQL(SQL).Tables[0].DefaultView; if (dv.Count > 0) { return dv.Table; } else { errtext = "没查到数据!"; return null; } } catch (Exception ex) { errtext =ex.StackTrace+ ex.Message; return null; } } /// /// 只执行SQL,不反悔数据集的,例如insert,update,delete等 /// /// /// /// public int ExeManSQLNoneQuery(out string errtext, string SQL) { try { errtext = string.Empty; int a = dboMan.ExecuteSql(SQL); return a; } catch (Exception ex) { errtext =ex.StackTrace+ ex.Message; return -1; } } public StaticProperty GetTurnOrder(StaticProperty sp) { if (sp != null) { return sp; } else { throw new ArgumentNullException("StaticProperty"); } } public bool GetAllManageTask(out string errtext) { //Model.CGeneralFunction.CreateImage("订单号:123456;重量:22.56kg;\n客户:某某集团;\n件数:30件款式编号:ababababab"); try { errtext = string.Empty; if (CStaticClass.ObtainManageTask == true) { if (CObtainTask.GetManagerTask() == 0) { errtext = CObtainTask.CObtainTaskError; } } return true; } catch (Exception ex) { errtext =ex.StackTrace+ ex.Message; return false; } } public bool DisassembleTask(out string errtext) { try { errtext = string.Empty; if (CStaticClass.Order == true) { CDisassembleTask.MyTaskIntoSteps(); } return true; } catch (Exception ex) { errtext =ex.StackTrace+ ex.Message; return false; } } public bool SetLogicHaveGoods(out string errtext, bool ifHaveGoods, int deviceindex) { errtext = string.Empty; try { if (ifHaveGoods == true) { dbo.ExceSQL(string.Format("UPDATE T_Base_Device SET F_HaveGoods = 1 where F_DeviceIndex ={0}", deviceindex)); } else { dbo.ExceSQL(string.Format("UPDATE T_Base_Device SET F_HaveGoods = 0 where F_DeviceIndex ={0}", deviceindex)); } Model.MDevice dev = Model.CGetInfo.GetDeviceInfo(deviceindex); dev.LogicHaveGoods = ifHaveGoods; Model.CGetInfo.SetDeviceInfo(dev); CDeviceStateChangeEventArgs csce = new CDeviceStateChangeEventArgs(dev); OnDeviceState("SControlMonitor.SetLogicHaveGoods", csce); return true; } catch (Exception ex) { errtext =ex.StackTrace+ ex.Message; return false; } } /// /// 定时按逻辑更新垛机所在巷道 /// 弥补订阅触发更新巷道时入库将垛机改道后连续出库无法正确更新巷道问题 /// /// /// public bool ChangeFlane(int flaneIndex) { StringBuilder sql = new StringBuilder(""); Model.MDevice devinfoFlane = Model.CGetInfo.GetDeviceInfo(flaneIndex); DataView dvMAXDG = new DataView(); DataView dvMAXDGJ = new DataView(); #region 更新管理多级所在巷道 //DataView dvMAXCountV0 = new DataView(); //sql.Remove(0, sql.Length); //sql.Append("SELECT * FROM T_DOUBLEGATE WHERE DEVICE = ").Append(devinfoFlane.DeviceIndex).Append(" and count != 0"); //dvMAXCountV0 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; DataView dvMAXSlected = new DataView(); sql.Remove(0, sql.Length); sql.Append("SELECT * FROM T_DOUBLEGATE WHERE DEVICE = ").Append(devinfoFlane.DeviceIndex).Append(" and selected = 1"); dvMAXSlected = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; int tempZ = 1; if (dvMAXSlected.Count > 0) { switch (Convert.ToInt32(dvMAXSlected[0]["lane"])) { case 18002: case 18004: case 18006: case 18009: case 18012: case 18015: tempZ = 1; break; case 18003: case 18005: case 18007: case 18010: case 18013: case 18016: tempZ = 2; break; default: tempZ = 0; break; } switch (devinfoFlane.DeviceIndex)//扬州晶澳记录弯道垛机所在巷道 { case 11002: //if (CStaticClass.YZJA11002 != devinfoFlane.ZCoor)//更改成按数据库原来记录的值对比是否已在再查询更新,全局变量记录更新数据库时的值,在初始化时从数据库读取一遍此值 { switch (tempZ)//扬州晶澳记录弯道垛机所在巷道 { case 1: sql.Remove(0, sql.Length); sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDG.Count > 0) { sql.Remove(0, sql.Length); sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDGJ.Count > 0) { if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) { dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18002 and device = 11002 ")); dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18003 and device = 11002 ")); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置 ", devinfoFlane.DeviceIndex.ToString(), ": 18002:1 , 18003: 0"); CStaticClass.YZJA11002 = 1; } } } break; case 2: sql.Remove(0, sql.Length); sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDG.Count > 0) { sql.Remove(0, sql.Length); sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDGJ.Count > 0) { if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) { dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18002 and device = 11002 ")); dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18003 and device = 11002 ")); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置 ", devinfoFlane.DeviceIndex.ToString(), ": 18002:0 , 18003: 1"); CStaticClass.YZJA11002 = 2; } } } break; //case 3: // if (CStaticClass.YZJA11002 == 1) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); // dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDG.Count > 0) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); // dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDGJ.Count > 0) // { // if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) // { // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18002 and device = 11002 ")); // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18003 and device = 11002 ")); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置在弯道时 ", devinfoFlane.DeviceIndex.ToString(), ": 18002:0 , 18003: 1"); // CStaticClass.YZJA11002 = 2; // } // } // } // } // else if (CStaticClass.YZJA11002 == 2) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); // dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDG.Count > 0) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); // dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDGJ.Count > 0) // { // if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) // { // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18002 and device = 11002 ")); // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18003 and device = 11002 ")); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置在弯道时 ", devinfoFlane.DeviceIndex.ToString(), ": 18002:1 , 18003: 0"); // CStaticClass.YZJA11002 = 1; // } // } // } // } // else // { // // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); // dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDG.Count > 0) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); // dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDGJ.Count > 0) // { // if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) // { // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18002 and device = 11002 ")); // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18003 and device = 11002 ")); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置在弯道时默认 ", devinfoFlane.DeviceIndex.ToString(), ": 18002:1 , 18003: 0"); // CStaticClass.YZJA11002 = 1; // } // } // } // } // break; default: CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置 ", devinfoFlane.DeviceIndex.ToString(), ": 无垛机位置! "); break; } } break; case 11003: //if (CStaticClass.YZJA11003 != devinfoFlane.ZCoor) //{ // //更新管理表格垛机所在巷道的标识 // DataView dvMAXDG = new DataView(); DataView dvMAXDGJ = new DataView(); switch (tempZ)//扬州晶澳记录弯道垛机所在巷道 { case 1: sql.Remove(0, sql.Length); sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDG.Count > 0) { sql.Remove(0, sql.Length); sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDGJ.Count > 0) { if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) { dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18002 and device = 11002 ")); dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18003 and device = 11002 ")); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置 ", devinfoFlane.DeviceIndex.ToString(), ": 18002:1 , 18003: 0"); CStaticClass.YZJA11003 = 1; } } } break; case 2: sql.Remove(0, sql.Length); sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDG.Count > 0) { sql.Remove(0, sql.Length); sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDGJ.Count > 0) { if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) { dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18004 and device = 11003 ")); dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18004 and device = 11003 ")); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置 ", devinfoFlane.DeviceIndex.ToString(), ": 18004:0 , 18005: 1"); CStaticClass.YZJA11003 = 2; } } } break; //case 3: // if (CStaticClass.YZJA11002 == 1) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); // dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDG.Count > 0) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); // dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDGJ.Count > 0) // { // if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) // { // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18004 and device = 11003 ")); // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18005 and device = 11003 ")); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置在弯道时 ", devinfoFlane.DeviceIndex.ToString(), ": 18004:0 , 18005: 1"); // CStaticClass.YZJA11003 = 2; // } // } // } // } // else if (CStaticClass.YZJA11002 == 2) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); // dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDG.Count > 0) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); // dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDGJ.Count > 0) // { // if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) // { // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18004 and device = 11003 ")); // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18005 and device = 11003 ")); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置在弯道时 ", devinfoFlane.DeviceIndex.ToString(), ": 18004:1 , 18005: 0"); // CStaticClass.YZJA11003 = 1; // } // } // } // } // else // { // // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); // dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDG.Count > 0) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); // dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDGJ.Count > 0) // { // if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) // { // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18004 and device = 11003 ")); // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18005 and device = 11003 ")); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置在弯道时默认 ", devinfoFlane.DeviceIndex.ToString(), ": 18004:1 , 18005: 0"); // CStaticClass.YZJA11003 = 1; // } // } // } // } // break; default: CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置 ", devinfoFlane.DeviceIndex.ToString(), ": 无垛机位置! "); break; } //} break; case 11004: //if (CStaticClass.YZJA11004 != devinfoFlane.ZCoor) //{ // DataView dvMAXDG = new DataView(); DataView dvMAXDGJ = new DataView(); //更新管理表格垛机所在巷道的标识 switch (tempZ)//扬州晶澳记录弯道垛机所在巷道 { case 1: sql.Remove(0, sql.Length); sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDG.Count > 0) { sql.Remove(0, sql.Length); sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDGJ.Count > 0) { if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) { dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18006 and device = 11004 ")); dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18007 and device = 11004 ")); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置 ", devinfoFlane.DeviceIndex.ToString(), ": 18006:1 , 18007: 0"); CStaticClass.YZJA11004 = 1; } } } break; case 2: sql.Remove(0, sql.Length); sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDG.Count > 0) { sql.Remove(0, sql.Length); sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDGJ.Count > 0) { if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) { dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18006 and device = 11004")); dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18007 and device = 11004")); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置 ", devinfoFlane.DeviceIndex.ToString(), ": 18006:0 , 18007: 1"); CStaticClass.YZJA11004 = 2; } } } break; //case 3: // if (CStaticClass.YZJA11004 == 1)//原先是1,现在3 // { // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); // dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDG.Count > 0) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); // dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDGJ.Count > 0) // { // if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) // { // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18006 and device = 11004")); // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18007 and device = 11004")); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置在弯道时 ", devinfoFlane.DeviceIndex.ToString(), ": 18006:0 , 18007: 1"); // CStaticClass.YZJA11004 = 1; // } // } // } // } // else if (CStaticClass.YZJA11004 == 2)//原先是2,现在3 // { // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); // dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDG.Count > 0) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); // dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDGJ.Count > 0) // { // if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) // { // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18006 and device = 11004")); // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18007 and device = 11004")); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置在弯道时 ", devinfoFlane.DeviceIndex.ToString(), ": 18006:1 , 18007: 0"); // CStaticClass.YZJA11004 = 2; // } // } // } // } // else // { // //避免 // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); // dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDG.Count > 0) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); // dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDGJ.Count > 0) // { // if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) // { // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18006 and device = 11004")); // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18007 and device = 11004")); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置在弯道时默认 ", devinfoFlane.DeviceIndex.ToString(), ": 18006:1 , 18007: 0"); // CStaticClass.YZJA11004 = 1; // } // } // } // } // break; default: CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置 ", devinfoFlane.DeviceIndex.ToString(), ": 无垛机位置! "); break; } //} break; case 11006: //if (CStaticClass.YZJA11006 != devinfoFlane.ZCoor) //{ // DataView dvMAXDG = new DataView(); DataView dvMAXDGJ = new DataView(); //更新管理表格垛机所在巷道的标识 switch (tempZ)//扬州晶澳记录弯道垛机所在巷道 { case 1: sql.Remove(0, sql.Length); sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDG.Count > 0) { sql.Remove(0, sql.Length); sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDGJ.Count > 0) { if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) { dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18009 and device = 11006 ")); dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18010 and device = 11006 ")); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置 ", devinfoFlane.DeviceIndex.ToString(), ": 18009:1 , 18010: 0"); CStaticClass.YZJA11006 = 1; } } } break; case 2: sql.Remove(0, sql.Length); sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDG.Count > 0) { sql.Remove(0, sql.Length); sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDGJ.Count > 0) { if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) { dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18009 and device = 11006 ")); dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18010 and device = 11006 ")); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置 ", devinfoFlane.DeviceIndex.ToString(), ": 18009:0 , 18010: 1"); CStaticClass.YZJA11006 = 2; } } } break; //case 3: // if (CStaticClass.YZJA11006 == 1) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); // dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDG.Count > 0) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); // dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDGJ.Count > 0) // { // if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) // { // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18009 and device = 11006 ")); // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18010 and device = 11006 ")); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置在弯道时 ", devinfoFlane.DeviceIndex.ToString(), ": 18009:0 , 18010: 1"); // CStaticClass.YZJA11006 = 2; // } // } // } // } // else if (CStaticClass.YZJA11006 == 2) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); // dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDG.Count > 0) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); // dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDGJ.Count > 0) // { // if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) // { // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18009 and device = 11006 ")); // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18010 and device = 11006 ")); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置在弯道时 ", devinfoFlane.DeviceIndex.ToString(), ": 18009:1 , 18010: 0"); // CStaticClass.YZJA11006 = 1; // } // } // } // } // else // { // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); // dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDG.Count > 0) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); // dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDGJ.Count > 0) // { // if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) // { // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18009 and device = 11006 ")); // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18010 and device = 11006 ")); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置在弯道时默认 ", devinfoFlane.DeviceIndex.ToString(), ": 18009:1 , 18010: 0"); // CStaticClass.YZJA11006 = 1; // } // } // } // } // break; default: CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置 ", devinfoFlane.DeviceIndex.ToString(), ": 无垛机位置! "); break; } //} break; case 11008: //更新管理表格垛机所在巷道的标识 //if (CStaticClass.YZJA11008 != devinfoFlane.ZCoor) //{ // DataView dvMAXDG = new DataView(); DataView dvMAXDGJ = new DataView(); //更新管理表格垛机所在巷道的标识 switch (tempZ)//扬州晶澳记录弯道垛机所在巷道 { case 1: sql.Remove(0, sql.Length); sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDG.Count > 0) { sql.Remove(0, sql.Length); sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDGJ.Count > 0) { if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) { dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18012 and device = 11008 ")); dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18013 and device = 11008 ")); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置 ", devinfoFlane.DeviceIndex.ToString(), ": 18012:1 , 18013: 0"); CStaticClass.YZJA11008 = 1; } } } break; case 2: sql.Remove(0, sql.Length); sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDG.Count > 0) { sql.Remove(0, sql.Length); sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDGJ.Count > 0) { if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) { dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18012 and device = 11008 ")); dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18013 and device = 11008 ")); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置 ", devinfoFlane.DeviceIndex.ToString(), ": 18012:0 , 18013: 1"); CStaticClass.YZJA11008 = 2; } } } break; //case 3: // if (CStaticClass.YZJA11006 == 1) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); // dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDG.Count > 0) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); // dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDGJ.Count > 0) // { // if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) // { // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18012 and device = 11008 ")); // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18013 and device = 11008 ")); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置在弯道时 ", devinfoFlane.DeviceIndex.ToString(), ": 18012:0 , 18013: 1"); // CStaticClass.YZJA11008 = 2; // } // } // } // } // else if (CStaticClass.YZJA11006 == 2) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); // dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDG.Count > 0) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); // dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDGJ.Count > 0) // { // if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) // { // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18012 and device = 11008 ")); // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18013 and device = 11008 ")); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置在弯道时 ", devinfoFlane.DeviceIndex.ToString(), ": 18012:1 , 18013: 0"); // CStaticClass.YZJA11008 = 1; // } // } // } // } // else // { // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); // dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDG.Count > 0) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); // dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDGJ.Count > 0) // { // if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) // { // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18012 and device = 11008 ")); // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18013 and device = 11008 ")); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置在弯道时默认 ", devinfoFlane.DeviceIndex.ToString(), ": 18012:1 , 18013: 0"); // CStaticClass.YZJA11008 = 1; // } // } // } // } // break; default: CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置 ", devinfoFlane.DeviceIndex.ToString(), ": 无垛机位置! "); break; } //} break; case 11010: //更新管理表格垛机所在巷道的标识 //if (CStaticClass.YZJA11010 != devinfoFlane.ZCoor) //{ // DataView dvMAXDG = new DataView(); DataView dvMAXDGJ = new DataView(); //更新管理表格垛机所在巷道的标识 //switch (devinfoFlane.ZCoor)//扬州晶澳记录弯道垛机所在巷道 switch (tempZ) { case 1: sql.Remove(0, sql.Length); sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDG.Count > 0) { sql.Remove(0, sql.Length); sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDGJ.Count > 0) { if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) { dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18015 and device = 11010 ")); dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18016 and device = 11010 ")); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置 ", devinfoFlane.DeviceIndex.ToString(), ": 18015:1 , 18016: 0"); CStaticClass.YZJA11010 = 1; } } } break; case 2: sql.Remove(0, sql.Length); sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDG.Count > 0) { sql.Remove(0, sql.Length); sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; if (dvMAXDGJ.Count > 0) { if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) { dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18015 and device = 11010 ")); dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18016 and device = 11010 ")); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置 ", devinfoFlane.DeviceIndex.ToString(), ": 18015:0 , 18016: 1"); CStaticClass.YZJA11010 = 2; } } } break; //case 3: // if (CStaticClass.YZJA11010 == 1) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); // dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDG.Count > 0) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); // dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDGJ.Count > 0) // { // if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) // { // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18015 and device = 11010 ")); // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18015 and device = 11010 ")); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置在弯道时 ", devinfoFlane.DeviceIndex.ToString(), ": 18009:0 , 18010: 1"); // CStaticClass.YZJA11010 = 2; // } // } // } // } // else if (CStaticClass.YZJA11010 == 2) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); // dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDG.Count > 0) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); // dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDGJ.Count > 0) // { // if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) // { // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18015 and device = 11010 ")); // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18016 and device = 11010 ")); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置在弯道时 ", devinfoFlane.DeviceIndex.ToString(), ": 18015:1 , 18016: 0"); // CStaticClass.YZJA11010 = 1; // } // } // } // } // else // { // sql.Remove(0, sql.Length); // sql.Append("SELECT F_MANAGETASKINDEX FROM T_MONITOR_TASK WHERE F_MONITORINDEX = ").Append(devinfoFlane.TaskNo); // dvMAXDG = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDG.Count > 0) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT FCONTROLTASKTYPE FROM T_MANAGE_TASK WHERE FID = ").Append(dvMAXDG[0]["F_MANAGETASKINDEX"]); // dvMAXDGJ = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvMAXDGJ.Count > 0) // { // if (Convert.ToInt32(dvMAXDGJ[0]["FCONTROLTASKTYPE"]) == 2) // { // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=1 WHERE laneway=18015 and device = 11010 ")); // dboMan.ExceSQL(string.Format("UPDATE IO_CONTROL_LANEWAY SET is_device_in=0 WHERE laneway=18016 and device = 11010 ")); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置在弯道时默认 ", devinfoFlane.DeviceIndex.ToString(), ": 18015:1 , 18016: 0"); // CStaticClass.YZJA11010 = 1; // } // } // } // } break; default: CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "更新管理堆垛机位置 ", devinfoFlane.DeviceIndex.ToString(), ": 无垛机位置! "); break; } //} break; } } #endregion return true; } /// /// 处理设备状态数据和发送应答 /// /// 订阅组对应设备号 /// 设备返回状态信息集合:设备号,指令索引,状态,申请类型/命令字,条码,检尺高度/数量,重量; /// 状态(0空闲;1运行;2完成;30以上故障) /// 一个周期内一个订阅组发送所有标签的个数 /// 每个订阅组里对应设备发送标签名称集合 /// public void DealWithDeviceState(int subGroupDeviceindex, StringBuilder[] deviceStateInfos,StringBuilder[] opcItemNamesDicInfo, StringBuilder[] opcItemValuesDicInfo) { lock (thisLock) { DataView dvPLCASK, dvbc; try { #region 分类处理已解析好的状态 //加载到内存中的设备返回状态信息集合:key设备号, //内容:设备号,指令索引,状态,申请类型/命令字,条码,检尺高度/数量,重量; //状态解析(0空闲;1运行;2完成;30以上故障) if (deviceStateInfos.Length > 0) { int devkind, taskindex, state; string[] dstates;//设备号 , 指令索引, 状态, 申请类型/命令字, 条码, 检尺高度/数量 , 重量; string barcode = string.Empty; foreach (StringBuilder strb in deviceStateInfos) { dstates = strb.ToString().Split(','); int devidx= Convert.ToInt32(dstates[0]); devkind = GetDeviceKindIndex(out string errText, devidx); taskindex = Convert.ToInt32(dstates[1]); state = Convert.ToInt32(dstates[2]); switch (devkind) { #region 堆垛机 case 1: cgs.GetKindDeviceState(taskindex, devidx, state); break; #endregion #region 类输送机 case 2: cgs.GetKindDeviceState(taskindex, devidx, state); break; #endregion #region 穿梭车RGV case 4: cgs.GetKindDeviceState(taskindex, devidx, state); break; #endregion #region 条形码字符串信息 case 7: dvPLCASK = dbo.ExceSQL(string.Format("select F_BarCode,F_Time, F_PalletBarcodeLength,F_PalletBarcodeReservedLength,F_BarcodeReservedLength,F_WareHouse,F_ManageAskkind,F_BarcodeForkAmount,F_BarcodeLength,F_BindingDevice,F_Askkind,F_Remark from T_Base_PLC_Ask WHERE (F_DeviceIndex = {0}) ", devidx)).Tables[0].DefaultView; //20130510F_ManageAskkind if (dvPLCASK.Count > 0) { StringBuilder warehouse = new StringBuilder(dvPLCASK[0]["F_WareHouse"].ToString()); int dcode = Convert.ToInt32(dvPLCASK[0]["F_BindingDevice"]); int apptype = Convert.ToInt32(dvPLCASK[0]["F_ManageAskkind"]);//20130510 int BarcodeForkAmount = Convert.ToInt32(dvPLCASK[0]["F_BarcodeForkAmount"]); //多叉堆垛机存放箱条码的最大组数 barcode = dstates[4]; int BoxInspection = Convert.ToInt32(dstates[5]); //尺寸检测 StringBuilder dtime = new StringBuilder(DateTime.Now.ToString("u")); dtime.Remove(dtime.Length - 1, 1); string apply_remark = ""; object[] ob = new object[8] { apptype, dcode, barcode, 0, dtime, apply_remark, warehouse.ToString(), BoxInspection }; switch (dvPLCASK[0]["F_Askkind"].ToString()) { case "4": //普通条码申请任务 #region 向管理申请任务 try { //方案1:入库模式回库时申请补充下一个空托盘 //dvbc = dbo.ExceSQL(String.Format("select pallet_stacker,OUTPUT_STATION_CODE from T_BASE_IOMODE_SWITCH where STATION_AREA=1 and station_inout_mode=1 and input_station_code='{0}'", dcode)).Tables[0].DefaultView; //if (dvbc.Count > 0 && BoxInspection > 0) //{//richard20230718预料回库口的组件伸缩皮带机入库模式下余料 实盘 回库时申请补充下一个空托盘 // if (dbo.GetSingle(String.Format("select fid from T_Manage_Task where FSTARTDEVICE='{0}' and FENDDEVICE='{1}'", dvbc[0]["pallet_stacker"].ToString(), dvbc[0]["OUTPUT_STATION_CODE"].ToString())) == null) // { // object[] ob1 = new object[16] { ccf.GetTempManageIdx(), 2, "-", 3, 3, 1, 0, 1, 1, "-", dvbc[0]["pallet_stacker"].ToString(), dvbc[0]["OUTPUT_STATION_CODE"].ToString(), "-", 0, DateTime.Now.ToString("u"), 0 }; // dbo.ExceSQL(string.Format("INSERT INTO T_Manage_Task(FID, F_ManageTaskKindIndex,FPALLETBARCODE,FMANAGETASKTYPE,FCONTROLTASKTYPE, FTASKLEVEL, FISRETURN,FSTARTWAREHOUSE,FENDWAREHOUSE, FSTARTCELL, FSTARTDEVICE, FENDDEVICE, FENDCELL, FSTATUS, FBEGTIME, FIntoStepOK)VALUES({0},{1},'{2}',{3},{4},{5},{6},'{7}','{8}','{9}',{10},{11},'{12}',{13},'{14}',{15})", ob1)); // } //} //方案2:入库模式人工按钮叫空母托或者AGV申请空母托信号,目前选定此方案 dboMan.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_ID,CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,WAREHOUSE_CODE,STOCK_HEIGHT)VALUES(IO_CONTROL_APPLY_SEQ.nextval,{0},'{1}','{2}',0,'{4}','{6}','{7}')", ob)); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务:", devidx.ToString(), string.Format(",站台:{0},条码:{1},申请类型:{2} , 高度:{3}", dcode, barcode.ToString().ToUpper(), apptype.ToString(), BoxInspection.ToString())); } catch (Exception ex) { RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务时发生错误:" + ex.StackTrace + ex.Message); OnRefreshMonitor(rmea); continue;//20140218 } #endregion break; case "5": //有匹配已发送的条码比对任务把比对任务报完成,申请任务 int btask = GetMonitorSendedTaskIndexFromBarCode(barcode); if (btask > 0) { #region 有匹配任务把比对任务报完成 cgs.ActionComplete(devidx, btask, 1); #endregion #region 向管理申请任务 try { dboMan.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_ID,CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,WAREHOUSE_CODE,CONTROL_APPLY_PARAMETER)VALUES (IO_CONTROL_APPLY_SEQ.nextval,{0},'{1}','{2}',0,'{4}','{6}','{7}')", ob)); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务:", devidx.ToString(), string.Format(",站台:{0},条码:{1},申请类型:{2} , 高度:{3}", dcode, barcode.ToString().ToUpper(), apptype.ToString(), BoxInspection.ToString())); } catch (Exception ex) { RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务时发生错误:" + ex.StackTrace + ex.Message); OnRefreshMonitor(rmea); continue;//20140218 } #endregion } else { btask = GetMonitorWaitTaskIndexFromDeviceBarCode(barcode, devidx); if (btask > 0) {//有等待执行的条码比对任务,先扫描到条码(只记录条码),送出任务未完成 } else { //无匹配的条码比对任务,找到已发送比对条码任务,设置 异常标记 object obb = dbo.GetSingle(string.Format("select f_monitorindex from T_MONITOR_TASK where f_status>0 and f_deviceindex={0}", devidx)); if (obb != null) { cgs.ActionComplete(devidx, Convert.ToInt32(obb), 990); } else {//管理任务被删除或者手工报完成 #region 向管理申请任务 try { dboMan.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_ID,CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,WAREHOUSE_CODE,CONTROL_APPLY_PARAMETER)VALUES(IO_CONTROL_APPLY_SEQ.nextval,{0},'{1}','{2}',0,'{4}','{6}','{7}')", ob)); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务:", devidx.ToString(), string.Format(",站台:{0},条码:{1},申请类型:{2} , 高度:{3}", dcode, barcode.ToString().ToUpper(), apptype.ToString(), BoxInspection.ToString())); } catch (Exception ex) { RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务时发生错误:" + ex.StackTrace + ex.Message); OnRefreshMonitor(rmea); continue;//20140218 } #endregion } } } break; case "7": //组件扫码成品入库 #region 组件条码申请任务 StringBuilder dtime7 = new StringBuilder(DateTime.Now.ToString("u")); dtime7.Remove(dtime7.Length - 1, 1); string apply_remark7 = ""; object[] ob7 = new object[8] { apptype, dcode, barcode, 0, dtime7, apply_remark7, warehouse.ToString(), BoxInspection }; try { dboMan.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_ID,CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,WAREHOUSE_CODE,CONTROL_APPLY_PARAMETER)VALUES(IO_CONTROL_APPLY_SEQ.nextval,{0},'{1}','{2}',0,'{4}','{6}','{7}')", ob7)); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务:", devidx.ToString(), ",站台:" + dcode + ",条码:" + barcode.ToString().ToUpper() + ",申请类型:" + apptype.ToString()); } catch (Exception ex) { RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务时发生错误:" + ex.StackTrace + ex.Message); OnRefreshMonitor(rmea); continue;//20140218 } #endregion break; case "13": //条码报告完成,考虑第一个扫描器没扫到,但是第二个扫描器却扫到 //没扫到或者有码无对应任务的改道异常口 #region 条码报告完成 #endregion break; default: //无类型,条码比对或者记录条码 break; } dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_BarCode = '{1}',F_Time='{2}' WHERE (F_DeviceIndex = {0}) ", devidx, barcode.ToString(), DateTime.Now)); } break; #endregion #region 落地机人工按钮申请空母托 case 36: dvbc = dbo.ExceSQL(String.Format("select pallet_stacker,OUTPUT_STATION_CODE from T_BASE_IOMODE_SWITCH where STATION_AREA=1 and station_inout_mode=1 and output_station_code='{0}'", devidx)).Tables[0].DefaultView; if (dvbc.Count > 0) {//richard20230718入库模式下落地机人工按钮申请空母托 if (dbo.GetSingle(String.Format("select fid from T_Manage_Task where FSTARTDEVICE='{0}' and FENDDEVICE='{1}'", dvbc[0]["pallet_stacker"].ToString(), dvbc[0]["OUTPUT_STATION_CODE"].ToString())) == null) { object[] ob1 = new object[16] { ccf.GetTempManageIdx(), 2, "-", 3, 3, 1, 0, 1, 1, "-", dvbc[0]["pallet_stacker"].ToString(), dvbc[0]["output_station_code"].ToString(), "-", 0, DateTime.Now.ToString("u"), 0 }; dbo.ExceSQL(string.Format("INSERT INTO T_Manage_Task(FID, F_ManageTaskKindIndex,FPALLETBARCODE,FMANAGETASKTYPE,FCONTROLTASKTYPE, FTASKLEVEL, FISRETURN,FSTARTWAREHOUSE,FENDWAREHOUSE, FSTARTCELL, FSTARTDEVICE, FENDDEVICE, FENDCELL, FSTATUS, FBEGTIME, FIntoStepOK)VALUES({0},{1},'{2}',{3},{4},{5},{6},'{7}','{8}','{9}',{10},{11},'{12}',{13},'{14}',{15})", ob1)); } } break; #endregion #region 拆叠盘机申请出入库对应设备 case 38: //0字节代表命令字:1表示PLC上报,2表示PC应答 //1字节:1申请入库;2申请出库 dvPLCASK = dbo.ExceSQL(string.Format("select F_Time, F_PalletBarcodeLength,F_PalletBarcodeReservedLength,F_BarcodeReservedLength,F_WareHouse,F_ManageAskkind,F_BarcodeForkAmount,F_BarcodeLength,F_BindingDevice,F_Askkind,F_Remark from T_Base_PLC_Ask WHERE (F_DeviceIndex = {0}) ", devidx)).Tables[0].DefaultView; if (dvPLCASK.Count > 0) { StringBuilder warehouse = new StringBuilder(dvPLCASK[0]["F_WareHouse"].ToString()); int dcode = Convert.ToInt32(dvPLCASK[0]["F_BindingDevice"]); int apptype = Convert.ToInt32(dstates[3]); string dtime = DateTime.Now.ToString("u"); dtime = dtime.Substring(0, dtime.Length - 1); bool IfExit = false; int counts = 0;int sendcount = 0; string mandevice; string mondevice; if (apptype == 1) { mandevice = "START_DEVICE_CODE"; mondevice = "FSTARTDEVICE"; } else if (apptype == 2) { mandevice = "END_DEVICE_CODE"; mondevice = "FENDDEVICE"; } else { RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.申请托盘出库时SControlMonitor.DealWithDeviceState拆叠盘机申请出入库时PLC上报出入库任务类型不是1也不是2"); OnRefreshMonitor(rmea); continue; } dvbc = dboMan.ExceSQL(string.Format("SELECT DEVICE_CODE FROM IO_CONTROL_APPLY WHERE APPLY_TASK_STATUS<2 and DEVICE_CODE='{0}' ", dcode.ToString())).Tables[0].DefaultView; if (dvbc.Count > 0) { counts += dvbc.Count; } dvbc = dboMan.ExceSQL(string.Format("select CONTROL_ID from IO_CONTROL where start_device_code = '{0}' and CONTROL_STATUS = 0", dcode)).Tables[0].DefaultView; if (dvbc.Count > 0) { counts += dvbc.Count; } dvbc = dboMan.ExceSQL(string.Format("select CONTROL_ID from IO_CONTROL where end_device_code = '{0}'", dcode)).Tables[0].DefaultView; if (dvbc.Count > 0) { counts += dvbc.Count; } dvbc = dbo.ExceSQL(string.Format("select f_status from T_MONITOR_TASK where f_deviceindex = {0} and f_status <= 1 and f_no1 = 1", dcode)).Tables[0].DefaultView; if (dvbc.Count > 0) { counts += 1; } if (dcode == 12010 || dcode == 12023 || dcode == 12036 || dcode == 12049 || dcode == 12566|| dcode == 12300 || dcode == 12268 || dcode == 12252)// { Model.MDevice devinfocount = Model.CGetInfo.GetDeviceInfo(dcode); sendcount = 2 - counts - devinfocount.SplitByte_0; } else { sendcount = 1- counts; } //if (IfExit == false) for(int i=0;i< sendcount;i++) { if ((apptype == 2) && ((dcode == 22226) || (dcode == 22157) || (dcode == 22108) || (dcode == 22005) || (dcode == 22205) || (dcode == 22126) || (dcode == 22105) || (dcode == 22108)))//功能屏蔽组件车间缓存 && (1 == 0) { DataView dvsp25100 = new DataView(); StringBuilder barcodeT = new StringBuilder(); Model.MDevice devinfocountT = Model.CGetInfo.GetDeviceInfo(dcode); dvsp25100 = dbo.ExceSQL(string.Format("select HAVE_FLAG from T_BASE_HORT WHERE (order_n = {0}) ", devinfocountT.DeviceIndex)).Tables[0].DefaultView; if (dvsp25100.Count > 0) { //更新为有需求 dbo.ExecuteSql(string.Format("UPDATE T_BASE_HORT SET status = 0 WHERE (order_n = {0}) ", dcode)); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "组件车间申请出库托盘垛更新申请状态为0", dcode.ToString(), string.Format(";站台:{0}出入库任务类型:{1},数量:{2}", dcode.ToString(), apptype, sendcount)); } } //else if (dcode == 12284) //{ // Model.MDevice devinfo12595 = Model.CGetInfo.GetDeviceInfo(12595); // DataView dvsp15200 = new DataView(); // dvsp15200 = dbo.ExceSQL(string.Format("select f_txtparam from T_MONITOR_TASK WHERE (f_numparam1 = 12595 and f_numparam4 = 12552 and f_no1 =1 and f_status =0)")).Tables[0].DefaultView; // if (dvsp15200.Count > 0) // { // dboMan.ExecuteSql(string.Format("UPDATE IO_CONTROL SET control_status = 999 WHERE ( stock_barcode = '{0}') ", Convert.ToString(dvsp15200[0]["f_txtparam"]))); // } //} else { StringBuilder sql = new StringBuilder(); sql.Append("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_ID,CONTROL_APPLY_TYPE, WAREHOUSE_CODE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,CONTROL_APPLY_PARAMETER)VALUES ").Append( "(IO_CONTROL_APPLY_SEQ.nextval,").Append(apptype).Append(",'").Append(warehouse.ToString()).Append("','").Append(dcode).Append("','',0,'").Append(dtime).Append("','','')"); try { dboMan.ExceSQL(sql.ToString()); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "拆叠盘机申请出入库", devidx.ToString(), string.Format(";站台:{0}出入库任务类型:{1},数量:{2}", dcode.ToString(), apptype, sendcount)); dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_Time='{2}', F_BarCode = '{1}' WHERE (F_DeviceIndex = {0}) and F_BarCode!='{1}'", devidx, barcode.ToString(), DateTime.Now)); } catch (Exception ex) { RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.申请托盘出库时" + ex.StackTrace + ex.Message); OnRefreshMonitor(rmea); continue; } } } } break; #endregion #region 102车间落地机处申请过账 case 39: ////给对应的站台任务申请过账任务报完成,并给管理报完成,此任务的其余前序指令、设备状态、调度任务等全部处理完成,此处只需要删除此过账任务和给管理报999 无论什么情况只能报999,应为只有到最后一步完成时才有此小任务 //CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "过账申请", devidx.ToString(), string.Format(";条码:{0}", "")); //DataView dvpassbill = dbo.ExceSQL(string.Format("select * from T_MONITOR_TASK WHERE f_numparam1 = {0} and f_numparam4 = {0} ", devidx)).Tables[0].DefaultView; //20130510F_ManageAskkind //for(int j = 0;j< dvpassbill.Count;j++) //{ // dbo.ExceSQL(string.Format("delete from T_MONITOR_TASK where f_monitorindex = {0} ", Convert.ToInt32(dvpassbill[j]["f_monitorindex"]))); // dbo.ExceSQL(string.Format("delete from T_MANAGE_TASK where fid = {0} ", Convert.ToInt32(dvpassbill[j]["f_managetaskindex"]))); // dboMan.ExceSQL(string.Format("update IO_Control set CONTROL_END_TIME =to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'), CONTROL_STATUS= 999 where CONTROL_ID = '{0}'", Convert.ToInt32(dvpassbill[j]["f_managetaskindex"]))); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "过账申请", devidx.ToString(), string.Format(";条码:{0}", Convert.ToString(dvpassbill[j]["f_txtparam"]))); //} if (Convert.ToInt32(dstates[3]) == 3)//AGV接货 { CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "AGV确认过账", devidx.ToString(), string.Format(";条码:{0}", "")); DataView dvpassbill = dbo.ExceSQL(string.Format("select * from T_MONITOR_TASK WHERE f_numparam1 = {0} and f_numparam4 = {0} ", devidx)).Tables[0].DefaultView; //20130510F_ManageAskkind for (int j = 0; j < dvpassbill.Count; j++) { string Endtime = DateTime.Now.ToString("u"); dbo.ExceSQL(string.Format("update T_MONITOR_TASK set f_endtime = '{1}'where f_monitorindex = {0} ", Convert.ToInt32(dvpassbill[j]["f_monitorindex"]), Endtime)); dbo.ExceSQL(string.Format("INSERT INTO T_Monitor_Task_bak select *from T_MONITOR_TASK where f_monitorindex = {0} ", Convert.ToInt32(dvpassbill[j]["f_monitorindex"]))); dbo.ExceSQL(string.Format("delete from T_MONITOR_TASK where f_monitorindex = {0} ", Convert.ToInt32(dvpassbill[j]["f_monitorindex"]))); dbo.ExceSQL(string.Format("delete from T_MANAGE_TASK where fid = {0} ", Convert.ToInt32(dvpassbill[j]["f_managetaskindex"]))); dboMan.ExceSQL(string.Format("update IO_Control set CONTROL_END_TIME =to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'), CONTROL_STATUS= 333 where CONTROL_ID = '{0}'", Convert.ToInt32(dvpassbill[j]["f_managetaskindex"]))); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "AGV过账", devidx.ToString(), string.Format(";条码:{0}", Convert.ToString(dvpassbill[j]["f_txtparam"]))); } } else if (Convert.ToInt32(dstates[3]) == 1)//人工按钮接货 { CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "人工按钮过账", devidx.ToString(), string.Format(";条码:{0}", "")); DataView dvpassbill = dbo.ExceSQL(string.Format("select * from T_MONITOR_TASK WHERE f_numparam1 = {0} and f_numparam4 = {0} ", devidx)).Tables[0].DefaultView; //20130510F_ManageAskkind for (int j = 0; j < dvpassbill.Count; j++) { string Endtime = DateTime.Now.ToString("u"); dbo.ExceSQL(string.Format("update T_MONITOR_TASK set f_endtime = '{1}'where f_monitorindex = {0} ", Convert.ToInt32(dvpassbill[j]["f_monitorindex"]), Endtime)); dbo.ExceSQL(string.Format("INSERT INTO T_Monitor_Task_bak select *from T_MONITOR_TASK where f_monitorindex = {0} ", Convert.ToInt32(dvpassbill[j]["f_monitorindex"]))); dbo.ExceSQL(string.Format("delete from T_MONITOR_TASK where f_monitorindex = {0} ", Convert.ToInt32(dvpassbill[j]["f_monitorindex"]))); dbo.ExceSQL(string.Format("delete from T_MANAGE_TASK where fid = {0} ", Convert.ToInt32(dvpassbill[j]["f_managetaskindex"]))); //993 dboMan.ExceSQL(string.Format("update IO_Control set CONTROL_END_TIME =to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'), CONTROL_STATUS = 993 where CONTROL_ID = '{0}'", Convert.ToInt32(dvpassbill[j]["f_managetaskindex"]))); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "人工过账", devidx.ToString(), string.Format(";条码:{0}", Convert.ToString(dvpassbill[j]["f_txtparam"]))); } } else { CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "过账申请", devidx.ToString(), string.Format(";条码:{0}", "")); DataView dvpassbill = dbo.ExceSQL(string.Format("select * from T_MONITOR_TASK WHERE f_numparam1 = {0} and f_numparam4 = {0} ", devidx)).Tables[0].DefaultView; //20130510F_ManageAskkind for (int j = 0; j < dvpassbill.Count; j++) { dbo.ExceSQL(string.Format("delete from T_MONITOR_TASK where f_monitorindex = {0} ", Convert.ToInt32(dvpassbill[j]["f_monitorindex"]))); dbo.ExceSQL(string.Format("delete from T_MANAGE_TASK where fid = {0} ", Convert.ToInt32(dvpassbill[j]["f_managetaskindex"]))); dboMan.ExceSQL(string.Format("update IO_Control set CONTROL_END_TIME =to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'), CONTROL_STATUS= 999 where CONTROL_ID = '{0}'", Convert.ToInt32(dvpassbill[j]["f_managetaskindex"]))); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "过账申请", devidx.ToString(), string.Format(";条码:{0}", Convert.ToString(dvpassbill[j]["f_txtparam"]))); } } break; #endregion #region 鸿安环穿主站 case 13: cgs.GetKindDeviceState(taskindex, devidx, state); //1:正常接收,解锁主站,接收下一个命令;2:任务异常 dbo.ExceSQL(string.Format("update T_Base_device set F_LockedState=0 where F_LockedState={0} and F_DeviceIndex={1}", taskindex,devidx)); break; #endregion #region 鸿安环形穿梭车RGV case 14: cgs.GetKindDeviceState(taskindex, devidx, state); break; #endregion } } } #endregion #region 一个订阅组内设备按订阅ID deviceindex一批发送应答20230811richard.liu if (opcItemNamesDicInfo!=null) { sdo = CommModeCreate.CreateSendDeviceOrder(subGroupDeviceindex); if (sdo.WriteDBData(opcItemNamesDicInfo, opcItemValuesDicInfo, Model.CGetInfo.GetDeviceInfo(subGroupDeviceindex).S7Connection) == false) {//S7连接设备发送失败 if (sdo.CommLayerError != null) { RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", sdo.CommLayerError); OnRefreshMonitor(rmea); } } } #endregion } catch (Exception ex) { RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.DealWithDeviceState时" + ex.Message + ex.StackTrace); OnRefreshMonitor(rmea); } } } public bool DealWithDeviceState(out string errtext, int deviceindex, byte[] splitbyteValue, byte[] devicestates) { errtext = string.Empty; return true; //deviceindex设备组代表的订阅,首先把设备组按照F_DBW2Address由小到大排序,拆分到具体每个设备 // //20230811richard.liu周期内按S7连接批量发送,重构CControl.cs,SControlMonitor.cs\DealWithDeviceState;文件夹Communication、Common内通讯CSendDeviceOrder: ISendDeviceOrder相关文件 // lock (thisLock) // { // if ((devicestates == null))//(splitbyteValue == null) && // {//20120420 // errtext = OPCClient.CCommonOPCClient.OpcError; // RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", string.Format("SControlMonitor.DealWithDeviceState时,订阅组:{0}发生异常,{1}!", deviceindex, errtext)); // OnRefreshMonitor(rmea); // return false; // } // errtext = string.Empty; // DataView dvDevice = new DataView();//device表的设备信息 // DataView dvPLCASK = new DataView();//PLCASK表数据不能更改 // DataView dvbc = new DataView();//临时表可随意用 // int devicebegin = 0; int DBW2Addressbegin = 0; string S7Connection = string.Empty;//int SplitBytebegin = 0; // int SplitByteLength = 0; // try // { // StringBuilder sql = new StringBuilder(string.Format("SELECT F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte,F_S7Connection FROM T_Base_Device WHERE f_controldevice='1' and (F_DeviceKindIndex !=33) AND (F_ReadSubscription = '{0}') AND (F_DBW2Address IS NOT NULL) ORDER BY F_DBW2Address", deviceindex));//20151120,增加字段是否需要服务端处理设备的订阅 // dvDevice = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvDevice.Count > 0) // {//订阅组第一个设备,设备编码是订阅组ID // devicebegin = Convert.ToInt32(dvDevice[0]["F_DeviceIndex"]); // DBW2Addressbegin = Convert.ToInt32(dvDevice[0]["F_DBW2Address"]); // //SplitBytebegin = Convert.ToInt32(dvDevice[0]["F_SplitByte"]); // S7Connection = dvDevice[0]["F_S7Connection"].ToString(); // sql.Clear(); // sql.Append(string.Format("SELECT F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte,F_S7Connection FROM T_Base_Device WHERE (F_DeviceKindIndex =33) AND (F_ReadSubscription = '{0}') ORDER BY F_DBW2Address", deviceindex)); // dvPLCASK = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvPLCASK.Count > 0) // { // SplitByteLength = Convert.ToInt32(dvPLCASK[0]["F_DBWGetLength"]); // } // } // else // {//非订阅组第一个设备 // sql = new StringBuilder(string.Format("SELECT F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte,F_S7Connection FROM T_Base_Device WHERE (F_DeviceIndex = '{0}') AND (F_DBW2Address IS NOT NULL) ORDER BY F_DBW2Address", deviceindex)); // dvDevice = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvDevice.Count > 0) // { // devicebegin = Convert.ToInt32(dvDevice[0]["F_DeviceIndex"]); // DBW2Addressbegin = Convert.ToInt32(dvDevice[0]["F_DBW2Address"]); // //SplitBytebegin = Convert.ToInt32(dvDevice[0]["F_SplitByte"]); // S7Connection = dvDevice[0]["F_S7Connection"].ToString(); // sql = new StringBuilder(string.Format("SELECT F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte,F_S7Connection FROM T_Base_Device WHERE (F_DeviceKindIndex =33) AND (F_ReadSubscription = '{0}') ORDER BY F_DBW2Address", deviceindex)); // dvPLCASK = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvPLCASK.Count > 0) // { // SplitByteLength = Convert.ToInt32(dvPLCASK[0]["F_DBWGetLength"]); // } // } // else // {//20120420 // RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", string.Format("SControlMonitor.DealWithDeviceState时,订阅组:{0}对应的设备索引不存在!", deviceindex)); // OnRefreshMonitor(rmea); // errtext = string.Format("SControlMonitor.DealWithDeviceState时,订阅组:{0}对应的设备索引不存在!", deviceindex); // return false; // } // } // #region 设备状态采集分解 // int tempdb2addr = 0; StringBuilder sss = new StringBuilder(); StringBuilder barcode = new StringBuilder(); // if (devicestates != null) // { // Array.Copy(devicestates, CStaticClass.MutiReadSubscriptionDeviceStateReturns[deviceindex.ToString()], devicestates.Length); // //遍历订阅内所有设备 // for (int di = 0; di < dvDevice.Count; di++) // { // int devidx = Convert.ToInt32(dvDevice[di]["F_DeviceIndex"]); // devinfo = Model.CGetInfo.GetDeviceInfo(devidx); // witemnames[0].Clear(); // witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 0)).Append(",b");//20141201张磊发现误写为Dbw1Address // sdo = CommModeCreate.CreateSendDeviceOrder(devidx); // int taskindex = 0; int state = 0; // int taskindex2 = 0, taskindex3 = 0; // int xc = 0; int yc = 0; // int devkind = ccf.GetDeviceKindIdx(devidx); // //以下代码重新开发CStaticClass.MutiS7ConnReturns改为按照F_ReadSubscription // tempdb2addr = Convert.ToInt32(dvDevice[di]["F_DBW2Address"]) - DBW2Addressbegin; // if (3 < devinfo.Dbw2Getlength) // { // taskindex = (devicestates[tempdb2addr + 2] << 8) + devicestates[tempdb2addr + 3]; // } // if (1 < devinfo.Dbw2Getlength) // { // state = devicestates[tempdb2addr + 1]; // } // if (devkind == 13) // {//richard.liu20230718鸿安环穿0-1是心跳,2是可下任务状态0:不可下命令,1:可下命令 // state = devicestates[tempdb2addr + 2] == 0 ? 1 : 0; // taskindex = (devicestates[tempdb2addr + 4] << 8) + devicestates[tempdb2addr + 5]; // } // if (devkind == 31) // {//解析南京14所得高端自动化的是否有物信号,高位低位信号(I/O信号字节填写在状态字节的后面) // #region 解析高端设备状态及探物 // devinfo = Model.CGetInfo.GetDeviceInfo(devidx); // devinfo.SplitByte_0 = (devicestates[tempdb2addr + 8] & 1) == 1 ? 1 : 0; // devinfo.SplitByte_1 = (devicestates[tempdb2addr + 8] & 2) == 2 ? 1 : 0; // devinfo.SplitByte_2 = (devicestates[tempdb2addr + 8] & 4) == 4 ? 1 : 0; // devinfo.SplitByte_3 = (devicestates[tempdb2addr + 8] & 8) == 8 ? 1 : 0; // devinfo.SplitByte_4 = (devicestates[tempdb2addr + 8] & 16) == 16 ? 1 : 0; // devinfo.SplitByte_5 = (devicestates[tempdb2addr + 8] & 32) == 32 ? 1 : 0; // devinfo.SplitByte_6 = (devicestates[tempdb2addr + 8] & 64) == 64 ? 1 : 0; // devinfo.SplitByte_7 = (devicestates[tempdb2addr + 8] & 128) == 128 ? 1 : 0; // if (devinfo.RunState != 4)//20121203 // { // if (state >= 30) // { // devinfo.ErrorCode = state; // devinfo.RunState = 2; // } // else // {//0,1,2 // if (state == 2) // { // devinfo.RunState = 5; // } // else // { // devinfo.RunState = state; // } // devinfo.ErrorCode = state; // } // } // barcode.Remove(0, barcode.Length); // for (int i = 2; i <= 7; i++) // { // barcode.Append(Convert.ToChar(devicestates[tempdb2addr + i])); // } // devinfo.Barcode = barcode.ToString(); // if (state == 2) // {//20111231 // #region 判断是否满足条码的正则表达式 // if (ccf.GetCodeCheck(barcode.ToString()) == false) continue; // #endregion // devinfo.TaskNo = GetMonitorTaskIndexFromBarCode(barcode, devinfo); // } // #region 设备被停用时,不显示真实状态20120820 // //if (ccf.GetDeviceLockedState(devidx) == -1) devinfo.RunState = 4;//20121203 // #endregion // Model.CGetInfo.SetDeviceInfo(devinfo); // //CDeviceStateChangeEventArgs csce = new CDeviceStateChangeEventArgs(devinfo); // //OnDeviceState("SControlMonitor.DealWithDeviceState", csce); // #endregion // } // else // { // #region 通用物流设备状态 // devinfo = Model.CGetInfo.GetDeviceInfo(devidx); // if (devinfo.RunState != 4)//20121203 // { // string errText = string.Empty; // if (state >= 30) // { // #region 20160501故障信息变化,上一故障结束,新故障开始 // Model.MError errs; // if (devinfo.ErrorCode != state && devinfo.ErrorCode >= 30) // { // #region 上一次报警或者故障时间分别统计记录 // errs = Model.CGetInfo.GetErrorInfo(Convert.ToInt32(devkind.ToString() + devinfo.ErrorCode.ToString())); // if (errs != null) // { // DataView dverr = dbo.ExceSQL(string.Format("SELECT F_ManageTaskNo,F_DeviceIndex,F_ErrorIndex,F_DateTime FROM T_Base_Device_Error_Log where F_DeviceIndex={0} and F_ErrorIndex={1} order by F_DateTime desc", devidx, errs.ErrorIndex)).Tables[0].DefaultView; // if (dverr.Count > 0) // {//richard.liu20181212对报警记录更新最近一个的修复时间 // sql.Remove(0, sql.Length); // sql.Append("UPDATE T_Base_Device_Error_Log SET F_FixDateTime ='").Append(DateTime.Now.ToString("u")).Append("' Where F_DeviceIndex=") // .Append(devidx).Append(" and F_ErrorIndex=").Append(errs.ErrorIndex).Append(" and F_ManageTaskNo=").Append(Convert.ToInt32(dverr[0]["F_ManageTaskNo"])); // dbo.ExceSQL(sql.ToString()); // } // if (errs.IfAlarm == '1') // { // //CStaticClass.UpdateDeviceOEE(devidx, DateTime.Now.Date, 0, 0, 0, 0 // //, 0, ccf.GetAlarmTimeSpan(devidx),errs.ErrorKind, 0, out errText);//统计上次报警 // //dbo.ExecuteSql(string.Format("update T_Base_Device set F_AlarmStartTime='-' where F_DeviceIndex ={0}", devidx)); // } // else // { // //CStaticClass.UpdateDeviceOEE(devidx, DateTime.Now.Date, 0, 0, 0, 0 // //, ccf.GetErrorTimeSpan(devidx), 0,errs.ErrorKind, 0, out errText);//统计上次故障 // //dbo.ExecuteSql(string.Format("update T_Base_Device set F_ErrorStartTime='-' where F_DeviceIndex ={0}", devidx)); // } // } // #endregion // //新的报警或故障开始计时 // errs = Model.CGetInfo.GetErrorInfo(Convert.ToInt32(devkind.ToString() + state.ToString())); // if (errs != null) // { // if (errs.IfAlarm == '1') // { // //dbo.ExecuteSql(string.Format("update T_Base_Device set F_AlarmStartTime='{1}' where F_DeviceIndex ={0}", devidx, DateTime.Now.ToString("u").Substring(0, 19))); // //CStaticClass.UpdateDeviceOEE(devinfo.DeviceIndex, DateTime.Now.Date, 0, 0, 1, // // 0, 0, 0, 'O', 0, out errText);//richard.liu20181212报警数量增加1 // } // else // { // //dbo.ExecuteSql(string.Format("update T_Base_Device set F_ErrorStartTime='{1}' where F_DeviceIndex ={0}", devidx, DateTime.Now.ToString("u").Substring(0, 19))); // //CStaticClass.UpdateDeviceOEE(devinfo.DeviceIndex, DateTime.Now.Date, 0, 1, 0, // // 0, 0, 0, 'O', 0, out errText);//richard.liu20181212故障数量增加1 // } // } // } // else if (devinfo.ErrorCode != state && devinfo.ErrorCode < 30) // {//求上一次运行时间 // //CStaticClass.UpdateDeviceOEE(devidx, DateTime.Now.Date, 0, 0, 0, ccf.GetConveyorRunTimeSpan(devidx) // // ,0,0,'O',0, out errText);//统计上次运行时间 // //dbo.ExecuteSql(string.Format("update T_Base_Device set F_ConveyorRunStartTime='-' where F_DeviceIndex ={0}", devidx)); // //新的报警或故障开始计时 // errs = Model.CGetInfo.GetErrorInfo(Convert.ToInt32(devkind.ToString() + state.ToString())); // if (errs != null) // { // if (errs.IfAlarm == '1') // { // //dbo.ExecuteSql(string.Format("update T_Base_Device set F_AlarmStartTime='{1}' where F_DeviceIndex ={0}", devidx, DateTime.Now.ToString("u").Substring(0, 19))); // //CStaticClass.UpdateDeviceOEE(devinfo.DeviceIndex, DateTime.Now.Date, 0, 0, 1, // // 0, 0, 0, 'O', 0, out errText);//richard.liu20181212报警数量增加1 // } // else // { // //dbo.ExecuteSql(string.Format("update T_Base_Device set F_ErrorStartTime='{1}' where F_DeviceIndex ={0}", devidx, DateTime.Now.ToString("u").Substring(0, 19))); // //CStaticClass.UpdateDeviceOEE(devinfo.DeviceIndex, DateTime.Now.Date, 0, 1, 0, // // 0, 0, 0, 'O', 0, out errText);//richard.liu20181212故障数量增加1 // } // } // } // #endregion // devinfo.ErrorCode = state; // devinfo.RunState = 2; // } // else // {//0,1,2 // #region 20160501上一故障结束,输送机任务变化:任务数增加1 // //输送机状态变化:0->1开始运行;1->0运行结束,运行时间增加 // if (devinfo.ErrorCode >= 30) // { // #region 如果上一次报警或者故障结束,清除时间,改为运行时间 // Model.MError errs = Model.CGetInfo.GetErrorInfo(Convert.ToInt32(devkind.ToString() + devinfo.ErrorCode.ToString())); // if (errs != null) // { // DataView dverr = dbo.ExceSQL(string.Format("SELECT F_ManageTaskNo,F_DeviceIndex,F_ErrorIndex,F_DateTime FROM T_Base_Device_Error_Log where F_DeviceIndex={0} and F_ErrorIndex={1} order by F_DateTime desc", devidx, errs.ErrorIndex)).Tables[0].DefaultView; // if (dverr.Count > 0) // {//richard.liu20181212对报警记录更新最近一个的修复时间 // sql.Remove(0, sql.Length); // sql.Append("UPDATE T_Base_Device_Error_Log SET F_FixDateTime ='").Append(DateTime.Now.ToString("u")).Append("' Where F_DeviceIndex=") // .Append(devidx).Append(" and F_ErrorIndex=").Append(errs.ErrorIndex).Append(" and F_ManageTaskNo=").Append(Convert.ToInt32(dverr[0]["F_ManageTaskNo"])); // dbo.ExceSQL(sql.ToString()); // } // if (errs.IfAlarm == '1') // { // //CStaticClass.UpdateDeviceOEE(devidx, DateTime.Now.Date, 0, 0, 0, 0 // //, 0, ccf.GetAlarmTimeSpan(devidx),errs.ErrorKind, 0, out errText); // //dbo.ExecuteSql(string.Format("update T_Base_Device set F_AlarmStartTime='-' where F_DeviceIndex ={0}", devidx)); // } // else // { // //CStaticClass.UpdateDeviceOEE(devidx, DateTime.Now.Date, 0, 0, 0, 0 // //, ccf.GetErrorTimeSpan(devidx), 0,errs.ErrorKind, 0, out errText); // //dbo.ExecuteSql(string.Format("update T_Base_Device set F_ErrorStartTime='-' where F_DeviceIndex ={0}", devidx)); // } // //开始记录运行时间 // if (devkind == 2) // { // dbo.ExecuteSql(string.Format("update T_Base_Device set F_ConveyorRunStartTime='{1}' where F_DeviceIndex ={0}", devidx, DateTime.Now.ToString("u").Substring(0, 19))); // } // } // #endregion // } // else // {//状态变化:0->1开始运行;1->0()运行结束,运行时间增加 // if (devinfo.ErrorCode == 0 && state == 1 && devkind == 2) // { // //开始记录运行时间 // dbo.ExecuteSql(string.Format("update T_Base_Device set F_ConveyorRunStartTime='{1}' where F_DeviceIndex ={0}", devidx, DateTime.Now.ToString("u").Substring(0, 19))); // } // else if (devinfo.ErrorCode == 1 && (state == 0 || state == 2) && devkind == 2) // { // //CStaticClass.UpdateDeviceOEE(devidx, DateTime.Now.Date, 0, 0, 0, ccf.GetConveyorRunTimeSpan(devidx) // //, 0, 0,'O', 0, out errText);//统计上次运行时间 // //dbo.ExecuteSql(string.Format("update T_Base_Device set F_ConveyorRunStartTime='-' where F_DeviceIndex ={0}", devidx)); // } // } // //任务变化 // if (devinfo.TaskNo != taskindex && devkind == 2 && taskindex > 0) // { // //CStaticClass.UpdateDeviceOEE(devidx, DateTime.Now.Date,1, 0, 0, 0 // // ,0, 0,'O', 0, out errText); // } // #endregion // if (state == 2) // { // devinfo.RunState = 5; // } // else // { // devinfo.RunState = state; // } // devinfo.ErrorCode = state; // } // } // devinfo.TaskNo = taskindex; // if ((devinfo.DeviceKind == 1) || (devinfo.DeviceKind == 4) || (devinfo.DeviceKind == 14)) // { // devinfo.XCoor = devicestates[tempdb2addr + 7] + (devicestates[tempdb2addr + 6] << 8) + (devicestates[tempdb2addr + 5] << 16) + (devicestates[tempdb2addr + 4] << 32);//X坐标 // if (devinfo.DeviceKind == 1) // { // devinfo.YCoor = devicestates[tempdb2addr + 11] + (devicestates[tempdb2addr + 10] << 8) + (devicestates[tempdb2addr + 9] << 16) + (devicestates[tempdb2addr + 8] << 32);//Y坐标 // devinfo.ZCoor = devicestates[tempdb2addr + 12];//Z相对坐标(1或2\3) // } // } // Model.CGetInfo.SetDeviceInfo(devinfo); // modifypathdevinfo = Model.CGetInfo.GetModifyPathDeviceInfo(devidx); // if (modifypathdevinfo != null) // { // modifypathdevinfo.RunState = devinfo.RunState; // modifypathdevinfo.ErrorCode = devinfo.ErrorCode; // modifypathdevinfo.TaskNo = devinfo.TaskNo; // Model.CGetInfo.SetModifyPathDeviceInfo(modifypathdevinfo); // } // #endregion // } // #region 处理设备完成、报警、运行状态;条码信息 // int bcz = 0; // int askOrder = 0; // int askDevice = 0; // string bc = string.Empty; // int[] states = new int[(int)devinfo.Dbw2Getlength]; // Array.Copy(devicestates, tempdb2addr, states, 0, (int)devinfo.Dbw2Getlength); // switch (devkind) // { // #region 堆垛机 // case 1: // if (devicestates[tempdb2addr + 0] != 1) continue; // #region 更新堆垛机光电开关状态 // devinfo.SplitByte_0 = (devicestates[tempdb2addr + 13] & 1) == 1 ? 1 : 0; // devinfo.SplitByte_1 = (devicestates[tempdb2addr + 13] & 2) == 2 ? 1 : 0; // devinfo.SplitByte_2 = (devicestates[tempdb2addr + 13] & 4) == 4 ? 1 : 0; // devinfo.SplitByte_3 = (devicestates[tempdb2addr + 13] & 8) == 8 ? 1 : 0; // devinfo.SplitByte_4 = (devicestates[tempdb2addr + 13] & 16) == 16 ? 1 : 0; // devinfo.SplitByte_5 = (devicestates[tempdb2addr + 13] & 32) == 32 ? 1 : 0; // devinfo.SplitByte_6 = (devicestates[tempdb2addr + 13] & 64) == 64 ? 1 : 0; // devinfo.SplitByte_7 = (devicestates[tempdb2addr + 13] & 128) == 128 ? 1 : 0; // Model.CGetInfo.SetDeviceInfo(devinfo); // #endregion // if (IsEquals(devinfo.ReturnMessage, states, 4) == false) // { // bc = GetBarcodeFromMonitorIndex(taskindex); // xc = devicestates[tempdb2addr + 7] + (devicestates[tempdb2addr + 6] << 8) + (devicestates[tempdb2addr + 5] << 16) + (devicestates[tempdb2addr + 4] << 32);//X坐标 // yc = devicestates[tempdb2addr + 11] + (devicestates[tempdb2addr + 10] << 8) + (devicestates[tempdb2addr + 9] << 16) + (devicestates[tempdb2addr + 8] << 32);//Y坐标 // devinfo.ReturnMessage = states; // Model.CGetInfo.SetDeviceMessage(devinfo); // sss.Remove(0, sss.Length); // sss.Append("**条码:").Append(bc).Append("**读标志" + devicestates[tempdb2addr + 0]).Append("**状态" + state).Append("**任务号" + taskindex) // .Append("**列坐标" + xc).Append("**层坐标" + yc); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到堆垛机状态", devidx.ToString(), sss.ToString()); // //if (devicestates[tempdb2addr + 0] != 1) continue; // if ((state <= 0) || (taskindex <= 0)) // { // continue; // } // AddBatchReponse("DB1", taskindex, devidx, state); // cgs.GetKindDeviceState(taskindex, devidx, state); // } // break; // #endregion // #region 类输送机 // case 2: // #region 更新输送机光电开关状态 // devinfo.SplitByte_0 = (devicestates[tempdb2addr + 4] & 1) == 1 ? 1 : 0; // devinfo.SplitByte_1 = (devicestates[tempdb2addr + 4] & 2) == 2 ? 1 : 0; // devinfo.SplitByte_2 = (devicestates[tempdb2addr + 4] & 4) == 4 ? 1 : 0; // devinfo.SplitByte_3 = (devicestates[tempdb2addr + 4] & 8) == 8 ? 1 : 0; // devinfo.SplitByte_4 = (devicestates[tempdb2addr + 4] & 16) == 16 ? 1 : 0; // devinfo.SplitByte_5 = (devicestates[tempdb2addr + 4] & 32) == 32 ? 1 : 0; // devinfo.SplitByte_6 = (devicestates[tempdb2addr + 4] & 64) == 64 ? 1 : 0; // devinfo.SplitByte_7 = (devicestates[tempdb2addr + 4] & 128) == 128 ? 1 : 0; // Model.CGetInfo.SetDeviceInfo(devinfo); // #endregion // if (IsEquals(devinfo.ReturnMessage, states, 4) == false) // { // bc = GetBarcodeFromMonitorIndex(taskindex); // devinfo.ReturnMessage = states; // Model.CGetInfo.SetDeviceMessage(devinfo); // StringBuilder task23 = new StringBuilder(); // if (taskindex2 > 0) // { // task23.Append(",任务号2:").Append(taskindex2); // } // if (taskindex3 > 0) // { // task23.Append(",任务号3:").Append(taskindex3); // } // sss.Remove(0, sss.Length); // sss.Append("**条码:").Append(bc).Append("**读标志" + devicestates[tempdb2addr + 0]).Append("**状态" + state).Append("**任务号:" + taskindex).Append(task23); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到输送机机状态", devidx.ToString(), sss.ToString()); // //if (devicestates[tempdb2addr + 0] != 1) continue; // if (state <= 0)//20140305|| taskindex <= 0 // { // continue; // } // if ((taskindex2 > 0 || taskindex3 > 0) && (state == 2)) // {//20120906根据电气报告三叉关联,配三叉 // #region 根据电气报告三叉关联,配三叉 // if (((devidx >= 32665) && (devidx <= 32668)) || ((devidx >= 42616) && (devidx <= 42619))) // { // devidx = devidx * 10 + 3; // } // string aa; // int mankind = 0, fid1 = 0, fid2 = 0, fid3 = 0, relFID = 0, tindex = 0; // if (taskindex3 > 0) // { // mankind = GetManageTaskKindFromMonitor(out aa, taskindex3); // relFID = GetManageTaskIndexFromMonitor(out aa, taskindex3); // tindex = taskindex3; // } // else // { // mankind = GetManageTaskKindFromMonitor(out aa, taskindex2); // relFID = GetManageTaskIndexFromMonitor(out aa, taskindex2); // tindex = taskindex2; // } // fid1 = GetManageTaskIndexFromMonitor(out aa, taskindex); // fid2 = GetManageTaskIndexFromMonitor(out aa, taskindex2); // fid3 = GetManageTaskIndexFromMonitor(out aa, taskindex3); // //关联分配三叉 // sql.Remove(0, sql.Length); // sql.Append("update T_Manage_Task set FUseAwayFork=1,F_RELATIVECONTORLID=").Append(relFID).Append(" where F_ManageTaskKindIndex=").Append(mankind).Append(" and FID=").Append(fid1); // dbo.ExecuteSql(sql.ToString()); // sql.Remove(0, sql.Length); // sql.Append("update T_Manage_Task set FUseAwayFork=2,F_RELATIVECONTORLID=").Append(relFID).Append(" where F_ManageTaskKindIndex=").Append(mankind).Append(" and FID=").Append(fid2); // dbo.ExecuteSql(sql.ToString()); // sql.Remove(0, sql.Length); // sql.Append("update T_Manage_Task set FUseAwayFork=3,F_RELATIVECONTORLID=").Append(relFID).Append(" where F_ManageTaskKindIndex=").Append(mankind).Append(" and FID=").Append(fid3); // dbo.ExecuteSql(sql.ToString()); // int dev3 = devidx; // int dev2 = 0, dev1 = 0; // //堆垛机设备指令配叉F_UseAwayFork、提前检测F_AheadDetect、取货坐标F_NumParam2 // sql.Clear();//20151120 // if (CStaticClass.DBFactory == "OracleDBFactory") // {//20151120调度系统oracle的特殊语句 // sql.Append(string.Format("SELECT F_ManageTASKKINDINDEX,F_ManageTaskIndex,F_MonitorIndex, F_DeviceIndex FROM T_Monitor_Task WHERE F_ManageTASKKINDINDEX={0} and F_ManageTaskIndex={1} and (F_MonitorIndex > {2}) ORDER BY F_MonitorIndex FETCH FIRST ROWS ONLY", mankind, relFID, tindex)); // } // else // {//20151120调度系统SQLServer的特殊语句 // sql.Append(string.Format("SELECT TOP 1 F_ManageTASKKINDINDEX,F_ManageTaskIndex,F_MonitorIndex, F_DeviceIndex FROM T_Monitor_Task WHERE F_ManageTASKKINDINDEX={0} and F_ManageTaskIndex={1} and (F_MonitorIndex > {2}) ORDER BY F_MonitorIndex", mankind, relFID, tindex)); // } // DataView dvr = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;//20151120调度系统oracle的特殊语句 // if (dvr.Count > 0) // { // int stackno = Convert.ToInt32(dvr[0]["F_DeviceIndex"]); // dbo.ExceSQL(string.Format("UPDATE T_Monitor_Task SET F_NumParam2=1,F_UseAwayFork = 1 WHERE F_DeviceIndex={0} and (F_ManageTaskIndex ={1}) AND (F_ManageTASKKINDINDEX ={2})", stackno, fid1, mankind)); // dbo.ExceSQL(string.Format("UPDATE T_Monitor_Task SET F_NumParam2=2,F_UseAwayFork = 2 WHERE F_DeviceIndex={0} and (F_ManageTaskIndex ={1}) AND (F_ManageTASKKINDINDEX ={2})", stackno, fid2, mankind)); // dbo.ExceSQL(string.Format("UPDATE T_Monitor_Task SET F_NumParam2=3,F_UseAwayFork = 3 WHERE F_DeviceIndex={0} and (F_ManageTaskIndex ={1}) AND (F_ManageTASKKINDINDEX ={2})", stackno, fid3, mankind)); // object[] ob; // dvr = dbo.ExceSQL(string.Format("SELECT F_LaneGateDeviceIndex FROM T_Base_Lane_Gate WHERE (F_CorrelDeviceIndex LIKE '%{0}%') AND (F_UseAwayFork = '1')", devidx)).Tables[0].DefaultView; // if ((dvr.Count > 0) && (fid1 > 0)) // { // dev1 = Convert.ToInt32(dvr[0]["F_LaneGateDeviceIndex"]); // ob = new object[5] { devidx, dev1, stackno, fid1, mankind }; // dbo.ExceSQL(string.Format("UPDATE T_Monitor_Task SET F_AheadDetect = REPLACE(F_AheadDetect, '{0}', '{1}') WHERE F_DeviceIndex={2} and (F_ManageTaskIndex ={3}) AND (F_ManageTASKKINDINDEX ={4})", ob)); // ob = new object[4] { dev1.ToString().Substring(0, 5), stackno, fid1, mankind }; // dbo.ExceSQL(string.Format("UPDATE T_Monitor_Task SET F_AheadDetect = REPLACE(F_AheadDetect, '{0}.2', '{0}.0') WHERE F_DeviceIndex={1} and (F_ManageTaskIndex ={2}) AND (F_ManageTASKKINDINDEX ={3})", ob)); // } // dvr = dbo.ExceSQL(string.Format("SELECT F_LaneGateDeviceIndex FROM T_Base_Lane_Gate WHERE (F_CorrelDeviceIndex LIKE '%{0}%') AND (F_UseAwayFork = '2')", devidx)).Tables[0].DefaultView; // if ((dvr.Count > 0) && (fid2 > 0)) // { // dev2 = Convert.ToInt32(dvr[0]["F_LaneGateDeviceIndex"]); // ob = new object[5] { devidx, dev2, stackno, fid2, mankind }; // dbo.ExceSQL(string.Format("UPDATE T_Monitor_Task SET F_AheadDetect = REPLACE(F_AheadDetect, '{0}', '{1}') WHERE F_DeviceIndex={2} and (F_ManageTaskIndex ={3}) AND (F_ManageTASKKINDINDEX ={4})", ob)); // ob = new object[4] { dev2.ToString().Substring(0, 5), stackno, fid2, mankind }; // dbo.ExceSQL(string.Format("UPDATE T_Monitor_Task SET F_AheadDetect = REPLACE(F_AheadDetect, '{0}.2', '{0}.1') WHERE F_DeviceIndex={1} and (F_ManageTaskIndex ={2}) AND (F_ManageTASKKINDINDEX ={3})", ob)); // } // } // AddBatchReponse("DB1", taskindex, dev1, 2); // AddBatchReponse("DB1", taskindex2, dev2, 2); // AddBatchReponse("DB1", taskindex3, dev3, 2); // cgs.ActionComplete(dev1, taskindex, 1); // cgs.ActionComplete(dev2, taskindex2, 1); // cgs.ActionComplete(dev3, taskindex3, 1); // #endregion // } // else // { // if (taskindex > 0) // { // AddBatchReponse("DB1", taskindex, devidx, state); // cgs.GetKindDeviceState(taskindex, devidx, state); // } // } // } // break; // #endregion // #region 穿梭车RGV // case 4: // if (devicestates[tempdb2addr + 0] != 1) continue; // #region 更新穿梭车光电开关状态 // devinfo.SplitByte_0 = (devicestates[tempdb2addr + 8] & 1) == 1 ? 1 : 0; // devinfo.SplitByte_1 = (devicestates[tempdb2addr + 8] & 2) == 2 ? 1 : 0; // devinfo.SplitByte_2 = (devicestates[tempdb2addr + 8] & 4) == 4 ? 1 : 0; // devinfo.SplitByte_3 = (devicestates[tempdb2addr + 8] & 8) == 8 ? 1 : 0; // devinfo.SplitByte_4 = (devicestates[tempdb2addr + 8] & 16) == 16 ? 1 : 0; // devinfo.SplitByte_5 = (devicestates[tempdb2addr + 8] & 32) == 32 ? 1 : 0; // devinfo.SplitByte_6 = (devicestates[tempdb2addr + 8] & 64) == 64 ? 1 : 0; // devinfo.SplitByte_7 = (devicestates[tempdb2addr + 8] & 128) == 128 ? 1 : 0; // #endregion // Model.CGetInfo.SetDeviceInfo(devinfo); // if (IsEquals(devinfo.ReturnMessage, states, 4) == false) // { // bc = GetBarcodeFromMonitorIndex(taskindex); // xc = devicestates[tempdb2addr + 7] + (devicestates[tempdb2addr + 6] << 8) + (devicestates[tempdb2addr + 5] << 16) + (devicestates[tempdb2addr + 4] << 32);//X坐标 // devinfo.ReturnMessage = states; // devinfo.XCoor = xc; // Model.CGetInfo.SetDeviceMessage(devinfo); // sss.Remove(0, sss.Length); // sss.Append("**条码:").Append(bc).Append("**读标志" + devicestates[tempdb2addr + 0]).Append("**状态" + state).Append("**任务号" + taskindex) // .Append("**列坐标" + xc); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到RGV状态", devidx.ToString(), sss.ToString()); // if (devicestates[tempdb2addr + 0] != 1) continue; // if ((state <= 0) || (taskindex <= 0)) // { // continue; // } // AddBatchReponse("DB1", taskindex, devidx, state); // cgs.GetKindDeviceState(taskindex, devidx, state); // } // break; // #endregion // #region 条形码字符串信息 // case 7: // if (devicestates[tempdb2addr + 0] != 1) continue; // //20140109申请任务(任务不存在)或者条码比对(任务已经存在) // dvPLCASK = dbo.ExceSQL(string.Format("select F_BarCode,F_Time, F_PalletBarcodeLength,F_PalletBarcodeReservedLength,F_BarcodeReservedLength,F_WareHouse,F_ManageAskkind,F_BarcodeForkAmount,F_BarcodeLength,F_BindingDevice,F_Askkind,F_Remark,f_flexible,F_IOWORKMODE from T_Base_PLC_Ask WHERE (F_DeviceIndex = {0}) ", devidx)).Tables[0].DefaultView; //20130510F_ManageAskkind // if (dvPLCASK.Count > 0) // { // StringBuilder warehouse = new StringBuilder(dvPLCASK[0]["F_WareHouse"].ToString()); // int dcode = Convert.ToInt32(dvPLCASK[0]["F_BindingDevice"]); // int apptype = Convert.ToInt32(dvPLCASK[0]["F_ManageAskkind"]);//20130510 // int BarcodeForkAmount = Convert.ToInt32(dvPLCASK[0]["F_BarcodeForkAmount"]); //多叉堆垛机存放箱条码的最大组数 // int BoxInspection = devicestates[tempdb2addr + 1]; //尺寸检测 // byte[] weightbyte = new byte[4] { devicestates[tempdb2addr + 2], devicestates[tempdb2addr + 3], devicestates[tempdb2addr + 4], devicestates[tempdb2addr + 5] }; // float weights = CommonClassLib.CCarryConvert.ByteToFloat(weightbyte);//重量信息 // //int BoxWeight = devicestates[tempdb2addr + 5] + (devicestates[tempdb2addr + 4] << 8) + (devicestates[tempdb2addr + 3] << 16) + (devicestates[tempdb2addr + 2] << 32);//称重 // string errorlog = ""; // int BoxQuality = devicestates[tempdb2addr + 6]; //数量,只要是上报条码必须预留数量字节 // //int BoxQuality = 1; // int BarcodeLength = Convert.ToInt32(dvPLCASK[0]["F_BarcodeLength"]);//多叉堆垛机取货站台上报条码、周转箱叠箱、托盘码垛 // int BarcodeReservedLength = Convert.ToInt32(dvPLCASK[0]["F_BarcodeReservedLength"]);//多叉堆垛机取货站台上报条码、周转箱叠箱、托盘码垛 // if (BarcodeReservedLength < BarcodeLength) // { // BarcodeReservedLength = BarcodeLength; // } // int BarcodeTotalLength = BarcodeReservedLength * BoxQuality; // int PalletBarcodeLength = Convert.ToInt32(dvPLCASK[0]["F_PalletBarcodeLength"]);//托盘条码 // int PalletBarcodeReservedLength = Convert.ToInt32(dvPLCASK[0]["F_PalletBarcodeReservedLength"]); // if (PalletBarcodeReservedLength < PalletBarcodeLength) // { // PalletBarcodeReservedLength = PalletBarcodeLength; // } // StringBuilder incompleteBarcode = new StringBuilder();// 1111111111111111....... // StringBuilder noneBarcode = new StringBuilder();// \0\0\0\0.......... // StringBuilder appbarcode = new StringBuilder(); // StringBuilder[] appbarArray = new StringBuilder[BarcodeForkAmount]; // StringBuilder parameter = new StringBuilder();//存放给管理上报的纸箱条码组 // #region 初始化接收条码 // for (int j = 1; j <= BarcodeLength; j++) // { // incompleteBarcode.Append("1");//PLC扫到残码,但是有货物,转换为字符'1' // noneBarcode.Append("0");//PLC没扫描,没货物,保留的空值0,转换为字符'\0' // } // #endregion // //20130831richard // DateTime appdt = new DateTime(); // if (dvPLCASK[0]["F_Time"] == DBNull.Value) // { // appdt = DateTime.Now.AddSeconds(-10); // } // else // { // DateTime.TryParse(dvPLCASK[0]["F_Time"].ToString(), out appdt); // } // if (dvPLCASK[0]["F_BarCode"] != DBNull.Value) // { // if ((appdt.AddSeconds(15) > DateTime.Now) && (dvPLCASK[0]["F_BarCode"].ToString() == barcode.ToString())) // { // dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_BarCode = '{1}',F_Time='{2}' WHERE (F_DeviceIndex = {0}) ", devidx, barcode.ToString(), DateTime.Now)); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "PLC重复上报条码:", devidx.ToString(), ",站台:" + dcode + ",条码:" + barcode.ToString().ToUpper()); // break; // } // } // int returnflag = 2; // switch (dvPLCASK[0]["F_Askkind"].ToString()) // { // case "4": // //普通条码申请任务 // #region 向管理申请任务 // StringBuilder dtime = new StringBuilder(DateTime.Now.ToString("u")); // dtime.Remove(dtime.Length - 1, 1); // string apply_remark = ""; // object[] ob = new object[8] { apptype, dcode, barcode, 0, dtime, apply_remark, warehouse.ToString(), BoxInspection }; // try // { // if (barcode.ToString() == "1111111") // { // //witemnames[0].Clear(); // //witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 0)).Append(",b");//20130510 // //wv[0].Clear(); // //wv[0].Append(3); // //sdo = CommModeCreate.CreateSendDeviceOrder(devidx); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 3); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "写条码应答", devidx.ToString(), "写标志:3" + "**源条码:" + barcode.ToString().ToUpper()); // dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_Time='{2}', F_BarCode = '{1}',F_ERRORLOG = '{3}' WHERE (F_DeviceIndex = {0})", devidx, barcode.ToString(), DateTime.Now, errorlog)); // continue; // } // dvbc = dbo.ExceSQL(String.Format("select pallet_stacker,OUTPUT_STATION_CODE from T_BASE_IOMODE_SWITCH where STATION_AREA=1 and station_inout_mode=1 and input_station_code='{0}'", dcode)).Tables[0].DefaultView; // if (dvbc.Count > 0 && BoxInspection > 0) // {//richard20230718预料回库口的组件伸缩皮带机入库模式下余料 实盘 回库时申请补充下一个空托盘 // if (dbo.GetSingle(String.Format("select fid from T_Manage_Task where FSTARTDEVICE='{0}' and FENDDEVICE='{1}'", dvbc[0]["F_Remark"].ToString(), dvbc[0]["OUTPUT_STATION_CODE"].ToString())) == null) // { // object[] ob1 = new object[16] { ccf.GetTempManageIdx(), 2, "-", 3, 3, 1, 0, 1, 1, "-", dvbc[0]["F_Remark"].ToString(), dvbc[0]["pallet_stacker"].ToString(), "-", 0, DateTime.Now.ToString("u"), 0 }; // dbo.ExceSQL(string.Format("INSERT INTO T_Manage_Task(FID, F_ManageTaskKindIndex,FPALLETBARCODE,FMANAGETASKTYPE,FCONTROLTASKTYPE, FTASKLEVEL, FISRETURN,FSTARTWAREHOUSE,FENDWAREHOUSE, FSTARTCELL, FSTARTDEVICE, FENDDEVICE, FENDCELL, FSTATUS, FBEGTIME, FIntoStepOK)VALUES({0},{1},'{2}',{3},{4},{5},{6},'{7}','{8}','{9}',{10},{11},'{12}',{13},'{14}',{15})", ob1)); // } // } // dboMan.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_ID,CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_PARAMETER)VALUES " // + "(IO_CONTROL_APPLY_SEQ.nextval,{0},'{1}','{2}',0,'{4}','{7}')", ob)); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务:", devidx.ToString(), ",站台:" + dcode + ",条码:" + barcode.ToString().ToUpper() + ",申请类型:" + apptype.ToString() + " , 高度: " + BoxInspection.ToString()); // } // catch (Exception ex) // { // RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务时发生错误:" + ex.StackTrace + ex.Message); // OnRefreshMonitor(rmea); // continue;//20140218 // } // #endregion // break; // case "7": // //组件扫码成品入库 // #region 组件条码申请任务 // barcode.Clear(); // for (int j = 10; j < PalletBarcodeLength; j++) // { // if (devicestates[tempdb2addr + j] == 13) // { // break; // } // barcode.Append(Convert.ToChar(devicestates[tempdb2addr + j]).ToString().ToUpper()); // } // StringBuilder dtime7 = new StringBuilder(DateTime.Now.ToString("u")); // dtime7.Remove(dtime7.Length - 1, 1); // string apply_remark7 = ""; // object[] ob7 = new object[8] { apptype, dcode, barcode, 0, dtime7, apply_remark7, warehouse.ToString(), BoxInspection }; // try // { // dboMan.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_ID,CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_PARAMETER)VALUES " // + "(IO_CONTROL_APPLY_SEQ.nextval,{0},'{1}','{2}',0,'{4}','{7}')", ob7)); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务:", devidx.ToString(), ",站台:" + dcode + ",条码:" + barcode.ToString().ToUpper() + ",申请类型:" + apptype.ToString()); // } // catch (Exception ex) // { // RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务时发生错误:" + ex.StackTrace + ex.Message); // OnRefreshMonitor(rmea); // continue;//20140218 // } // #endregion // break; // case "13": // //条码报告完成,考虑第一个扫描器没扫到,但是第二个扫描器却扫到 // //没扫到或者有码无对应任务的改道异常口 // #region 条码报告完成 // barcode.Clear(); // if (PalletBarcodeLength > 0) // {//普通扫描单箱的条码申请\机器人码垛的托盘条码 // //incompleteBarcode.Clear();//20150103 // //noneBarcode.Clear();//20150103 // //for (int j = 1; j <= PalletBarcodeLength; j++) // //{//20150103 // // incompleteBarcode.Append("1");//PLC扫到残码,但是有货物,转换为字符'1' // // noneBarcode.Append("0");//PLC没扫描,没货物,保留的空值0,转换为字符'\0' // //} // for (int j = 10; j < PalletBarcodeLength + 10; j++) // { // //读取到正确的asci码时才对barcode赋值 // if ((devicestates[tempdb2addr + j] > 47) && (devicestates[tempdb2addr + j] < 123)) // { // barcode.Append(Convert.ToChar(devicestates[tempdb2addr + j]).ToString().ToUpper()); // } // //for (int j = 10; j < PalletBarcodeLength; j++) // //{ // // if (devicestates[tempdb2addr + j] == 13) // // { // // break; // // } // // barcode.Append(Convert.ToChar(devicestates[tempdb2addr + j]).ToString().ToUpper()); // //} // } // } // //if (barcode.ToString() == incompleteBarcode.ToString()) // //{//扫到残码 // // #region 是否具备申请任务扫码条件 // // int[] statess; // // statess = CStaticClass.GetDeviceState(Convert.ToInt32(dvPLCASK[0]["F_BindingDevice"])); // // if (statess != null) // // { // // if (statess[1] != 0) // // { // // break; // // } // // } // // else // // { // // break; // // } // // RefreshMonitorEventArgs rmea; // // char[] dd = new char[1] { '.' }; // // string[] DS = ccf.GetBindingDeviceIndexOut(Convert.ToInt32(dvPLCASK[0]["F_BindingDevice"])).Split(dd); // // int devicebyte = 0; int devbit = 0; // // if (DS.GetLength(0) > 1) // // { // // int.TryParse(DS[0], out devicebyte); // // int.TryParse(DS[1], out devbit); // // if (CStaticClass.GetDevicePhotoelectric(devicebyte, devbit) != 1) // // { // // statess = null; // // break; // // } // // } // // else // // { // // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务时:", devidx.ToString(), ",站台:" + dvPLCASK[0]["F_BindingDevice"].ToString() + ",出口开关没填写记录!"); // // rmea = new RefreshMonitorEventArgs("notifyIcon1", "警告:条码扫描器申请入库任务:" + dvPLCASK[0]["F_BindingDevice"].ToString() + ",出口开关没填写记录!"); // // OnRefreshMonitor(rmea); // // break; // // } // // #endregion // // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务时:", devidx.ToString(), ",站台:" + dcode + ",扫到残缺条码!" + barcode.ToString().ToUpper()); // // rmea = new RefreshMonitorEventArgs("notifyIcon1", "警告:向管理条码申请任务时,站台:" + dcode + ",扫到残缺条码!时间:" + DateTime.Now.ToString("u")); // // OnRefreshMonitor(rmea); // // int abst; // // if (int.TryParse(dvPLCASK[0]["F_Remark"].ToString(), out abst) == true) // // { // // if (IfExitDeviceBarcodeTask(dcode, barcode.ToString()) == false) // // { // // object[] ob = new object[17] { ccf.GetTempManageIdx(), 2, barcode.ToString(), 1, 2, 1, 1, ccf.GetWarehouseIndex(), ccf.GetWarehouseIndex(), "-", dcode, dvPLCASK[0]["F_Remark"].ToString(), "-", 0, DateTime.Now.ToString("u"), 0, Model.CGeneralFunction.TASKABEND }; // // dbo.ExceSQL(string.Format("INSERT INTO T_Manage_Task(FID, F_ManageTaskKindIndex,FPALLETBARCODE,FMANAGETASKTYPE,FCONTROLTASKTYPE, FTASKLEVEL, FISRETURN,FSTARTWAREHOUSE,FENDWAREHOUSE, FSTARTCELL, FSTARTDEVICE, FENDDEVICE, FENDCELL, FSTATUS, FBEGTIME, FIntoStepOK,FExceptionNO)VALUES({0},{1},'{2}',{3},{4},{5},{6},'{7}','{8}','{9}',{10},{11},'{12}',{13},'{14}','{15}',{16})", ob)); // // } // // } // //} // //else // //{ // bool return_f = BarcodeComplete(devidx, dcode, barcode.ToString(), dvPLCASK[0]["F_Remark"].ToString()); // if (return_f == false) // { // //witemnames[0].Clear(); // //if (devinfo.S7Connection == "@localserver") // //{ // // witemnames[0].Append("DB1").Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 0)).Append(",b");//20130510 // //} // //else // //{ // // witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 0)).Append(",b");//20130510 // //} // //wv[0].Clear(); // //wv[0].Append(3); // //sdo = CommModeCreate.CreateSendDeviceOrder(devidx); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 3); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "写条码应答", devidx.ToString(), "写标志:3" + "**源条码:" + barcode.ToString().ToUpper()); // dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_Time='{2}', F_BarCode = '{1}',F_ERRORLOG = '{3}' WHERE (F_DeviceIndex = {0})", devidx, barcode.ToString(), DateTime.Now, errorlog)); // continue; // } // //} // #endregion // break; // case "15": // //多叉顶升机条码组申请入库//20140218 // #region 多叉向管理申请任务 // StringBuilder devbind = new StringBuilder(); // StringBuilder devbinds = new StringBuilder(); // parameter.Clear(); // for (int i = 0; i < BarcodeForkAmount; i++) // { // bool ifexit = false; // if (appbarArray[i].ToString() != noneBarcode.ToString()) // { // devbind.Clear(); // devbind.Append(dcode.ToString() + ((i + 1).ToString())); // devbinds.Append("|").Append(devbind); // if (appbarArray[i].ToString() == incompleteBarcode.ToString())//扫到残码,但是有货物 // {//自动生成条码“9+dvPLCASK[0]["F_BindingDevice"]+顺序号” // parameter.Append("|").Append(GetErrorBarcode(dcode, devidx, BarcodeLength)); // } // else // { // parameter.Append("|").Append(appbarArray[i].ToString()); // } // dvbc = dboMan.ExceSQL(string.Format("SELECT DEVICE_CODE,STOCK_BARCODE FROM IO_CONTROL_APPLY WHERE APPLY_TASK_STATUS<2 and DEVICE_CODE='{0}' and (STOCK_BARCODE = '{1}')", devbind, appbarArray[i].ToString())).Tables[0].DefaultView; // if (dvbc.Count > 0) // { // ifexit = true; // } // dvbc = dboMan.ExceSQL(string.Format("select CONTROL_ID from IO_CONTROL where STOCK_BARCODE like '%{0}%'", appbarArray[i].ToString())).Tables[0].DefaultView; // if (dvbc.Count > 0) // { // ifexit = true; // } // dvbc = dbo.ExceSQL(string.Format("select fid from T_Manage_Task where FPALLETBARCODE like '%{0}%'", appbarArray[i].ToString())).Tables[0].DefaultView; // if (dvbc.Count > 0) // { // ifexit = true; // } // } // if (ifexit == true) // { // RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务时发生错误:条码" + appbarArray[i].ToString() + "对应的管理任务已经存在!"); // OnRefreshMonitor(rmea); // } // } // if (devbinds.ToString().Length > 1) // { // devbinds = new StringBuilder(devbinds.ToString().Substring(1)); // parameter = new StringBuilder(parameter.ToString().Substring(1)); // barcode.Clear();//记录堆垛机最大叉的箱条码 // barcode.Append(appbarArray[BarcodeForkAmount - 1].ToString()); // string dtime15 = DateTime.Now.ToString("u"); // dtime15 = dtime15.Substring(0, dtime15.Length - 1); // int appid = dboMan.GetManageTableIndex("IO_CONTROL_APPLY", true);//CONTROL_APPLY_ID // object[] ob15 = new object[8] { apptype, devbinds.ToString(), parameter.ToString(), 0, dtime15, "", warehouse.ToString(), appid }; // try // { // dboMan.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY( CONTROL_APPLY_ID,CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,WAREHOUSE_CODE)VALUES ({7},{0},'{1}','{2}',{3},'{4}','{5}','{6}')", dtime15)); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务:", devidx.ToString(), ",站台:" + dcode + ",条码:" + parameter.ToString().ToUpper());//20140218 // sql.Remove(0, sql.Length); // sql.Append("UPDATE T_Base_PLC_Ask SET F_FirstProject = '").Append(parameter.ToString()).Append(" WHERE F_DeviceIndex = ").Append(devidx); // dbo.ExecuteSql(sql.ToString()); // } // catch (Exception ex) // { // RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务时发生错误:" + ex.StackTrace + ex.Message); // OnRefreshMonitor(rmea); // continue;//20140218 // } // } // #endregion // break; // case "16": // //break; // #region // barcode.Clear(); // for (int j = 10; j < 7 + 10; j++) // { // //读取到正确的asci码时才对barcode赋值 // if ((devicestates[tempdb2addr + j] > 47) && (devicestates[tempdb2addr + j] < 123)) // { // barcode.Append(Convert.ToChar(devicestates[tempdb2addr + j]).ToString().ToUpper()); // } // } // //barcode.Append("|".ToUpper()); // //for (int j = 16; j < 26 + 10; j++) // //{ // // //读取到正确的asci码时才对barcode赋值 // // if ((devicestates[tempdb2addr + j] > 47) && (devicestates[tempdb2addr + j] < 123)) // // { // // barcode.Append(Convert.ToChar(devicestates[tempdb2addr + j]).ToString().ToUpper()); // // } // //} // StringBuilder dtime16 = new StringBuilder(DateTime.Now.ToString("u")); // dtime16.Remove(dtime16.Length - 1, 1); // string apply_remark16 = ""; // object[] ob16 = new object[8] { apptype, dcode, barcode, 0, dtime16, apply_remark16, warehouse.ToString(), BoxInspection }; // try // { // dboMan.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_ID,CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_PARAMETER)VALUES " // + "(IO_CONTROL_APPLY_SEQ.nextval,{0},'{1}','{2}',0,'{4}','{7}')", ob16)); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务:", devidx.ToString(), ",站台:" + dcode + ",条码:" + barcode.ToString().ToUpper() + ",申请类型:" + apptype.ToString()); // } // catch (Exception ex) // { // RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务时发生错误:" + ex.StackTrace + ex.Message); // OnRefreshMonitor(rmea); // continue;//20140218 // } // #endregion()); // break; // case "17": // #region 叠箱机上报个数和箱条码 // if (parameter.ToString().Length > 0) // { // #region 向管理申请叠箱后入库任务 // //向管理申请入库任务 // string dtime17 = DateTime.Now.ToString("u"); // dtime17 = dtime17.Substring(0, dtime17.Length - 1); // int appid = dboMan.GetManageTableIndex("IO_CONTROL_APPLY", true);//CONTROL_APPLY_ID // sql.Remove(0, sql.Length); // sql.Append("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_ID,CONTROL_APPLY_TYPE,WAREHOUSE_CODE, DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,BOX_QUANTITY,CONTROL_APPLY_PARAMETER)VALUES ").Append( // "(").Append(appid).Append(",").Append(apptype).Append(",'").Append(warehouse.ToString()).Append("','").Append(dcode).Append("','").Append(barcode).Append("',0,'").Append(dtime17).Append("',").Append(BoxQuality).Append(",'").Append(parameter.ToString()).Append("')");//20130510 // try // { // dboMan.ExceSQL(sql.ToString()); // //20091128 // sql.Remove(0, sql.Length); // sql.Append("UPDATE T_Base_PLC_Ask SET F_FirstProject = '").Append(parameter.ToString()).Append("',F_Remark='' WHERE (F_Askkind = 17) AND (F_BindingDevice = ").Append(dvPLCASK[0]["F_BindingDevice"]).Append(")"); // dbo.ExceSQL(sql.ToString()); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理申请叠箱入库任务", devidx.ToString(), dcode + "条码" + barcode.ToString().ToUpper() + "垛条码:" + parameter.ToString()); // } // catch (Exception ex) // { // RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请叠箱入库任务:" + ex.StackTrace + ex.Message); // OnRefreshMonitor(rmea); // errtext = "向管理申请叠箱入库任务:" + ex.StackTrace; // continue;//20140218 // } // #endregion // } // #endregion // break; // case "30": // //add for qdty // #region 实时出库条码比对 // //dvbc = dbo.ExceSQL(string.Format("select * from T_Manage_Task where FENDDEVICE = '{0}' or FENDDEVICE = '12397' or FENDDEVICE = '22244'", dcode)).Tables[0].DefaultView; // //if (dvbc.Count > 0) // //{ // // DataView dvbcnew; // // int index = 0; // // for (index = 0; index < dvbc.Count; index++) // // { // // dvbcnew = dbo.ExceSQL(string.Format("select * from T_Monitor_Task where F_ManageTaskIndex ={0} order by F_MONITORINDEX", Convert.ToInt32(dvbc[index]["fid"]))).Tables[0].DefaultView; // // { // // if (dvbcnew.Count > 0) // // { // // if (dvbcnew[0]["F_DeviceIndex"].ToString() == "36004") // // { // // if (dvbcnew[0]["F_TxtParam"].ToString() == barcode.ToString()) // // { // // cgs.ActionComplete(Convert.ToInt32(dvbcnew[0]["F_DeviceIndex"]), Convert.ToInt32(dvbcnew[0]["F_MonitorIndex"]), 0); // // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "单条码 比对时:", "36004", "管理任务号:" + dvbc[index]["fid"].ToString() + "比对通过! 任务条码:" + dvbcnew[0]["F_TxtParam"].ToString() + ",电气条码:" + barcode.ToString()); // // break; // // } // // else // // { // // dbo.ExecuteSql(string.Format("update T_Monitor_Task set F_Status=31 WHERE F_MONITORINDEX ={0}", Convert.ToInt32(dvbcnew[0]["F_MONITORINDEX"]))); // // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "单条码 比对时:", "36004", "管理任务号:" + dvbc[index]["fid"].ToString() + "比对失败! 任务条码:" + dvbcnew[0]["F_TxtParam"].ToString() + ",电气条码:" + barcode.ToString()); // // RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("notifyIcon1", "警告:" + devinfo.DeviceName + ",36004发生故障:" + "条码比对失败!"); // // OnRefreshMonitor(rmea); // // } // // } // // } // // } // // } // // if (index == dvbc.Count) // // { // // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码比对", devidx.ToString(), "未找到对应任务!源条码:" + barcode.ToString().ToUpper() + ",站台编号:" + dcode.ToString()); // // } // //} // //else // //{ // // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码比对", devidx.ToString(), "未找到对应任务!源条码:" + barcode.ToString().ToUpper() + ",站台编号:" + dcode.ToString()); // //} // #endregion // break; // case "21": // //add for qdty // #region 二楼分路条码 // //boxTaskPorts = GetBoxTaskPortFromWMS(barcode.ToString()); // //if (devidx == 26027) // //{ // // returnflag = 12; // // if (boxTaskPorts != null) // // { // // for (int i = 0; i < boxTaskPorts.Count(); i++) // // { // // if (boxTaskPorts[i] == 33007) // // { // // returnflag = 11; // // break; // // } // // } // // } // //} // //else if ((devidx == 26004) || (devidx == 26003)) // //{ // // returnflag = 12; // // if (boxTaskPorts != null) // // { // // for (int i = 0; i < boxTaskPorts.Count(); i++) // // { // // if (barScanOutPort.ContainsKey(boxTaskPorts[i])) // // { // // if (devidx == 26003) // // { // // if (last26003Index != 11) // // { // // returnflag = 11; // // last26003Index = 11; // // } // // else // // { // // returnflag = 12; // // last26003Index = 12; // // } // // //for test // // //returnflag = 12; // // } // // else if (devidx == 26004) // // { // // returnflag = 11; // // } // // break; // // } // // } // // } // //} // //else if ((devidx == 26001) || (devidx == 26002)) // //{ // // returnflag = 13; // // if (boxTaskPorts != null) // // { // // for (int i = 0; i < boxTaskPorts.Count(); i++) // // { // // if (barScanOutPort.ContainsKey(boxTaskPorts[i])) // // { // // returnflag = 11; // // break; // // } // // else if ((boxTaskPorts[i].ToString().Length > 0) && (boxSupplyPort + ",23197,33007").Contains(boxTaskPorts[i].ToString())) // // { // // returnflag = 12; // // break; // // } // // } // // } // //} // //else if (devidx == 26005) // //{ // // returnflag = 13; // // if (boxTaskPorts != null) // // { // // for (int i = 0; i < boxTaskPorts.Count(); i++) // // { // // if ((boxTaskPorts[i].ToString().Length > 0) && boxSupplyPort.Substring(0, 48).Contains(boxTaskPorts[i].ToString())) // // { // // returnflag = 12; // // break; // // } // // else if ((boxTaskPorts[i].ToString().Length > 0) && boxSupplyPort.Substring(48).Contains(boxTaskPorts[i].ToString())) // // { // // returnflag = 11; // // break; // // } // // } // // } // //} // #endregion // break; // case "22": // //add for qdty // #region 补货口条码申请 // //boxTaskPorts = GetBoxTaskPortFromWMS(barcode.ToString()); // //returnflag = 11;//异常给电气回复11 // ////for test // //if (false) // //{ // // if ((devidx == 26010) && !(barcode.ToString().StartsWith("1111111"))) // // { // // if (barcode.ToString().Substring(13) == "1") // // { // // returnflag = 12; // // break; // // } // // else if (barcode.ToString().Substring(13) == "2") // // { // // returnflag = 13; // // break; // // } // // } // // if ((devidx == 26011) && !(barcode.ToString().StartsWith("1111111"))) // // { // // if (barcode.ToString().Substring(13) == "3") // // { // // returnflag = 12; // // break; // // } // // else if (barcode.ToString().Substring(13) == "4") // // { // // returnflag = 13; // // break; // // } // // } // // if ((devidx == 26012) && !(barcode.ToString().StartsWith("1111111"))) // // { // // if (barcode.ToString().Substring(13) == "5") // // { // // returnflag = 12; // // break; // // } // // else if (barcode.ToString().Substring(13) == "6") // // { // // returnflag = 13; // // break; // // } // // } // // if ((devidx == 26013) && !(barcode.ToString().StartsWith("1111111"))) // // { // // if (barcode.ToString().Substring(13) == "7") // // { // // returnflag = 12; // // break; // // } // // else if (barcode.ToString().Substring(13) == "8") // // { // // returnflag = 13; // // break; // // } // // } // //} // //if (boxTaskPorts != null) // //{ // // for (int i = 0; i < boxTaskPorts.Count(); i++) // // { // // if (boxTaskPorts[i] == barScanSupplyPort[devidx][0]) // // { // // returnflag = 12; // // break; // // } // // else if (boxTaskPorts[i] == barScanSupplyPort[devidx][1]) // // { // // returnflag = 13; // // break; // // } // // } // //} // //if (((devidx == 26009) || (devidx == 26013)) && (returnflag == 11)) // //{ // // //最后一个补货口,如果异常直接左分 // // returnflag = 12; // //} // #endregion // break; // case "23": // //add for qdty // #region 三楼纸箱线机器手分路条码扫描 // //boxTaskPorts = GetBoxTaskPortFromWMS(barcode.ToString()); // //returnflag = 13;//异常给电气回复13 // //if (boxTaskPorts != null) // //{ // // for (int i = 0; i < boxTaskPorts.Count(); i++) // // { // // if (boxTaskPorts[i] == 33066) // // { // // returnflag = 12;//三楼电商纸箱补货口 // // break; // // } // // else if (barScanOutPort.ContainsKey(boxTaskPorts[i]) || ((boxTaskPorts[i].ToString()!="") && boxSupplyPort.Contains(boxTaskPorts[i].ToString())) || (boxTaskPorts[i] == 23197)) // // { // // returnflag = 11;//出库或平库补货 // // break; // // } // // } // //} // #endregion // break; // case "24": // //add for qdty // #region 一楼纸箱线称重条码扫描 // //returnflag = 2;//给电气回复2 // ////boxTaskPorts = GetBoxTaskPortFromWMS(barcode.ToString()); // //if ((barcode.Length == 14) && !(barcode.ToString().StartsWith("11111111"))) // //{ // // dboMan.ExecuteSql(string.Format("UPDATE IDX_ASRS_SERIALNO SET TASKSTATUS=3, WEIGHT = {0} WHERE (SERIALNO = '{1}')", weights, barcode.ToString())); // // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理上报称重信息:", devidx.ToString(), ",站台:" + dcode + ",条码:" + barcode.ToString().ToUpper() + ",重量:" + weights.ToString()); // //} // ////print_message(devidx, barcode.ToString()); // #endregion // break; // case "25": // //add for qdty // #region 一楼高速分拣条码申请 // //boxTaskPorts = GetBoxTaskPortFromWMS(barcode.ToString()); // //returnflag = 30;//异常给电气回复30 // //if (boxTaskPorts != null) // //{ // // for (int i = 0; i < boxTaskPorts.Count(); i++) // // { // // if (barScanOutPort.ContainsKey(boxTaskPorts[i])) // // { // // returnflag = barScanOutPort[boxTaskPorts[i]]; // // break; // // } // // } // //} // #endregion // break; // case "26": // //add for qdty // #region 零拣口条码申请 // //boxTaskPorts = GetBoxTaskPortFromWMS(barcode.ToString()); // //returnflag = 11;//异常给电气回复11 // //if (false) // //{ // // if ((barcode.Length < 14) || (barcode.ToString().StartsWith("11111111"))) // // { // // returnflag = 11; // // } // // else // // { // // if (lastlingjianIndex != 12) // // { // // returnflag = 12; // // lastlingjianIndex = 12; // // } // // else // // { // // returnflag = 13; // // lastlingjianIndex = 13; // // } // // } // // break; // //} // //if (boxTaskPorts != null) // //{ // // for (int i = 0; i < boxTaskPorts.Count(); i++) // // { // // if (boxTaskPorts[i] == barScanPickPort[devidx][0]) // // { // // returnflag = 12; // // break; // // } // // else if (boxTaskPorts[i] == barScanPickPort[devidx][1]) // // { // // returnflag = 13; // // break; // // } // // } // //} // #endregion // break; // case "27": // ////add for qdty // #region 复合台条码申请 // //DataView dvdv = dbo.ExceSQL(string.Format("select DeskNO from T_DESK_STATUS t where status = 1 and ifdeskfull = 0 order by DeskNO")).Tables[0].DefaultView; // //if (dvdv.Count > 0) // //{ // // int index = 0; // // for (index = 0; index < dvdv.Count; index++) // // { // // if (lastDeskIndex < Convert.ToInt32(dvdv[index]["DeskNO"])) // // { // // returnflag = Convert.ToInt32(dvdv[index]["DeskNO"]) + 10; // // lastDeskIndex = Convert.ToInt32(dvdv[index]["DeskNO"]); // // break; // // } // // } // // if (index == dvdv.Count) // // { // // returnflag = Convert.ToInt32(dvdv[0]["DeskNO"]) + 10; // // lastDeskIndex = Convert.ToInt32(dvdv[0]["DeskNO"]); // // } // //} // //else // //{ // // returnflag = 28; // // lastDeskIndex = 18; // // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "周转箱分配复核台时,", devidx.ToString(), ",站台:" + dcode + ",条码:" // // + barcode.ToString().ToUpper().Trim() + ",未发现可用复核台,箱子直接发至异常口"); // //} // #endregion // break; // case "28": // ////add for qdty // #region 零拣口捷径条码申请 // //boxTaskPorts = GetBoxTaskPortFromWMS(barcode.ToString()); // //returnflag = 12;//异常给电气回复12 // //if (testflag) // //{ // // returnflag = 11; // // break; // //} // //if (boxTaskPorts != null) // //{ // // for (int i = 0; i < boxTaskPorts.Count(); i++) // // { // // if ((boxTaskPorts[i].ToString().Length > 0) && "23499,23495,23525,23521,23548,23552,23575,23579".Contains(boxTaskPorts[i].ToString())) // // { // // returnflag = 11; // // break; // // } // // } // //} // #endregion // break; // case "31": // ////add for qdty // #region 零拣口终点条码申请 // //boxTaskPorts = GetBoxTaskPortFromWMS(barcode.ToString()); // //returnflag = 11;//异常给电气回复11 // //if (boxTaskPorts != null) // //{ // // for (int i = 0; i < boxTaskPorts.Count(); i++) // // { // // if ((boxTaskPorts[i].ToString().Length > 0) && boxPickPort.Contains(boxTaskPorts[i].ToString())) // // { // // returnflag = 12; // // break; // // } // // } // //} // #endregion // break; // default: // //无类型,条码比对或者记录条码 // break; // } // //witemnames[0].Clear(); // //if (devinfo.S7Connection == "@localserver") // //{ // // witemnames[0].Append("DB1").Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 0)).Append(",b");//20130510 // //} // //else // //{ // // witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 0)).Append(",b");//20130510 // //} // //wv[0].Clear(); // //wv[0].Append(returnflag); // //sdo = CommModeCreate.CreateSendDeviceOrder(devidx); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, returnflag); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "写条码应答", devidx.ToString(), "写标志" + returnflag.ToString() + "**源条码:" + barcode.ToString().ToUpper()); // dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_Time='{2}', F_BarCode = '{1}',F_ERRORLOG = '{3}' WHERE (F_DeviceIndex = {0})", devidx, barcode.ToString(), DateTime.Now, errorlog)); // } // break; // #endregion // #region 现场触摸屏 // case 22: // #region 立库触摸屏 // if (devicestates[tempdb2addr + 0] != 1) continue; // //申请任务变更 // bcz = 0; // askOrder = devicestates[tempdb2addr + 1];//命令字 // askDevice = (devicestates[tempdb2addr + 2] << 8) + devicestates[tempdb2addr + 3];//设备索引 // taskindex = (devicestates[tempdb2addr + 4] << 8) + devicestates[tempdb2addr + 5];//任务号 // askDevinfo = Model.CGetInfo.GetDeviceInfo(askDevice); // if (askDevinfo == null) // { // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("37"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 37); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", devidx.ToString(), "37申请的设备号不存在"); // break; // } // barcode.Clear(); // for (int j = 6; j < 13; j++) // { // bcz = bcz + devicestates[tempdb2addr + j]; // barcode.Append(Convert.ToChar(devicestates[tempdb2addr + j]).ToString().ToUpper()); // } // states = new int[13]; // Array.Copy(devicestates, tempdb2addr, states, 0, 13); // if (IsEquals(devinfo.ReturnMessage, states, 13) == false) // { // devinfo.ReturnMessage = states; // Model.CGetInfo.SetDeviceMessage(devinfo); // sss.Remove(0, sss.Length); // sss.Append("**触摸屏设备索引" + devidx).Append("**命令字" + askOrder) // .Append("**申请的设备索引" + askDevice).Append("**申请的任务号" + taskindex).Append("**申请的条码" + barcode); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到现场控制触摸屏申请信息", devidx.ToString(), sss.ToString()); // } // #region 申请重发当前设备指令(1) // if (askOrder == 1)//命令字 // { // if (taskindex == 0)//无任务号 // { // if (bcz == 0)//无条码号 // { // //32申请的任务号和条形码都不存在 // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("32"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 32); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", devidx.ToString(), "32申请的任务号和条形码都不存在"); // break; // } // else//有条码号 // { // #region 有条码号 // if (askDevinfo.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 // { // 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 // dvPLCASK = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvPLCASK.Count > 0) // { // if (askDevinfo.UseCommonDB == "1") // { // //20090915 // sql.Remove(0, sql.Length); // sql.Append("update T_Monitor_Task set F_AheadDetect='',F_DeviceIndex=").Append(askDevice).Append(" where F_MonitorIndex=").Append(dvPLCASK[0]["F_MonitorIndex"]).Append(""); // dbo.ExceSQL(sql.ToString()); // } // ResetSendorder(askDevice, Convert.ToInt32(dvPLCASK[0]["F_MonitorIndex"]), GetRouteIDsub(askDevice), Convert.ToInt32(dvPLCASK[0]["F_NumParam4"])); // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("4"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 4); // } // else // { // //35申请的设备号和条形码不匹配 // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("35"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 35); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", devidx.ToString(), "35申请的设备号和条形码不匹配"); // break; // } // #endregion // } // } // else//有任务号 // { // #region 有任务号 // if (askDevinfo.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( // taskindex).Append("' order by F_MonitorIndex asc"); // } // else // { // 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( // taskindex).Append("' order by F_MonitorIndex asc"); // } // //20101008 // dvPLCASK = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvPLCASK.Count > 0) // { // if (askDevinfo.UseCommonDB == "1") // { // //20090915 // sql.Remove(0, sql.Length); // sql.Append("update T_Monitor_Task set F_AheadDetect='',F_DeviceIndex=").Append(askDevice).Append(" where F_MonitorIndex=").Append(dvPLCASK[0]["F_MonitorIndex"]); // dbo.ExceSQL(sql.ToString()); // } // ResetSendorder(askDevice, taskindex, GetRouteIDsub(askDevice), Convert.ToInt32(dvPLCASK[0]["F_NumParam4"])); // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("4"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 4); // } // else // { // //36申请的设备号和任务号不匹配 // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("36"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 36); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", devidx.ToString(), "36申请的设备号和任务号不匹配"); // break; // } // #endregion // } // } // #endregion // #region 申请修改当前设备所执行任务目标位置(2) // else if (askOrder == 2)//命令字 // { // break; // } // #endregion // #region 上报完成(3) // else if (askOrder == 3)//命令字 // { // if (taskindex == 0)//无任务号 // { // if (bcz == 0)//无条码号 // { // //32申请的任务号和条形码都不存在 // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("32"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 32); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", devidx.ToString(), "32申请的任务号和条形码都不存在"); // break; // } // 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"); // dvPLCASK = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvPLCASK.Count > 0) // { // AssociateComplete(askDevice, Convert.ToInt32(dvPLCASK[0]["F_MonitorIndex"])); // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("2"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 2); // } // else // { // //30申请的条码号不存在 // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("30"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 30); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", devidx.ToString(), "30申请的条码号不存在"); // break; // } // #endregion // } // } // 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_MonitorIndex = '").Append( // taskindex).Append("' order by F_MonitorIndex asc"); // dvPLCASK = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvPLCASK.Count > 0) // { // AssociateComplete(askDevice, Convert.ToInt32(dvPLCASK[0]["F_MonitorIndex"])); // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("2"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 2); // } // else // { // //31申请的任务号不存在 // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("31"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 31); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", devidx.ToString(), "31申请的任务号不存在"); // break; // } // #endregion // } // } // #endregion // #region 删除当前设备所执行的任务(4)(托盘拿走) // else if (askOrder == 4)//命令字 // { // if (taskindex == 0)//无任务号 // { // if (bcz == 0)//无条码号 // { // //32申请的任务号和条形码都不存在 // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("32"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 32); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", devidx.ToString(), "32申请的任务号和条形码都不存在"); // break; // } // 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"); // dvPLCASK = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvPLCASK.Count > 0) // { // DeleteDeviceTask(Convert.ToInt32(dvPLCASK[0]["F_MonitorIndex"])); // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("3"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 3); // } // else // { // //30申请的条码号不存在 // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("30"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 30); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", devidx.ToString(), "30申请的条码号不存在"); // break; // } // #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( // taskindex).Append("' order by F_MonitorIndex asc"); // dvPLCASK = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvPLCASK.Count > 0) // { // DeleteDeviceTask(Convert.ToInt32(dvPLCASK[0]["F_MonitorIndex"])); // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("3"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 3); // } // else // { // //31申请的任务号不存在 // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("31"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 31); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", devidx.ToString(), "31申请的任务号不存在"); // break; // } // #endregion // } // } // #endregion // break; // #endregion // case 32: // #region 高端触摸屏 // if (devicestates[tempdb2addr + 0] != 1) continue; // //20120207申请任务变更 // bcz = 0; // askOrder = devicestates[tempdb2addr + 1];//命令字 // askDevice = (devicestates[tempdb2addr + 2] << 32) + (devicestates[tempdb2addr + 3] << 16) + (devicestates[tempdb2addr + 4] << 8) + devicestates[tempdb2addr + 5];//设备索引 // askDevinfo = Model.CGetInfo.GetDeviceInfo(askDevice); // if (askDevinfo == null) // { // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("34"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 34); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", devidx.ToString(), "34申请的设备号不存在"); // break; // } // barcode.Clear(); // for (int j = 8; j <= 13; j++) // { // bcz = bcz + devicestates[tempdb2addr + j]; // barcode.Append(Convert.ToChar(devicestates[tempdb2addr + j]).ToString().ToUpper()); // } // states = new int[14]; // Array.Copy(devicestates, tempdb2addr, states, 0, 12); // if (IsEquals(devinfo.ReturnMessage, states, 14) == false) // { // devinfo.ReturnMessage = states; // Model.CGetInfo.SetDeviceMessage(devinfo); // sss.Remove(0, sss.Length); // sss.Append("**触摸屏设备:" + devinfo.DeviceName).Append("**命令字" + askOrder) // .Append("**申请的设备索引" + askDevice).Append("**申请的条码" + barcode); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到现场控制触摸屏申请信息", devidx.ToString(), sss.ToString()); // } // #region 申请重发当前设备指令(1) // if (askOrder == 1)//命令字 // { // if (bcz == 0)//无条码号 // { // //30申请条形码不存在 // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("30"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 30); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", devidx.ToString(), "30申请的条形码不存在"); // break; // } // else//有条码号 // { // #region 有条码号 // int asktaskindex = GetMonitorAskTaskIndexFromBarCode(barcode); // if (asktaskindex > 0) // { // sql.Remove(0, sql.Length); // //20120220F_NumParam1改为askDevice,F_NumParam2改为触摸屏设备的DB1,F_SendFlag=2 // sql.Append("update T_Monitor_Task set F_SendFlag=2,F_Status=0,F_AheadDetect='',F_NumParam1=").Append(askDevice).Append(",F_NumParam2=").Append(devinfo.Dbw1Address).Append(" where F_MonitorIndex=").Append(asktaskindex).Append(""); // dbo.ExceSQL(sql.ToString()); // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("4"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 4); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", devidx.ToString(), "4申请重发应答"); // } // else // { // //33申请的设备号和条形码不匹配 // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("33"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 33); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", devidx.ToString(), "33申请的设备号和条形码不匹配"); // break; // } // #endregion // } // } // #endregion // #region 上报完成(3) // else if (askOrder == 3)//命令字 // { // if (bcz == 0)//无条码号 // { // //30申请的条形码不存在 // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("30"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 30); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", devidx.ToString(), "30申请的条形码不存在"); // break; // } // else//有条码号 // { // #region 有条码号 // int asktaskindex = GetMonitorAskTaskIndexFromBarCode(barcode); // if (asktaskindex > 0) // { // AssociateComplete(askDevice, asktaskindex); // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("2"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 2); // } // else // { // //33申请的条码号不存在 // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("33"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 33); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", devidx.ToString(), "33申请的设备号和条码号不匹配"); // break; // } // #endregion // } // } // #endregion // break; // #endregion // #endregion // #region 高端设备 // case 31://工位输送机 // barcode.Remove(0, barcode.Length); // for (int i = 2; i <= 7; i++) // { // barcode.Append(Convert.ToChar(devicestates[tempdb2addr + i])); // } // #region 判断是否满足条码的正则表达式 // if (ccf.GetCodeCheck(barcode.ToString()) == false) continue; // #endregion // taskindex = GetMonitorRunTaskIndexFromBarCode(barcode); // states = new int[8]; // Array.Copy(devicestates, tempdb2addr, states, 0, 8); // if (IsEquals(devinfo.ReturnMessage, states, 8) == false) // { // devinfo.ReturnMessage = states; // Model.CGetInfo.SetDeviceMessage(devinfo); // sss.Remove(0, sss.Length); // sss.Append("**条码:").Append(barcode).Append("**读标志" + devicestates[tempdb2addr + 0]).Append("**状态" + state).Append("**任务号" + taskindex); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到输送机机状态", devidx.ToString(), sss.ToString()); // } // //if (devicestates[tempdb2addr + 0] != 1) continue; // if ((state <= 1) || (taskindex <= 0)) // { // continue; // } // //int order = 0; // //string datetime = GetMonitorTaskStartTime(taskindex,out order ); // //if ((datetime != "-") && (order==6)) // //{ // // if (Convert.ToDateTime(datetime.Substring(0, 19)).AddSeconds(8) > DateTime.Now) // // {//20120328 // // break; // // } // //} // if (state == 2) // {//20120405complete // AddBatchReponse("DB1", GetMonitorTaskIndexFromBarCode(barcode, devinfo), devidx, state); // cgs.GetKindDeviceState(GetMonitorTaskIndexFromBarCode(barcode, devinfo), devidx, state); // } // else // {//20120405error // AddBatchReponse("DB1", taskindex, devidx, state); // cgs.GetKindDeviceState(taskindex, devidx, state); // } // break; // #endregion // #region 申请托盘出库(电气申请)//20130510 // case 35: // //没有到出库口任务就向管理申请 // if (states[0] == 1) // { // sql.Remove(0, sql.Length); // sql.Append("SELECT F_WareHouse,F_ManageAskkind,F_DeviceIndex, F_Askkind, F_BindingDevice FROM T_Base_PLC_Ask WHERE (F_DeviceIndex = ").Append(devidx).Append(")"); // dvPLCASK = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; // if (dvPLCASK.Count > 0) // { // StringBuilder warehouse = new StringBuilder(dvPLCASK[0]["F_WareHouse"].ToString()); // int apptype = Convert.ToInt32(dvPLCASK[0]["F_ManageAskkind"]);//20130510 // int dcode = Convert.ToInt32(dvPLCASK[0]["F_BindingDevice"]); // bool IfExit = false; // dvbc = dboMan.ExceSQL(string.Format("SELECT DEVICE_CODE FROM IO_CONTROL_APPLY WHERE APPLY_TASK_STATUS<2 and DEVICE_CODE='{0}' ", dcode.ToString())).Tables[0].DefaultView; // if (dvbc.Count > 0) // { // IfExit = true; // } // dvbc = dboMan.ExceSQL(string.Format("select CONTROL_ID from IO_CONTROL where END_DEVICE_CODE = '{0}'", dcode)).Tables[0].DefaultView; // if (dvbc.Count > 0) // { // IfExit = true; // } // dvbc = dbo.ExceSQL(string.Format("select fid from T_Manage_Task where FENDDEVICE = '{0}'", dcode)).Tables[0].DefaultView; // if (dvbc.Count > 0) // { // IfExit = true; // } // if (IfExit == false) // { // int appid = dboMan.GetManageTableIndex("IO_CONTROL_APPLY", true);//CONTROL_APPLY_ID // string dtime = DateTime.Now.ToString("u"); // dtime = dtime.Substring(0, dtime.Length - 1); // sql.Remove(0, sql.Length); // sql.Append("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_ID,CONTROL_APPLY_TYPE, WAREHOUSE_CODE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK)VALUES ").Append( // "(").Append(appid).Append(",").Append(apptype).Append(",'").Append(warehouse.ToString()).Append("','").Append(dcode).Append("','',0,'").Append(dtime).Append("','')"); // try // { // dboMan.ExceSQL(sql.ToString()); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "申请托盘出库", devidx.ToString(), dcode.ToString().ToUpper()); // } // catch (Exception ex) // { // RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.申请托盘出库时" + ex.StackTrace + ex.Message); // OnRefreshMonitor(rmea); // errtext = "SControlMonitor.申请托盘出库时" + ex.StackTrace; // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("2"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 2); // continue; // } // } // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("2"); // //sdo.WriteDBData(witemnames, wv); // } // } // break; // #endregion // #region 接收称重信息//20130510 // case 8: // if (devicestates[tempdb2addr + 0] != 1) continue; // //F_BoxBarcode // StringBuilder weight = new StringBuilder(""); // weight.Append(Convert.ToChar(devicestates[tempdb2addr + 4])); // weight.Append(Convert.ToChar(devicestates[tempdb2addr + 3])); // weight.Append(Convert.ToChar(devicestates[tempdb2addr + 2])); // weight.Append(Convert.ToChar(devicestates[tempdb2addr + 1])); // weight.Append("."); // weight.Append(Convert.ToChar(devicestates[tempdb2addr + 5]));//小数部分 // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "接收称重信息", devidx.ToString(), "重量:" + weight.ToString()); // //向管理写入重量 // int mpindex = ccf.GetMonitorTaskIndexFromSendedDevice(devidx); // int manfid = ccf.GetManageTaskIndexFromMonitor(mpindex); // int manKind = ccf.GetManageTaskKindIndexFromMonitor(mpindex); // if (manKind == 1) // { // dboMan.ExecuteSql(string.Format("UPDATE IO_CONTROL SET CONTROL_REMARK ={0} WHERE CONTROL_ID={1}", weight.ToString(), manfid)); // } // if (weight.ToString() != "0000.0") // { // cgs.ActionComplete(devidx, mpindex, 0); // //dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_BoxBarcode = '{1}' WHERE (F_DeviceIndex = {0}) and F_BoxBarcode!='{1}'", devidx, weight.ToString())); // //witemnames[0].Clear(); // //witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 0)).Append(",b");//20130510 // //wv[0].Clear(); // //wv[0].Append("2"); // //sdo = CommModeCreate.CreateSendDeviceOrder(devidx); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 2); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "写称重应答", devidx.ToString(), "写标志2**称重信息:" + weight.ToString().ToUpper()); // } // break; // #endregion // //richard.liu20230718 // #region 检尺申请入库任务 // case 37: // if (devicestates[tempdb2addr + 0] != 1) continue; // dvPLCASK = dbo.ExceSQL(string.Format("select F_Time, F_PalletBarcodeLength,F_PalletBarcodeReservedLength,F_BarcodeReservedLength,F_WareHouse,F_ManageAskkind,F_BarcodeForkAmount,F_BarcodeLength,F_BindingDevice,F_Askkind,F_Remark from T_Base_PLC_Ask WHERE (F_DeviceIndex = {0}) ", devidx)).Tables[0].DefaultView; // if (dvPLCASK.Count > 0) // { // StringBuilder warehouse = new StringBuilder(dvPLCASK[0]["F_WareHouse"].ToString()); // int dcode = Convert.ToInt32(dvPLCASK[0]["F_BindingDevice"]); // int apptype = Convert.ToInt32(dvPLCASK[0]["F_ManageAskkind"]);//20130510 // string dtime = DateTime.Now.ToString("u"); // dtime = dtime.Substring(0, dtime.Length - 1); // DateTime appdt = new DateTime(); // if (dvPLCASK[0]["F_Time"] == DBNull.Value) // { // appdt = DateTime.Now.AddSeconds(-10); // } // else // { // DateTime.TryParse(dvPLCASK[0]["F_Time"].ToString(), out appdt); // } // if (dvPLCASK[0]["F_BarCode"] != DBNull.Value) // { // if ((appdt.AddSeconds(15) > DateTime.Now) && (dvPLCASK[0]["F_BarCode"].ToString() == barcode.ToString())) // { // dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_BarCode = '{1}',F_Time='{2}' WHERE (F_DeviceIndex = {0}) ", devidx, barcode.ToString(), DateTime.Now)); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "PLC重复上报检尺信息:", devidx.ToString(), ",站台:" + dcode + ",检尺:" + barcode.ToString().ToUpper()); // break; // } // } // sql.Remove(0, sql.Length); // sql.Append("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_TYPE, WAREHOUSE_CODE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,CONTROL_APPLY_PARAMETER)VALUES ").Append( // "(").Append(apptype).Append(",'").Append(warehouse.ToString()).Append("','").Append(dcode).Append("','',0,'").Append(dtime).Append("','',").Append(devicestates[tempdb2addr + 1]).Append(")"); // try // { // dboMan.ExceSQL(sql.ToString()); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "检尺申请入库", devidx.ToString(), ";站台:" + dcode.ToString().ToUpper() + "检尺高度:" + devicestates[tempdb2addr + 1].ToString()); // //witemnames[0].Clear(); // //witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 0)).Append(",b");//20130510 // //wv[0].Clear(); // //wv[0].Append("2"); // //sdo = CommModeCreate.CreateSendDeviceOrder(devidx); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 2); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "写检尺应答", devidx.ToString(), "写标志2**检尺高度:" + devicestates[tempdb2addr + 1].ToString() + ";" + witemnames[0].ToString()); // dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_Time='{2}', F_BarCode = '{1}' WHERE (F_DeviceIndex = {0}) and F_BarCode!='{1}'", devidx, barcode.ToString(), DateTime.Now)); // } // catch (Exception ex) // { // RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.申请托盘出库时" + ex.StackTrace + ex.Message); // OnRefreshMonitor(rmea); // errtext = "SControlMonitor.检尺申请入库时" + ex.StackTrace; // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("2"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 2); // continue; // } // } // break; // #endregion // #region 拆叠盘机申请出入库对应设备 // case 38: // if (devicestates[tempdb2addr + 0] != 1) continue; // //0字节代表命令字:1表示PLC上报,2表示PC应答 // //1字节:1申请入库;2申请出库 // dvPLCASK = dbo.ExceSQL(string.Format("select F_Time, F_PalletBarcodeLength,F_PalletBarcodeReservedLength,F_BarcodeReservedLength,F_WareHouse,F_ManageAskkind,F_BarcodeForkAmount,F_BarcodeLength,F_BindingDevice,F_Askkind,F_Remark from T_Base_PLC_Ask WHERE (F_DeviceIndex = {0}) ", devidx)).Tables[0].DefaultView; // if (dvPLCASK.Count > 0) // { // StringBuilder warehouse = new StringBuilder(dvPLCASK[0]["F_WareHouse"].ToString()); // int dcode = Convert.ToInt32(dvPLCASK[0]["F_BindingDevice"]); // int apptype = devicestates[tempdb2addr + 1];// Convert.ToInt32(dvPLCASK[0]["F_ManageAskkind"]) == 1 ? 2 : 1;//入库模式1写2出托盘,出库模式2写1入托盘 // string dtime = DateTime.Now.ToString("u"); // dtime = dtime.Substring(0, dtime.Length - 1); // bool IfExit = false; // string mandevice; // string mondevice; // if (apptype == 1) // { // mandevice = "START_DEVICE_CODE"; // mondevice = "FSTARTDEVICE"; // } // else if (apptype == 2) // { // mandevice = "END_DEVICE_CODE"; // mondevice = "FENDDEVICE"; // } // else // { // errtext = "SControlMonitor.DealWithDeviceState拆叠盘机申请出入库时PLC上报出入库任务类型不是1也不是2"; // continue; // } // dvbc = dboMan.ExceSQL(string.Format("SELECT DEVICE_CODE FROM IO_CONTROL_APPLY WHERE APPLY_TASK_STATUS<2 and DEVICE_CODE='{0}' ", dcode.ToString())).Tables[0].DefaultView; // if (dvbc.Count > 0) // { // IfExit = true; // } // dvbc = dboMan.ExceSQL(string.Format("select CONTROL_ID from IO_CONTROL where {1} = '{0}'", dcode, mandevice)).Tables[0].DefaultView; // if (dvbc.Count > 0) // { // IfExit = true; // } // dvbc = dbo.ExceSQL(string.Format("select fid from T_Manage_Task where {1} = '{0}'", dcode, mondevice)).Tables[0].DefaultView; // if (dvbc.Count > 0) // { // IfExit = true; // } // if (IfExit == false) // { // sql.Remove(0, sql.Length); // sql.Append("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_TYPE, WAREHOUSE_CODE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,CONTROL_APPLY_PARAMETER)VALUES ").Append( // "(").Append(apptype).Append(",'").Append(warehouse.ToString()).Append("','").Append(dcode).Append("','',0,'").Append(dtime).Append("','',").Append(devicestates[tempdb2addr + 1]).Append(")"); // try // { // dboMan.ExceSQL(sql.ToString()); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "拆叠盘机申请出入库", devidx.ToString(), ";站台:" + dcode.ToString().ToUpper() + "出入库任务类型:" + devicestates[tempdb2addr + 1].ToString()); // //witemnames[0].Clear(); // //witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 0)).Append(",b");//20130510 // //wv[0].Clear(); // //wv[0].Append("2"); // //sdo = CommModeCreate.CreateSendDeviceOrder(devidx); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 2); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "写拆叠盘机申请出入库应答", devidx.ToString(), "写标志2**出入库任务类型:" + devicestates[tempdb2addr + 1].ToString() + ";" + witemnames[0].ToString()); // dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_Time='{2}', F_BarCode = '{1}' WHERE (F_DeviceIndex = {0}) and F_BarCode!='{1}'", devidx, barcode.ToString(), DateTime.Now)); // } // catch (Exception ex) // { // RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.申请托盘出库时" + ex.StackTrace + ex.Message); // OnRefreshMonitor(rmea); // errtext = "SControlMonitor.DealWithDeviceState拆叠盘机申请出入库时" + ex.StackTrace; // //wv[0].Remove(0, wv[0].Length); // //wv[0].Append("2"); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // AddBatchReponse("DB2", 0, devidx, 2); // continue; // } // } // } // break; // #endregion // #region 出入库方向电气申请变更 // case 39: // if (devicestates[tempdb2addr + 0] != 1) continue; // break; // #endregion // #region 鸿安环穿主站 // case 13: // if (devicestates[tempdb2addr + 0] != 1) continue; // taskindex = devicestates[tempdb2addr + 4] << 8 + devicestates[tempdb2addr + 5]; // #region 心跳反馈和判断,把电气值+1 // int xt = devicestates[tempdb2addr + 0] << 8 + devicestates[tempdb2addr + 1] + 1; // //witemnames[0].Clear(); // //witemnames[0].Append(Model.CGeneralFunction.DBSend).Append(".").Append(Convert.ToString(devinfo.Dbw1Address + 0)).Append(",i");//20130510 // //wv[0].Clear(); // //wv[0].Append(xt); // //sdo = CommModeCreate.CreateSendDeviceOrder(devidx); // //sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); // //发送心跳 // AddBatchReponse("DB1", 0, devidx, xt); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "环穿主站心跳", devidx.ToString(), xt.ToString()); // #endregion // if (IsEquals(devinfo.ReturnMessage, states, 12) == false) // { // //根据环穿主站反馈任务号解锁环穿主站 // sql.Remove(0, sql.Length); // sql.Append("update T_Base_device set F_LockedState=").Append(taskindex).Append( // " where F_DeviceIndex=").Append(devinfo.DeviceIndex); // dbo.ExceSQL(sql.ToString()); // #region 更新主站故障报警状态 // int ies = devicestates[tempdb2addr + 6] << 8 + devicestates[tempdb2addr + 7]; // int isd = devicestates[tempdb2addr + 8] << 8 + devicestates[tempdb2addr + 9]; // int islg = devicestates[tempdb2addr + 10] << 8 + devicestates[tempdb2addr + 11]; // for (int hi = 0; hi <= 15; hi++) // { // devinfo.EmergencyStop[hi] = (ies & Convert.ToInt16(Math.Pow(2, hi))) == Math.Pow(2, hi); // devinfo.SafetyDoor[hi] = (isd & Convert.ToInt16(Math.Pow(2, hi))) == Math.Pow(2, hi); // devinfo.SafetyLightGrid[hi] = (islg & Convert.ToInt16(Math.Pow(2, hi))) == Math.Pow(2, hi); // } // #endregion // bc = GetBarcodeFromMonitorIndex(taskindex); // devinfo.ReturnMessage = states; // Model.CGetInfo.SetDeviceMessage(devinfo); // sss.Remove(0, sss.Length); // sss.Append("**条码:").Append(bc).Append("**读标志" + devicestates[tempdb2addr + 0]).Append("**状态" + state).Append("**任务号" + taskindex) // .Append("**列坐标" + xc); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到环穿主站状态", devidx.ToString(), sss.ToString()); // if (devicestates[tempdb2addr + 0] != 1) continue; // if ((state <= 0) || (taskindex <= 0)) // { // continue; // } // //不需要回复数据AddBatchReponse("DB1", taskindex, devidx, state); // cgs.GetKindDeviceState(taskindex, devidx, devicestates[tempdb2addr + 3]); // } // break; // #endregion // #region 鸿安环形穿梭车RGV // case 14: // if (devicestates[tempdb2addr + 0] != 1) continue; // #region 更新环形穿梭车光电开关状态 // devinfo.SplitByte_0 = (devicestates[tempdb2addr + 8] & 1) == 1 ? 1 : 0; // devinfo.SplitByte_1 = (devicestates[tempdb2addr + 8] & 2) == 2 ? 1 : 0; // devinfo.SplitByte_2 = (devicestates[tempdb2addr + 8] & 4) == 4 ? 1 : 0; // devinfo.SplitByte_3 = (devicestates[tempdb2addr + 8] & 8) == 8 ? 1 : 0; // devinfo.SplitByte_4 = (devicestates[tempdb2addr + 8] & 16) == 16 ? 1 : 0; // devinfo.SplitByte_5 = (devicestates[tempdb2addr + 8] & 32) == 32 ? 1 : 0; // devinfo.SplitByte_6 = (devicestates[tempdb2addr + 8] & 64) == 64 ? 1 : 0; // devinfo.SplitByte_7 = (devicestates[tempdb2addr + 8] & 128) == 128 ? 1 : 0; // #endregion // Model.CGetInfo.SetDeviceInfo(devinfo); // if (IsEquals(devinfo.ReturnMessage, states, 4) == false) // { // bc = GetBarcodeFromMonitorIndex(taskindex); // xc = devicestates[tempdb2addr + 7] + (devicestates[tempdb2addr + 6] << 8) + (devicestates[tempdb2addr + 5] << 16) + (devicestates[tempdb2addr + 4] << 32);//X坐标 // devinfo.ReturnMessage = states; // Model.CGetInfo.SetDeviceMessage(devinfo); // sss.Remove(0, sss.Length); // sss.Append("**条码:").Append(bc).Append("**读标志" + devicestates[tempdb2addr + 0]).Append("**状态" + state).Append("**任务号" + taskindex) // .Append("**列坐标" + xc); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到环穿RGV状态", devidx.ToString(), sss.ToString()); // if (devicestates[tempdb2addr + 0] != 1) continue; // if ((state <= 0) || (taskindex <= 0)) // { // continue; // } // AddBatchReponse("DB1", taskindex, devidx, state); // cgs.GetKindDeviceState(taskindex, devidx, state); // } // break; // #endregion // } // #endregion // } // #region 一个订阅组内设备按订阅ID deviceindex一批发送应答20230811richard.liu // StringBuilder[] itmenames = new StringBuilder[OpcSubsTagCount[deviceindex.ToString()]]; // StringBuilder[] itmevalues = new StringBuilder[OpcSubsTagCount[deviceindex.ToString()]]; // int devindexone = 0; int deviceTagCount = 0; // if (OPCItemNamesDicInfo.Count > 0) // { // foreach (int devidx in OPCItemNamesDicInfo[deviceindex.ToString()].Keys) // { // devindexone = devidx; // Array.Copy(OPCItemNamesDicInfo[deviceindex.ToString()][devidx], 0, itmenames, deviceTagCount, OPCItemNamesDicInfo[deviceindex.ToString()][devidx].Length); // Array.Copy(OPCItemValuesDicInfo[deviceindex.ToString()][devidx], 0, itmevalues, deviceTagCount, OPCItemValuesDicInfo[deviceindex.ToString()][devidx].Length); // deviceTagCount += OPCItemNamesDicInfo[deviceindex.ToString()][devidx].Length; // } // sdo = CommModeCreate.CreateSendDeviceOrder(devindexone); // if (sdo.WriteDBData(itmenames, itmevalues, Model.CGetInfo.GetDeviceInfo(devindexone).S7Connection) == false) // {//S7连接设备发送失败 // if (sdo.CommLayerError != null) // { // RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", sdo.CommLayerError); // OnRefreshMonitor(rmea); // } // } // OPCItemNamesDicInfo.Clear(); // OPCItemValuesDicInfo.Clear(); // } // #endregion // } // #endregion // return true; // } // catch (Exception ex) // { // RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.DealWithDeviceState时" + ex.Message + ex.StackTrace); // OnRefreshMonitor(rmea); // errtext = ex.Message + ex.StackTrace; // return false; // } // finally // { // dvDevice.Dispose(); // dvbc.Dispose(); // dvPLCASK.Dispose(); // } // } } //private void AddBatchReponse(string DBBlock,int taskindex, int devidx, int state) //{//20230811richard.liu周期内按S7连接批量发送,重构CControl.cs,SControlMonitor.cs\DealWithDeviceState;文件夹Communication、Common内通讯CSendDeviceOrder: ISendDeviceOrder相关文件 // StringBuilder[] itemnames=new StringBuilder[0]; StringBuilder[] itemvalues=new StringBuilder[0]; // try // { // devinfo = Model.CGetInfo.GetDeviceInfo(devidx); // int devKind = ccf.GetDeviceKindIdx(devidx); // if (DBBlock == "DB1") // {//根据devidx类型和state判断发送应答 // if (state == 1) // {//运行 // if ((devKind == 1)) //堆垛机 // { // int[] sendmes = new int[10] { 0, 0, 0, devidx, 0, 0, 0, 0, 0, 0 }; // devinfo = Model.CGetInfo.GetDeviceInfo(devidx); // if (CStaticClass.IsEquals(devinfo.SendMessage, sendmes, 10) == false) // { // sdo = CommModeCreate.CreateSendDeviceOrder(devidx); // sdo.SendDeviceOrder(0, 0, 0, devidx, 0, 0, 0, 0, 0, 0, out itemnames, out itemvalues); // } // } // else if (devKind == 4 || devKind == 2) // {//输送机、RGV运行清零 // int[] sendmes = new int[5] { 0, 0, 0, devidx, 0 }; // devinfo = Model.CGetInfo.GetDeviceInfo(devidx); // if (devinfo.IfClearDB1 == "1" && CStaticClass.IsEquals(devinfo.SendMessage, sendmes, 5) == false) // { // sdo = CommModeCreate.CreateSendDeviceOrder(devidx); // sdo.SendDeviceOrder(0, 0, 0, devidx, 0, out itemnames, out itemvalues); // } // } // } // else if (state == 2) // {//完成 // if ((devKind == 1)) //堆垛机 // { // sdo = CommModeCreate.CreateSendDeviceOrder(devidx); // sdo.SendDeviceOrder(2, 0, 0, devidx, 0, 0, 0, 0, 0, 0, out itemnames, out itemvalues); // } // else if (devKind == 14) // {//环穿小车应答任务号richard.liu20230718 // sdo = CommModeCreate.CreateSendDeviceOrder(devidx); // sdo.SendDeviceOrder(2, taskindex, 99, devidx, 0, 0, 0, 0, 0, 0, out itemnames, out itemvalues); // } // else if (devKind == 4 || devKind == 2) // {//输送机、RGV // sdo = CommModeCreate.CreateSendDeviceOrder(devidx); // sdo.SendDeviceOrder(2, 0, 0, devidx, 0, out itemnames, out itemvalues); // } // } // else // {//报警,堆垛机清零去掉残留任务 // if ((devKind == 1)) //堆垛机 // { // int[] sendmes = new int[10] { 0, 0, 0, devidx, 0, 0, 0, 0, 0, 0 }; // if (CStaticClass.IsEquals(devinfo.SendMessage, sendmes, 10) == false) // { // sdo = CommModeCreate.CreateSendDeviceOrder(devidx); // sdo.SendDeviceOrder(0, 0, 0, devidx, 0, 0, 0, 0, 0, 0, out itemnames, out itemvalues); // } // } // } // } // else if (DBBlock == "DB2") // {//按state值发送应答 // itemnames = new StringBuilder[1]; // itemvalues = new StringBuilder[1]; // itemnames[0].Append(DBBlock).Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 0)).Append(",b"); // itemvalues[0].Append(state); // //不需要实际写入,暂存标签数据 // } // else // { // return; // } // //20230811richard.liu暂存标签数据 // AddOPCSendData(devidx,taskindex,itemnames,itemvalues); // } // catch (Exception ex) // { // throw ex; // } //} /// /// 暂存标签数据 /// /// 设备编号 /// 发送指令索引 /// 地址区标签名称数组 /// 标签值数组 //private void AddOPCSendData(int deviceIndex, int sendTaskIndex, StringBuilder[] itemnames, StringBuilder[] itemvalues) //{//20230811richard.liu周期内按S7连接批量发送,重构CControl.cs,SControlMonitor.cs\DealWithDeviceState;文件夹Communication、Common内通讯CSendDeviceOrder: ISendDeviceOrder相关文件 // try // { // devinfo = Model.CGetInfo.GetDeviceInfo(deviceIndex); // if (OPCItemNamesDicInfo.ContainsKey(devinfo.ReadSubscription)) // {//添加OPC订阅组+dic 设备编码+数组 发送数据 // if (OPCItemNamesDicInfo[devinfo.ReadSubscription].ContainsKey(devinfo.DeviceIndex) == false) // { // OpcSubsTagCount[devinfo.ReadSubscription] += itemnames.Length; // OPCItemNamesDicInfo[devinfo.ReadSubscription].Add(devinfo.DeviceIndex, itemnames); // OPCItemValuesDicInfo[devinfo.ReadSubscription].Add(devinfo.DeviceIndex, itemvalues); // } // } // else // { // Dictionary OPCDeviceSendtagNamedic = new Dictionary(); // Dictionary OPCDeviceSendtagValuedic = new Dictionary(); // OPCDeviceSendtagNamedic.Add(devinfo.DeviceIndex, itemnames); // OPCDeviceSendtagValuedic.Add(devinfo.DeviceIndex, itemvalues); // OpcSubsTagCount.Add(devinfo.ReadSubscription, itemnames.Length); // OPCItemNamesDicInfo.Add(devinfo.ReadSubscription, OPCDeviceSendtagNamedic); // OPCItemValuesDicInfo.Add(devinfo.ReadSubscription, OPCDeviceSendtagValuedic); // } // } // catch (Exception ex) // { // throw ex; // } //} void g_manageService_ManageInStorageCheckoutCompleted(object sender, ManageService.ManageInStorageCheckoutCompletedEventArgs e) { CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "管理分道回调返回值:", e.ManageInStorageCheckoutResult.ToString(), ",条码:" + e.sResultBoxBarCode + ",sResult:" + e.sResult); CSendBarcode(16001, e.sResultBoxBarCode, e.ManageInStorageCheckoutResult); } public void FactorizeCallback(IAsyncResult ar) { try { string sResult = string.Empty; string sBoxBarCode = string.Empty; // bool bResult = g_manageService.EndManageInStorageCheckout(out sResult, out sBoxBarCode, ar); //CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "管理分道回调时:", "16001", ",条码:" + sBoxBarCode + ";" + bResult.ToString()); //CSendBarcode(16001, sBoxBarCode, bResult); } catch (Exception ex) { throw ex; } } /// /// 直接向DB区写数据 /// /// /// DB1,DB2 /// 要写入的数据内容 /// public bool WriteDBData(int deviceIndex,string DBBlock,string Wdata,out string errtext) { lock (thisLock) { errtext = string.Empty; try { Model.MDevice md = Model.CGetInfo.GetDeviceInfo(deviceIndex); StringBuilder[] wn = new StringBuilder[6]; StringBuilder[] wv = new StringBuilder[6]; byte[] barbyte = new byte[20]; int length = Wdata.Trim().Length;//20170104 if (length > md.Dbw2Getlength) { length = Convert.ToInt32(md.Dbw2Getlength); } if (DBBlock == "DB2") { wn = new StringBuilder[(int)md.Dbw2Getlength]; wv = new StringBuilder[(int)md.Dbw2Getlength]; for (int i = 0; i < (int)md.Dbw2Getlength; i++) { wn[i] = new StringBuilder(DBBlock + "." + Convert.ToInt32(md.Dbw2Address + i).ToString()).Append(",b"); wv[i] = new StringBuilder("0"); } barbyte = ASCIIEncoding.ASCII.GetBytes(Wdata); wv[0] = new StringBuilder("1"); wv[1] = new StringBuilder(Wdata[index: 0].ToString()); for (int i = 2; i <= length; i++)//20170104 { wv[i] = new StringBuilder(barbyte[i - 1].ToString()); } } else if (DBBlock == "DB1") { char[] cc = new char[1] { ',' }; string[] wd = Wdata.Split(cc); wn = new StringBuilder[(int)md.Dbw1SendLength]; wv = new StringBuilder[(int)md.Dbw1SendLength];//17,0,1/2 switch (md.DeviceKind) { case 39://出入库方向切换设备 wn[0] = new StringBuilder(DBBlock + "." + Convert.ToInt32(md.Dbw1Address).ToString()).Append(",b"); wv[0] = new StringBuilder(Wdata.ToString()); break; default: for (int i = 0; i < (int)md.Dbw1SendLength; i++) { wn[i] = new StringBuilder(DBBlock + "." + Convert.ToInt32(md.Dbw1Address + i).ToString()).Append(",b"); } barbyte = ASCIIEncoding.ASCII.GetBytes(wd[0]); for (int i = 0; i <= 16; i++) { wv[i] = new StringBuilder(barbyte[i].ToString()); } wv[17] = new StringBuilder("0"); wv[18] = new StringBuilder(wd[1]); break; } } else if (DBBlock == "DB14") { wn = new StringBuilder[(int)md.Dbw1SendLength]; wv = new StringBuilder[(int)md.Dbw1SendLength]; wn[0] = new StringBuilder(DBBlock + "." + md.Dbw1Address.ToString()).Append(",b"); wv[0] = new StringBuilder(Wdata); } else { return false; } sdo = CommModeCreate.CreateSendDeviceOrder(deviceIndex); if (sdo.WriteDBData(wn, wv, md.S7Connection) == true) { CommonClassLib.CCarryConvert.WriteDarkCasket("SControlMonitor", "WriteDBData:", deviceIndex.ToString(), md.S7Connection + ";" + DBBlock + md.Dbw1Address.ToString() + ";" + Wdata); } else { errtext = sdo.CommLayerError; return false; } return true; } catch (Exception ex) { errtext = ex.StackTrace + ex.Message; return false; } } } public bool WriteResponseData(int deviceIndex, string DBBlock, string Wdata, out string errtext) { errtext = string.Empty; try { Model.MDevice md = Model.CGetInfo.GetDeviceInfo(deviceIndex); StringBuilder[] wn = new StringBuilder[md.Dbw1SendLength]; StringBuilder[] wv = new StringBuilder[md.Dbw1SendLength]; if (md.DeviceKind == 14) {//环穿小车完成应答回复任务号 wn = new StringBuilder[1]; wv = new StringBuilder[1]; wn[0] = new StringBuilder(DBBlock + "." + Convert.ToInt32(md.Dbw1Address).ToString()).Append(",i"); wv[0] = new StringBuilder(md.TaskNo.ToString()); Wdata = md.TaskNo.ToString(); } else {//其他设备回复只0字节,其它字节都是0 wn = new StringBuilder[1]; wv = new StringBuilder[1]; wn[0] = new StringBuilder(DBBlock + "." + Convert.ToInt32(md.Dbw1Address).ToString()).Append(",b"); wv[0] = new StringBuilder(Wdata.ToString()); //for (int i = 0; i < md.Dbw1SendLength; i++) //{ // if (i == 0) // { // wn[0] = new StringBuilder(DBBlock + "." + Convert.ToInt32(md.Dbw1Address).ToString()).Append(",b"); // wv[0] = new StringBuilder(Wdata.ToString()); // continue; // } // else // { // wn[i] = new StringBuilder(DBBlock + "." + Convert.ToInt32(md.Dbw1Address + i).ToString()).Append(",b"); // wv[i] = new StringBuilder("0"); // } //} } sdo = CommModeCreate.CreateSendDeviceOrder(deviceIndex); if (sdo.WriteDBData(wn, wv, md.S7Connection) == true) { CommonClassLib.CCarryConvert.WriteDarkCasket("SControlMonitor", "发送应答:", deviceIndex.ToString(), md.S7Connection + ";" + DBBlock + "." + md.Dbw1Address.ToString() + "值" + Wdata); } else { errtext = sdo.CommLayerError; return false; } return true; } catch (Exception ex) { errtext = ex.StackTrace + ex.Message; return false; } } #region 主线程执行指定委托 public void DealBatchSendData(object sender, CSendDeviceOrderEventArgs e) { lock (thisLock) { int[] devinf = e.DeviceArray; int[] sendd = e.SendDataArray; Model.MDevice mDevice = null; Dictionary _opcSubsTagCount = new Dictionary(); Dictionary> _opcItemNamesDicInfo = new Dictionary>(); Dictionary> _opcItemValuesDicInfo = new Dictionary>(); try { int i= 0; StringBuilder[] itemnames=new StringBuilder[1] {new StringBuilder() }; StringBuilder[] itemvalues= new StringBuilder[1] { new StringBuilder() }; foreach (int dev in devinf) { mDevice=Model.CGetInfo.GetDeviceInfo(dev); if (mDevice.DeviceKind == 39) {//输送机出入库方向切换对应设备 itemnames=new StringBuilder[1]; itemvalues=new StringBuilder[1]; itemnames[0] = new StringBuilder(Model.CGeneralFunction.DBSend + "." + Convert.ToInt32(mDevice.Dbw1Address).ToString()).Append(",b"); itemvalues[0] = new StringBuilder(sendd[i].ToString()); } if (_opcItemNamesDicInfo.ContainsKey(mDevice.S7Connection)) {//添加OPC订阅组+dic 设备编码+数组 发送数据 if (_opcItemNamesDicInfo[mDevice.S7Connection].ContainsKey(mDevice.DeviceIndex) == false) { _opcSubsTagCount[mDevice.S7Connection] += itemnames.Length; _opcItemNamesDicInfo[mDevice.S7Connection].Add(mDevice.DeviceIndex, itemnames); _opcItemValuesDicInfo[mDevice.S7Connection].Add(mDevice.DeviceIndex, itemvalues); } } else { Dictionary OPCDeviceSendtagNamedic = new Dictionary(); Dictionary OPCDeviceSendtagValuedic = new Dictionary(); OPCDeviceSendtagNamedic.Add(mDevice.DeviceIndex, itemnames); OPCDeviceSendtagValuedic.Add(mDevice.DeviceIndex, itemvalues); _opcSubsTagCount.Add(mDevice.S7Connection, itemnames.Length); _opcItemNamesDicInfo.Add(mDevice.S7Connection, OPCDeviceSendtagNamedic); _opcItemValuesDicInfo.Add(mDevice.S7Connection, OPCDeviceSendtagValuedic); } i++; } #region 按S7通讯连接发送批量数据20230811richard.liu StringBuilder[] writenames = new StringBuilder[0]; StringBuilder[] writevalues = new StringBuilder[0]; foreach (string s7conn in _opcItemNamesDicInfo.Keys) { if (_opcSubsTagCount[s7conn] == 0) continue; writenames = new StringBuilder[_opcSubsTagCount[s7conn]]; writevalues = new StringBuilder[_opcSubsTagCount[s7conn]]; int deviceTagCount = 0; int devindexone = 0; foreach (int devidx in _opcItemNamesDicInfo[s7conn].Keys) { devindexone = devidx; Array.Copy(_opcItemNamesDicInfo[s7conn][devidx], 0, writenames, deviceTagCount, _opcItemNamesDicInfo[s7conn][devidx].Length); Array.Copy(_opcItemValuesDicInfo[s7conn][devidx], 0, writevalues, deviceTagCount, _opcItemValuesDicInfo[s7conn][devidx].Length); deviceTagCount += _opcItemNamesDicInfo[s7conn][devidx].Length; } sdo = CommModeCreate.CreateSendDeviceOrder(devindexone); if (sdo.WriteDBData(writenames, writevalues, s7conn) == false ) {//S7连接设备发送失败 if (sdo.CommLayerError != null) { RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", sdo.CommLayerError); OnRefreshMonitor(rmea); } } } _opcItemNamesDicInfo.Clear(); _opcItemValuesDicInfo.Clear(); _opcSubsTagCount.Clear(); #endregion } catch (Exception ex) { RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.DealBatchSendData" + ex.Message + ex.StackTrace); OnRefreshMonitor(rmea); return; } } } public void DealSqlEXE_UpdateDB(object sender, CUpdateDBChangeEventArgs e) { lock (thisLock) { try { dbo1 = e.Dbo; if (e.ExeSQL.Length>0) { dbo1.ExecuteSql(e.ExeSQL.ToString()); } if (e.ExeSQLArray.Length > 0) { for(int i =0; i 0) { if (e.DBFactoryArray[i].ToString() == "DBFactory") { try { dbo.ExecuteSql(e.ExeSQLArray[i].ToString()); CObtainTask.dealwithHash("remove", e.ExeSQLArray[i].ToString());//解决委托积压问题20240726边智 } catch { CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "异常", e.ExeSQLArray[i].ToString(), "异常"); } //dbo.ExecuteSql(e.ExeSQLArray[i].ToString()); } else if (e.DBFactoryArray[i].ToString() =="ManDBFactory") { try { dboMan.ExecuteSql(e.ExeSQLArray[i].ToString()); CObtainTask.dealwithHash("remove", e.ExeSQLArray[i].ToString());//解决委托积压问题20240726边智 } catch { CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "异常", e.ExeSQLArray[i].ToString(), "异常"); } //dboMan.ExecuteSql(e.ExeSQLArray[i].ToString()); } } } } } catch (Exception ex) { RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.DealSqlEXE_UpdateDB" + ex.Message + ex.StackTrace); OnRefreshMonitor(rmea); return; } } } /// /// 20120616相应CListenAGV线程的数据库更新事件 /// /// /// public void DealWithListenAGVState_UpdateDB(object sender, CUpdateDBChangeEventArgs e) { lock (thisLock) { try { if (e.Taskindex > 0) { cgs.ActionComplete(e.Deviceindex, e.Taskindex, e.Taskstate); } else { dbo1 = e.Dbo; dbo1.ExecuteSql(e.ExeSQL.ToString()); } } catch (Exception ex) { RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.CListenAGVState_UpdateDB时" + ex.Message + ex.StackTrace); OnRefreshMonitor(rmea); return; } } } public void DealWithWriteDarkCasket(object sender, CWriteDarkCasketEventArgs e) {//20121108 lock (thisLock) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < e.Wrinfo.GetLength(0); i++) { sb.Append("-").Append(e.Wrinfo[i].ToString()); } CommonClassLib.CCarryConvert.WriteDarkCasket(e.Wrnamespace + "." + e.Wrmethod, e.WrkeyRemark, e.Wrdevice, sb.ToString()); } } public void DealWithSendDeviceOrder(object sender, CSendDeviceOrderEventArgs e) {//20121108 lock (thisLock) { if (ccf.GetDeviceKindIdx(e.Deviceindex) == 6) { sdo = CommModeCreate.CreateSendDeviceOrder(e.Deviceindex); SocketsTCPIP.CClientTCPIP.Send(e.RemoteIP, e.RemotePort, e.Sendrinfo); } } } #endregion public bool ReConnectOPCServer() {//20130817richard try { OPCClient.CCommonOPCClient.DisConnectOPCServer(); OPCClient.CCommonOPCClient.CreateSubscriptionGroup(); return true; } catch (Exception ex) { throw ex; } } public void ActionError(int DeviceIdx, int TaskIdx, int ErrId) {//20131120 cgs.ActionError(DeviceIdx, TaskIdx, ErrId); } public string GetErrorBarcode(int devBind, int devBarcode,int barcodeLength) { int bcsn = 1; StringBuilder bc=new StringBuilder(); StringBuilder sb = new StringBuilder(); DataView dv = new DataView(); try { dv = dbo.ExceSQL(string.Format("SELECT F_ErrorBarcodeSN FROM T_Base_PLC_Ask WHERE (F_DeviceIndex = {0})",devBarcode)).Tables[0].DefaultView; if (dv.Count > 0) { bcsn =Convert.ToInt32( dv[0]["F_ErrorBarcodeSN"])+1; bc.Append("9").Append(devBind.ToString()).Append(bcsn.ToString()); ////add for qdty //if (bcsn > 1000) //{ // bcsn = 0; //} //dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_ErrorBarcodeSN={0} WHERE (F_DeviceIndex = {1})", bcsn, devBarcode)); for (int i = 0; i < (barcodeLength - bc.Length); i++) { sb.Append("0"); } return bc.Append(sb).ToString(); } else { return "-"; } } catch (Exception ex) { RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.GetErrorBarcode时" + ex.StackTrace+ex.Message ); OnRefreshMonitor(rmea); return "-"; } finally { dv.Dispose(); } } /// /// 根据条码,报告输送机的送出任务完成 /// /// 条码设备 /// 条码设备的绑定输送机 /// 条码 /// 异常处理口设备 public bool BarcodeComplete(int Bardevice, int BindDevice, string barcode, string AbendDevice) { DataView dv=new DataView(); bool return_flag = false; try { if (CStaticClass.DBFactory == "OracleDBFactory") {//20151120调度系统oracle的特殊语句 dv = dbo.ExceSQL(string.Format("SELECT F_MonitorIndex, F_DeviceIndex, F_DeviceCommandIndex,F_ManageTaskIndex, F_ManageTASKKINDINDEX,F_NumParam4 FROM T_Monitor_Task WHERE (F_TxtParam like '%{0}%') order by f_monitorindex FETCH FIRST ROWS ONLY", barcode)).Tables[0].DefaultView; } else { dv = dbo.ExceSQL(string.Format("SELECT TOP 1 F_MonitorIndex, F_DeviceIndex, F_DeviceCommandIndex,F_ManageTaskIndex, F_ManageTASKKINDINDEX,F_NumParam4 FROM T_Monitor_Task WHERE (F_TxtParam like '%{0}%')", barcode)).Tables[0].DefaultView; } if (dv.Count > 0) { int mankind = Convert.ToInt32(dv[0]["F_ManageTASKKINDINDEX"]); int FID = Convert.ToInt32(dv[0]["F_ManageTaskIndex"]); if ((ccf.GetDeviceKindIdx(Convert.ToInt32(dv[0]["F_DeviceIndex"])) == 2) && ((dv[0]["F_DeviceCommandIndex"].ToString() == "6") || (dv[0]["F_DeviceCommandIndex"].ToString() == "11")) || (ccf.GetDeviceKindIdx(Convert.ToInt32(dv[0]["F_DeviceIndex"])) == 7)) { int ctype = ccf.GetFCONTROLTASKTYPEFromManageTask(mankind, FID); if ((dv[0]["F_NumParam4"].ToString() == BindDevice.ToString())) {//正确 cgs.ActionComplete(BindDevice, Convert.ToInt32(dv[0]["F_MonitorIndex"]), 0); return_flag = true; } else {//可能经过上一个扫描器没扫到,下一条任务是否为此扫描任务,是:两个任务都报完成 dv = dbo.ExceSQL(string.Format("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTASKKINDINDEX = {0}) AND (F_ManageTaskIndex = {1}) AND (F_NumParam4 = {2})",mankind,FID,BindDevice)).Tables[0].DefaultView; if (dv.Count > 0) { CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码报完成", Bardevice.ToString(), "上一个扫描器没扫到码,条码:" + barcode.ToString().ToUpper()); dv = dbo.ExceSQL(string.Format("SELECT F_MonitorIndex,F_DeviceIndex,F_NumParam4 FROM T_Monitor_Task WHERE (F_ManageTASKKINDINDEX = {0}) AND (F_ManageTaskIndex = {1}) AND (F_MonitorIndex <= {2})", mankind, FID, Convert.ToInt32(dv[0]["F_MonitorIndex"]))).Tables[0].DefaultView; for (int i = 0; i < dv.Count; i++) { cgs.ActionComplete(Convert.ToInt32(dv[0]["F_NumParam4"]), Convert.ToInt32(dv[0]["F_MonitorIndex"]), 1); } return_flag = true; } else { int abst = 0; if (int.TryParse(AbendDevice.ToString(), out abst) == true) { object[] ob = new object[18] { ccf.GetTempManageIdx(), 2, barcode, 1, 2, 1, 1, ccf.GetWarehouseIndex(), ccf.GetWarehouseIndex(), "-", BindDevice, AbendDevice, "-", 0, DateTime.Now.ToString("u"), 0, Model.CGeneralFunction.TASKABEND,0 }; dbo.ExceSQL(string.Format("INSERT INTO T_Manage_Task(FID, F_ManageTaskKindIndex,FPALLETBARCODE,FMANAGETASKTYPE,FCONTROLTASKTYPE, FTASKLEVEL, FISRETURN,FSTARTWAREHOUSE,FENDWAREHOUSE, FSTARTCELL, FSTARTDEVICE, FENDDEVICE, FENDCELL, FSTATUS, FBEGTIME, FIntoStepOK,FExceptionNO,FLOGIC_AREA)VALUES({0},{1},'{2}',{3},{4},{5},{6},'{7}','{8}','{9}',{10},{11},'{12}',{13},'{14}','{15}',{16},{17})", ob)); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码报完成", Bardevice.ToString(), "条码和任务匹配,但扫描器不在此任务设备指令队列里,条码:" + barcode.ToString().ToUpper()); RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", Bardevice.ToString() + "条码和任务匹配,但扫描器不在此任务设备指令队列里,条码:" + barcode.ToString()); OnRefreshMonitor(rmea); } return_flag = false; } } } else { int abst = 0; if (int.TryParse(AbendDevice.ToString(), out abst) == true) { object[] ob = new object[18] { ccf.GetTempManageIdx(), 2, barcode, 1, 2, 1, 1, ccf.GetWarehouseIndex(), ccf.GetWarehouseIndex(), "-", BindDevice, AbendDevice, "-", 0, DateTime.Now.ToString("u"), 0, Model.CGeneralFunction.TASKABEND,0 }; dbo.ExceSQL(string.Format("INSERT INTO T_Manage_Task(FID, F_ManageTaskKindIndex,FPALLETBARCODE,FMANAGETASKTYPE,FCONTROLTASKTYPE, FTASKLEVEL, FISRETURN,FSTARTWAREHOUSE,FENDWAREHOUSE, FSTARTCELL, FSTARTDEVICE, FENDDEVICE, FENDCELL, FSTATUS, FBEGTIME, FIntoStepOK,FExceptionNO,FLOGIC_AREA)VALUES({0},{1},'{2}',{3},{4},{5},{6},'{7}','{8}','{9}',{10},{11},'{12}',{13},'{14}','{15}',{16},{17})", ob)); CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码报完成", Bardevice.ToString(), "扫描器找不到可以报完成的设备指令,条码:" + barcode.ToString().ToUpper()); RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", Bardevice.ToString() + "扫描器找不到可以报完成的设备指令,条码:" + barcode.ToString()); OnRefreshMonitor(rmea); } return_flag = false; } } else {//扫到码,但是没有匹配任务,改道异常口 object[] ob; //if ((BindDevice == 32606 || BindDevice == 42664)) //{//向管理申请补充任务 // #region 向管理申请任务 // DataView dvbc = dboMan.ExceSQL(string.Format("SELECT DEVICE_CODE,STOCK_BARCODE FROM IO_CONTROL_APPLY WHERE APPLY_TASK_STATUS<2 and DEVICE_CODE='{0}' and (STOCK_BARCODE = '{1}')", BindDevice, barcode)).Tables[0].DefaultView; // if (dvbc.Count <= 0) // { // dvbc = dboMan.ExceSQL(string.Format("select CONTROL_ID from IO_CONTROL where STOCK_BARCODE like '%{0}%'", barcode)).Tables[0].DefaultView; // if (dvbc.Count <= 0) // { // dvbc = dbo.ExceSQL(string.Format("select fid from T_Manage_Task where FPALLETBARCODE like '%{0}%'", barcode)).Tables[0].DefaultView; // if (dvbc.Count <= 0) // { // StringBuilder dtime = new StringBuilder(DateTime.Now.ToString("u")); // dtime.Remove(dtime.Length - 1, 1); // int apptype = 1; // StringBuilder wh = new StringBuilder("1"); // int appid = dboMan.GetManageTableIndex("IO_CONTROL_APPLY", true);//CONTROL_APPLY_ID // ob = new object[8] { apptype, BindDevice, barcode, 0, dtime, "", wh.ToString(), appid }; // try // { // dboMan.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_ID, CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,WAREHOUSE_CODE)VALUES ({7},{0},'{1}','{2}',{3},'{4}','{5}','{6}')", ob)); // } // catch (Exception ex) // { // RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务时发生错误:" + ex.StackTrace+ex.Message ); // OnRefreshMonitor(rmea); // } // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务:", Bardevice.ToString(), ",站台:" + BindDevice + ",条码:" + barcode.ToString().ToUpper()); // } // } // } // #endregion // return; //} //int abst = 0; //if (int.TryParse(AbendDevice.ToString(), out abst) == true) //{ // ob = new object[17] { ccf.GetTempManageIdx(), 2, barcode, 1, 2, 1, 1, ccf.GetWarehouseIndex(), ccf.GetWarehouseIndex(), "-", BindDevice, AbendDevice, "-", 0, DateTime.Now.ToString("u"), 0, Model.CGeneralFunction.TASKABEND }; // dbo.ExceSQL(string.Format("INSERT INTO T_Manage_Task(FID, F_ManageTaskKindIndex,FPALLETBARCODE,FMANAGETASKTYPE,FCONTROLTASKTYPE, FTASKLEVEL, FISRETURN,FSTARTWAREHOUSE,FENDWAREHOUSE, FSTARTCELL, FSTARTDEVICE, FENDDEVICE, FENDCELL, FSTATUS, FBEGTIME, FIntoStepOK,FExceptionNO)VALUES({0},{1},'{2}',{3},{4},{5},{6},'{7}','{8}','{9}',{10},{11},'{12}',{13},'{14}','{15}',{16})", ob)); // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码报完成", BindDevice.ToString(), "扫到条码但没有匹配任务,调度自动改道至异常处理口!"); // RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", BindDevice.ToString()+"扫到条码但没有匹配任务,调度自动改道至异常处理口!"); // OnRefreshMonitor(rmea); //} //else //{ // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码报完成", BindDevice.ToString(), "扫到条码但没有匹配任务!"); // RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.BarcodeComplete时," + BindDevice.ToString() + ",扫到条码但没有匹配任务"); // OnRefreshMonitor(rmea); //} CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码报完成", BindDevice.ToString(), "扫到条码但没有匹配任务,等待人工处理!"); RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", BindDevice.ToString() + "扫到条码但没有匹配任务,等待人工处理!"); OnRefreshMonitor(rmea); return_flag = false; } } catch (Exception ex) { RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.BarcodeComplete时" + ex.StackTrace+ex.Message); OnRefreshMonitor(rmea); return false; } finally { } return return_flag; } bool IfExitDeviceBarcodeTask(int device, string barcode) { DataView dv = new DataView(); try { dv = dbo.ExceSQL(string.Format("SELECT FSTARTDEVICE FROM T_Manage_Task where FPALLETBARCODE='{0}' and FSTARTDEVICE={1}",barcode,device)).Tables[0].DefaultView; if (dv.Count > 0) { return true; } else return false; } catch(Exception ex) { throw ex; } finally { dv.Dispose(); } } public bool ReConnectAGVPC(out string errtext)//20161107 { errtext = string.Empty; try { if (CStaticClass.Order == true) { SocketsTCPIP.CClientTCPIP.InitAllClientTCPIP();//20161107 } return true; } catch (Exception ex) { errtext = ex.Message + ex.StackTrace; return false; } } #region 线程 static Thread mythread; static bool exitThread = false; private void BeginListen() {//20091107 while (!exitThread ) { try { if (CStaticClass.ObtainManageTask == true) { CObtainTask.GetManagerTask(); } if (CStaticClass.Order == true) { CDisassembleTask.MyTaskIntoSteps(); cctrl.StartOrder(); //clpa.DealwithPLCAsk(); //cgs.GetDeviceState(); } } catch (Exception ex) { throw ex; } Thread.Sleep(200); } } public void EndListen() {//20091107 exitThread = true; if (mythread != null) { mythread.Abort(); mythread = null; } } public void StartListen() { exitThread = false; mythread = new Thread(new ThreadStart(BeginListen)); mythread.IsBackground = true; mythread.Start(); } #endregion /// /// 获得调度任务取消 /// public int DealCancelManagerTask() { DataView dvc = new DataView(); DataView dv = new DataView(); try { dv = dboMan.ExceSQL("select * from IDX_ASRS_WMSCANCEL where EDIStatus = 0").Tables[0].DefaultView; for (int i = 0; i < dv.Count; i++) { dvc = dbo.ExceSQL("select * from T_MANAGE_TASK where FREMARK = '" + dv[i]["GroupTaskID"].ToString() + "'").Tables[0].DefaultView; if (dvc.Count > 0) { if (Convert.ToInt32(dvc[0]["fstatus"]) == 0) { //可以删除 dbo.ExecuteSql(string.Format("delete from T_Manage_Task where FID=", dv[i]["fid"].ToString())); dbo.ExecuteSql(string.Format("delete from T_MONITOR_TASK where F_MANAGETASKINDEX=", dv[i]["fid"].ToString())); dboMan.ExecuteSql(string.Format("UPDATE IDX_ASRS_WMSCANCEL SET EDIStatus =5,CancelFlag = 'Y',ReadTime=sysdate,AddWho='WCS' WHERE SeqNo={0}", dv[i]["SeqNo"].ToString())); } else { dboMan.ExecuteSql(string.Format("UPDATE IDX_ASRS_WMSCANCEL SET EDIStatus =5,CancelFlag = 'N',ReadTime=sysdate,AddWho='WCS' WHERE SeqNo={0}", dv[i]["SeqNo"].ToString())); } } else { dboMan.ExecuteSql(string.Format("UPDATE IDX_ASRS_WMSCANCEL SET EDIStatus =5,CancelFlag = 'Y',ReadTime=sysdate,AddWho='WCS' WHERE SeqNo={0}", dv[i]["SeqNo"].ToString())); } } } catch (Exception ex) { RefreshMonitorEventArgs rme = new RefreshMonitorEventArgs("tsStatus", string.Format("获取任务IntegrativeNotifyDischarging时:{0}", ex.StackTrace + ex.Message)); OnRefreshMonitor(rme); } finally { dv.Dispose(); dvc.Dispose(); } return 0; } /// /// 从wms获得纸箱任务终点位置集合 /// //public int[] GetBoxTaskPortFromWMS(string barcode) //{ // //20100108 // DataView dv = new DataView(); // int tempsorting = 0; // int[] gc; // try // { // //20101124 // dv = dboMan.ExceSQL("select SORTING from IDX_ASRS_SERIALNO where SERIALNO = '" + barcode + "'" + " and SORTING is not null and taskstatus != 9 order by creationtime desc").Tables[0].DefaultView; // if (testflag) // { // if ((barcode.Length < 14) || (barcode.StartsWith("1111111"))) // { // return null; // } // else // { // gc = new int[1]; // //if ("123".Contains(barcode.Substring(13))) // //{ // // //gc[0] = 33066; // // gc[0] = 33007; // //} // //else if ("456".Contains(barcode.Substring(13))) // //{ // // gc[0] = 23197; // //} // //else if ("7890".Contains(barcode.Substring(13))) // //{ // // gc[0] = 13078; // //} // //13078,13081,13084,13087,13090,13093,13096,13099,13102,13105,13108,13111,13114,13117 // if (barcode.Substring(13) == "1") // { // gc[0] = 13078; // } // else if (barcode.Substring(13) == "2") // { // gc[0] = 13081; // } // else if (barcode.Substring(13) == "3") // { // gc[0] = 13084; // } // else if (barcode.Substring(13) == "4") // { // gc[0] = 13093; // } // else if (barcode.Substring(13) == "5") // { // gc[0] = 13099; // } // else if (barcode.Substring(13) == "6") // { // gc[0] = 13105; // } // else if (barcode.Substring(13) == "7") // { // gc[0] = 13108; // } // else if (barcode.Substring(13) == "8") // { // gc[0] = 13111; // } // else if (barcode.Substring(13) == "9") // { // gc[0] = 13114; // } // else if (barcode.Substring(13) == "0") // { // gc[0] = 13117; // } // return gc; // } // } // else // { // if (dv.Count > 0) // { // gc = new int[dv.Count]; // for (int i = 0; i < dv.Count; i++) // { // if ((int.TryParse(dv[i]["SORTING"].ToString(), out tempsorting) == true)) // { // gc[i] = tempsorting; // } // } // return gc; // } // else // { // return null; // } // } // } // catch (Exception ex) // { // throw ex; // } // finally // { // dv.Dispose(); // gc = null; // } //} static string _printerBarcode; /// /// 根据纸箱条码向喷码机输出打印信息 /// //void print_message(int printerID, string barcode) //{ // try // { // // streamToPrint = new StringReader(str); // //printFont = new Font("宋体", 10); // //titleFont = new Font("宋体", 15); // System.Drawing.Printing.PrintDocument pd = new System.Drawing.Printing.PrintDocument(); // //pd.PrinterSettings.PrinterName = "Hewlett-Packard HP LaserJet Pro MFP M126a"; // //pd.PrinterSettings.PrinterName = "Microsoft Print to PDF"; // pd.PrinterSettings.PrinterName = "Domino C-6000-" + printerID.ToString(); // //CancelPrintJob(pd.PrinterSettings.PrinterName);//清理打印机任务 // _printerBarcode = barcode; // pd.DocumentName = "Print:" + barcode; // pd.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(PrintBox); // pd.PrintController = new System.Drawing.Printing.StandardPrintController(); // pd.Print(); // } // catch (Exception ex) // { // throw ex; // } //} //private void PrintBox(object sender, System.Drawing.Printing.PrintPageEventArgs e) //{ // DataView dv = new DataView(); // dv = dboMan.ExceSQL("select SERIALNO,sortingid,consigneename,orderno,weight from IDX_ASRS_SERIALNO t where SERIALNO = '" + _printerBarcode + "'" // + " and SORTING is not null and taskstatus != 9 and SORTING in (" + boxOutPort + ") order by creationtime desc").Tables[0].DefaultView; // if (dv.Count > 0) // { // e.Graphics.DrawLine(Pens.Black, 8, 70, 550, 70); // e.Graphics.DrawString("分拣口:" + dv[0]["sortingid"].ToString(), new Font(new FontFamily("黑体"), 15), System.Drawing.Brushes.Black, 10, 90); // e.Graphics.DrawString("重量:" + dv[0]["weight"].ToString(), new Font(new FontFamily("黑体"), 15), System.Drawing.Brushes.Black, 250, 90); // e.Graphics.DrawString("订单号:" + dv[0]["orderno"].ToString(), new Font(new FontFamily("黑体"), 15), System.Drawing.Brushes.Black, 10, 130); // //产品信息 // e.Graphics.DrawString("客户:" + dv[0]["consigneename"].ToString(), new Font(new FontFamily("黑体"), 15), System.Drawing.Brushes.Black, 10, 170); // e.Graphics.DrawLine(Pens.Black, 8, 220, 550, 220); // } // else // { // e.Graphics.Clear(Color.White); // } //} /// /// 根据打印机名称清理打印列表 /// private bool CancelPrintJob(string PrintName) { // Variable declarations. string searchQuery; String jobName; ManagementObjectSearcher searchPrintJobs; ManagementObjectCollection prntJobCollection; try { // Query to get all the queued printer jobs. searchQuery = "SELECT * FROM Win32_PrintJob"; // Create an object using the above query. searchPrintJobs = new ManagementObjectSearcher(searchQuery); // Fire the query to get the collection of the printer jobs. prntJobCollection = searchPrintJobs.Get(); // Look for the job you want to delete/cancel. foreach (ManagementObject prntJob in prntJobCollection) { jobName = prntJob.Properties["Name"].Value.ToString(); if ((jobName.Length > 19) && (jobName.Substring(0, 19) == PrintName)) { prntJob.Delete(); } } return true; } catch (Exception sysException) { // Log the exception. throw sysException; //return false; } } } } #endregion