diff --git a/ControlMonitorClient/FrmUpdateStatus.cs b/ControlMonitorClient/FrmUpdateStatus.cs index 3d602f9..80c082b 100644 --- a/ControlMonitorClient/FrmUpdateStatus.cs +++ b/ControlMonitorClient/FrmUpdateStatus.cs @@ -42,7 +42,7 @@ namespace wcfControlMonitorClient private void TSMrefresh_Click() { - this.interfaceGridView.DataSource = dbo.ExceSQL("select CONTROL_APPLY_ID,CONTROL_ID,CONTROL_APPLY_TYPE,STOCK_BARCODE,APPLY_TASK_STATUS,CREATE_TIME,CONTROL_APPLY_PARAMETER,CONTROL_APPLY_REMARK from IO_CONTROL_APPLY where " + _manstatus).Tables[0].DefaultView; + this.interfaceGridView.DataSource = dbo.ExceSQL("select CONTROL_APPLY_ID,CONTROL_ID,CONTROL_APPLY_TYPE,STOCK_BARCODE,APPLY_TASK_STATUS,CREATE_TIME,CONTROL_APPLY_PARAMETER,CONTROL_APPLY_REMARK from IO_CONTROL_APPLY_HIS order by CREATE_TIME desc).Tables[0].DefaultView;"); this.interfaceGridView.Columns["CONTROL_APPLY_ID"].HeaderText = "ID号"; this.interfaceGridView.Columns["CONTROL_ID"].HeaderText = "WMS任务号"; this.interfaceGridView.Columns["CONTROL_APPLY_TYPE"].HeaderText = "处理类型"; diff --git a/OPCClient/CCommonOPCClient.cs b/OPCClient/CCommonOPCClient.cs index 512a82a..388ae34 100644 --- a/OPCClient/CCommonOPCClient.cs +++ b/OPCClient/CCommonOPCClient.cs @@ -144,7 +144,7 @@ namespace OPCClient /// /// PLCӵID磺"S7:[S7 connection_1]" /// "S7:[@LOCALSERVER]" - /// + /// public static string PlcConnectionID { get { return CCommonOPCClient._PLCconnectionID; } diff --git a/OPCClient/CSendDeviceOrder.cs b/OPCClient/CSendDeviceOrder.cs index ff5698f..95f06cc 100644 --- a/OPCClient/CSendDeviceOrder.cs +++ b/OPCClient/CSendDeviceOrder.cs @@ -683,8 +683,10 @@ namespace OPCClient itemvalues[8].Append(Order.ToString()); itemnames[9].Append(Model.CGeneralFunction.DBSend).Append(".").Append(Convert.ToString(sn + 0)).Append(",i"); itemvalues[9].Append(MessageIndex.ToString()); + //#region Ѷ lzm20250407 //itemnames[10].Append(Model.CGeneralFunction.DBSend).Append(".").Append(Convert.ToString(sn + 20)).Append(",i"); - //itemvalues[10].Append(MessageIndex.ToString()); + //itemvalues[10].Append(barcode.ToString()); + //#endregion #region //CCommonOPCClient.Hostname = CommonClassLib.AppSettings.GetValue("HostName");//20090922 devinfo.RemoteIP; //CCommonOPCClient.ProgID = CommonClassLib.AppSettings.GetValue("OPCProgID"); diff --git a/WcfControlMonitorLib/CCallService.cs b/WcfControlMonitorLib/CCallService.cs index 453d914..99871f5 100644 --- a/WcfControlMonitorLib/CCallService.cs +++ b/WcfControlMonitorLib/CCallService.cs @@ -20,6 +20,7 @@ using System.IO; using System.Xml.Serialization; using Newtonsoft.Json; using System.Threading.Tasks; +using System.Timers; namespace WcfControlMonitorLib @@ -1146,6 +1147,9 @@ namespace WcfControlMonitorLib } catch (Exception ex) { + resp_data.code = 1; + resp_data.msg=ex.Message; + result.sResult = false; result.message = ex.Message; return result; @@ -1471,6 +1475,8 @@ namespace WcfControlMonitorLib { StringBuilder sql =new StringBuilder(); StringBuilder sql2 = new StringBuilder(); + StringBuilder sql3 = new StringBuilder(); + StringBuilder sql4 = new StringBuilder(); DataView dv = new DataView(); DataView dvl = new DataView(); string dtime = DateTime.Now.ToString("u"); dtime = dtime.Substring(0, dtime.Length - 1); @@ -1491,14 +1497,20 @@ namespace WcfControlMonitorLib } else - { - + { //暂定通讯失败和接口返回失败都直接回退 sql2.Clear(); sql2.Append("select F_EndDevice from T_Base_Route WHERE F_StartDevice =").Append(dataInRequest[i]["DEVICE_CODE"]).Append(" and F_RouteKind=4");//查询回退任务的终点位置 DataView dataBackTask = dbo.ExceSQL(sql2.ToString()).Tables[0].DefaultView; IO_CONTROL iO_CONTROL = new IO_CONTROL(dataInRequest[i]["DEVICE_CODE"].ToString(), dataBackTask[0]["F_EndDevice"].ToString(), dataInRequest[i]["STOCK_BARCODE"].ToString()); iO_CONTROL.Insert_IOCONTROL();//暂不考虑插入失败的情况 写入IO入库任务 + // sql3.Clear(); + #region 添加LCS返回异常日志显示在客户端 + string sql5 = string.Format("insert into IO_CONTROL_APPLY_HIS(CONTROL_APPLY_ID,CONTROL_ID,CONTROL_APPLY_TYPE,WAREHOUSE_CODE,DEVICE_CODE,STOCK_BARCODE,APPLY_TASK_STATUS,CREATE_TIME,CONTROL_APPLY_PARAMETER,CONTROL_APPLY_PARA01,CONTROL_APPLY_PARA02,CONTROL_APPLY_REMARK) values ({0},{1},'{2}','{3}','{4}','{5}',{6},'{7}','{8}','{9}','{10}','{11}')", + dataInRequest[i]["CONTROL_APPLY_ID"], dataInRequest[i]["CONTROL_ID"], dataInRequest[i]["CONTROL_APPLY_TYPE"], dataInRequest[i]["WAREHOUSE_CODE"], dataInRequest[i]["DEVICE_CODE"], + dataInRequest[i]["STOCK_BARCODE"], dataInRequest[i]["APPLY_TASK_STATUS"], dataInRequest[i]["CREATE_TIME"], resp_data.msg.Substring(0, 200), dataInRequest[i]["CONTROL_APPLY_PARA01"], dataInRequest[i]["CONTROL_APPLY_PARA02"], dataInRequest[i]["CONTROL_APPLY_REMARK"],""); + dbo.ExceSQL(sql5.ToString()); + #endregion CommonClassLib.CCarryConvert.WriteDarkCasket("CallService", "inboundApply", "开始调用wms服务失败:", $"返回报错{resp_data.data}:{resp_data.msg}"); } //删除IOControlApply的扫码请求 @@ -1510,6 +1522,7 @@ namespace WcfControlMonitorLib } catch (Exception ex) { + _CCallServiceError = ex.StackTrace + ex.Message; CommonClassLib.CCarryConvert.WriteDarkCasket("CallService", "inboundApply", "调用WMS接口失败", "19999", $"{ex.Message}"); } diff --git a/WcfControlMonitorLib/CControl.cs b/WcfControlMonitorLib/CControl.cs index ab62107..966f190 100644 --- a/WcfControlMonitorLib/CControl.cs +++ b/WcfControlMonitorLib/CControl.cs @@ -1,4 +1,4 @@ -using System.Runtime.InteropServices; + using System.Runtime.InteropServices; using System.Collections.Generic; using System.Text; @@ -2098,7 +2098,7 @@ namespace WcfControlMonitorLib UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx); } } - if (CONTROLTASKTYPE == 2 &&StartDevice == 13008 && EndDevice != 12051) + else if (CONTROLTASKTYPE == 2 &&StartDevice == 13008 && EndDevice != 12051) { // һ豸 12000ϱ״̬stateֽ 01 Model.MDevice devOutMode = Model.CGetInfo.GetDeviceInfo(15001); @@ -2108,6 +2108,29 @@ namespace WcfControlMonitorLib UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx); } } + + + if (CONTROLTASKTYPE == 2 && EndDevice == 120004 && StartDevice != 14004)//񲻼 + { + // һ豸 12000ϱ״̬stateֽ 01 + Model.MDevice devOutMode = Model.CGetInfo.GetDeviceInfo(15002); + if (devOutMode.RunState == 1) // ģʽ 1У 2 ⣨ɣ + { + AheadDetectUnallow.Append("12004ģʽ"); + UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx); + } + } + else if (CONTROLTASKTYPE == 2 && StartDevice == 14004 && EndDevice != 12004) + { + // һ豸 12000ϱ״̬stateֽ 01 + Model.MDevice devOutMode = Model.CGetInfo.GetDeviceInfo(15002); + if (devOutMode.RunState == 2) // ģʽ 1У 2 ⣨ɣ + { + AheadDetectUnallow.Append("12004ģʽ"); + UpdateAheadDetectUnallow(AheadDetectUnallow, minMidx); + } + } + #endregion #region lzm20250225 עĿ //20101011 diff --git a/WcfControlMonitorLib/CGetState.cs b/WcfControlMonitorLib/CGetState.cs index 6d625d1..7b2b2bc 100644 --- a/WcfControlMonitorLib/CGetState.cs +++ b/WcfControlMonitorLib/CGetState.cs @@ -794,53 +794,7 @@ namespace WcfControlMonitorLib } #region 񺽶 wmsӿ ϱ״̬/ɾ3(ڸ״̬ɾ) - //if (ControlType != 5 && ControlType != 6) - //{ - // int status = 0; - // if (ClearZero == Model.CGeneralFunction.TASKDELETE) - // { - // status = 900; - // } - // else - // { - // if (errrcode == 970)//ͻغ - // { - // status = 970; - // } - // else - // { - - // status = 999; - // } - // } - - // string dTime1 = DateTime.Now.ToString("u"); - // dtime = dTime1.Substring(0, dTime1.Length - 1); - - // object[] ob = new object[8] { fid, status, 0, barcode, status, dtime, "", 1.ToString() }; - // try - // { - // sql.Clear(); - // sql.Append("select * from io_control_apply where CONTROL_ID = ").Append(fid); - // if (dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView.Count > 0) - - // { - // sql.Clear(); - // sql.Append(" delete from io_control_apply where CONTROL_ID = ").Append(fid); - // dbo.ExceSQL(sql.ToString()); - // } - - // dboM.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY(CONTROL_ID,CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,WAREHOUSE_CODE)VALUES ({0},'{1}','{2}','{3}','{4}','{5}','{6}','{7}')", ob)); - // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "ϱ״̬:", fid.ToString(), ",״̬" + status.ToString() + "룺" + barcode.ToString().ToUpper() + "ͣ" + status.ToString()); - // } - // catch (Exception ex) - // { - // RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "ϱ״̬" + ex.StackTrace + ex.Message); - // OnRefreshMonitor(rmea); - // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "ϱ״̬:", fid.ToString(), ",״̬" + status.ToString() + "룺" + barcode.ToString().ToUpper() + "ͣ" + status.ToString()); - - // } - //} + #endregion } else if (mti == 4) diff --git a/WcfControlMonitorLib/SControlMonitor(1).cs b/WcfControlMonitorLib/SControlMonitor(1).cs new file mode 100644 index 0000000..889a323 --- /dev/null +++ b/WcfControlMonitorLib/SControlMonitor(1).cs @@ -0,0 +1,7706 @@ +using CommLayerFactory; +using CommonLib; +using ICommLayer; +using System; +using System.Collections.Generic; +using System.Data; +using System.IO; +using System.ServiceModel; +using System.Text; +using System.Threading; + +namespace WcfControlMonitorLib +{ + // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service1”。 + + /// + /// 调度wcf的实现 + /// + [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] + public class SControlMonitor : IControlMonitor, IDisposable + { + #region 变量定义 + ManageService.S_ManageService g_manageService = new ManageService.S_ManageService(); + 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 + 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(); + //lishuo 电气不能垛机放货站台运行时上报任务号只能在它运行时自己把逻辑有货清零 + static List IsLaneGate = new List() { 12012, 12027, 12034, 12054, 12078, 12082, 12086, 12090 }; + + + ISendDeviceOrder sdo; + Model.MDevice devinfo; + Model.MDevice modifypathdevinfo; + Model.MDevice askDevinfo; + + Model.MDeviceDDJ mdeviceddj; //20240506 + + StringBuilder[] wv = { new StringBuilder("2") }; + StringBuilder[] witemnames = { new StringBuilder("") }; + private Object thisLock = new Object(); + #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 + CStaticClass.HCA12068 = CommonClassLib.AppSettings.GetValue("HCA12068"); + CStaticClass.HCB12019 = CommonClassLib.AppSettings.GetValue("HCB12019"); + CStaticClass.HCB12034 = CommonClassLib.AppSettings.GetValue("HCB12034"); + CStaticClass.HCBLanewayOutDB = CommonClassLib.AppSettings.GetValue("HCBLanewayOutDB"); + #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; + } + #region 挑选写区(160011,160012,160013) + //依次循环分区写入 + dv = dbo.ExceSQL(string.Format("SELECT F_TaskIndex FROM T_Base_PLC_Ask WHERE (F_DeviceIndex = {0})", deviceindex)).Tables[0].DefaultView; + if (dv.Count > 0) + { + + switch (Convert.ToInt32(dv[0][0])) + { + case 160011: + newdev = 160012; + break; + case 160012: + newdev = 160013; + break; + case 160013: + newdev = 160011; + break; + default: + newdev = 160011; + break; + } + + } + #endregion + CStringInfoEventArgs e = new CStringInfoEventArgs(newdev, barcode, _confirm); + SendBarcode(sender, e); + + } + catch (Exception ex) + { + throw ex; + } + finally + { + dv.Dispose(); + } + + } + + + void CCommon_UpdateDB(object sender, CUpdateDBChangeEventArgs e) + { + PLCCommonUpdateDB(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); + } + + #region 事件响应 + + 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); + + cgs.ActionComplete(DeviceIdx, Convert.ToInt32(dv2[0]["F_MonitorIndex"]), ClearZero); + } + //再报告完成自己 + DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]); + devKind = ccf.GetDeviceKindIdx(DeviceIdx); + + 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); + + cgs.ActionComplete(DeviceIdx, mindex, ClearZero); + //再报告完成主任务 + DeviceIdx = Convert.ToInt32(dv3[0]["F_DeviceIndex"]); + devKind = ccf.GetDeviceKindIdx(DeviceIdx); + 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"]); + } + 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 + { + 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_Manage_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_Manage_Task_Index_Hand_Task").Tables[0].DefaultView; + + if (dv.Count > 0) + { + if (fid == 29998) + { + dbo.ExceSQL("UPDATE T_Base_Manage_Task_Index_Hand_Task SET F_ManageTaskIndex =20001"); + return; + } + if (fid > Convert.ToInt32(dv[0]["F_ManageTaskIndex"])) + { + dbo.ExceSQL("UPDATE T_Base_Manage_Task_Index_Hand_Task SET F_ManageTaskIndex =" + fid); + return; + } + } + else + { + dbo.ExceSQL("INSERT INTO T_Base_Manage_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); + } + } + } + + } + void BarCode(int deviceindex, byte[] barbyte) + { + + StringBuilder[] wv = { new StringBuilder("2") }; + StringBuilder[] witemnames = { new StringBuilder("") }; + StringBuilder sql = new StringBuilder(); + DataView dv = new DataView(); DataView dvbc = new DataView(); + + char[] dd = new char[1] { '.' };//20101124 + string[] DS;//20101124 + string _listenPLCAskError = ""; + int i = 0; + try + { + sql.Append("SELECT T_Base_PLC_Ask.F_DeviceIndex,T_Base_PLC_Ask.F_BindingDevice, F_Askkind,F_TaskIndex,F_BarCode,F_Remark").Append( + " FROM T_Base_PLC_Ask").Append(" where T_Base_PLC_Ask.F_DeviceIndex =").Append(deviceindex); + dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dv.Count <= 0) return; + devinfo = Model.CGetInfo.GetDeviceInfo(deviceindex); + witemnames[0].Remove(0, witemnames[0].Length); + witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 0)).Append(",b");//20130510 + wv[0].Remove(0, wv[0].Length); + wv[0].Append("0"); + #region 判断读条码的条件是否成立 + + int[] state; + state = CStaticClass.GetDeviceState(Convert.ToInt32(dv[i]["F_BindingDevice"])); + if (state == null) + { + return; + } + if ((state[1] >= 30) || (state[1] == 1)) + { + //20091128 + state = null; + return; + + } + + //20101118 + DS = ccf.GetBindingDeviceIndexOut(Convert.ToInt32(dv[i]["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) + { + //20091128 + state = null; + return; + } + } + else + {//20110510 + _listenPLCAskError = "条码扫描器申请入库任务:" + dv[i]["F_BindingDevice"].ToString() + ",出口开关没填写记录!"; + return; + } + #endregion + + //扫到的条码(全部非零)与记录的条形码不相等就认为是新条码 + StringBuilder barcodesb = new StringBuilder(); + for (int ik = 1; ik < barbyte.GetLength(0); ik++) + { + barcodesb.Append(Convert.ToChar(barbyte[ik])); + + } + string barcode = barcodesb.ToString(); + int dcode = Convert.ToInt32(dv[i]["F_BindingDevice"]); + if (barcode == null) + { + return; + } + if ((barcode == "\0\0\0\0\0\0\0\0\0\0") || (barcode == "?/////////") || (barcode == "1111111111")) + { + #region 没扫到码送出到指定位置//20101208 + StringBuilder aheadDetect = new StringBuilder(); + + _listenPLCAskError = dcode.ToString() + ",没扫到条码!" + "时间," + DateTime.Now.ToLongTimeString(); + RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("notifyIcon1", "警告:" + _listenPLCAskError); + + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码申请任务", dcode.ToString(), "没扫到条码!"); + wv[0].Remove(0, wv[0].Length); + wv[0].Append("2"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + + return; + + #endregion + } + + + //20101124一楼16001扫描器的处理:扫码时,把条码记录字段F_BarCode; + //如果有本地管理任务,起点位置是此条码绑定设备,置本地管理任务【FSTATUS=0】;否则就是比对。 + //如果没有本地管理任务,就是申请任务。 + //获取任务时,如果入库任务的起点位置是条码绑定设备:如果起点位置,字段F_BarCode记录的条码与任务匹配,置本地管理任务【FSTATUS=0】,否则置【FSTATUS=-1】; + //如果入库任务的起点位置不是条码绑定设备,置本地管理任务【FSTATUS=0】。 + + //20110331 + + if (dbo.GetSingle(string.Format("SELECT F_DeviceIndex FROM T_Base_PLC_Ask WHERE (F_DeviceIndex = {0}) AND (F_BarCode = '{1}')", deviceindex, barcode)) != null)//20101124 + { + wv[0].Remove(0, wv[0].Length); + wv[0].Append("2"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + return; + } + #region 条码有对应调度任务存在,重新入库扫描或者条码比对 + + if (dbo.GetSingle(string.Format("select fid from T_Manage_Task where FPALLETBARCODE like '%{0}%'", barcode)) != null) + {//条码有对应调度任务存在,重新入库扫描或者条码比对 + int uc = dbo.ExecuteSql(string.Format("update T_Manage_Task set FSTATUS=0 where FCONTROLTASKTYPE=1 and FSTARTDEVICE={0} and FPALLETBARCODE like '%{1}%'", dcode, barcode)); + if (uc > 0) + {//20101208上次没扫到码的重新执行入库扫描 + dbo.ExecuteSql(string.Format("update T_Monitor_Task set F_Status=0 where F_DeviceIndex={0} and F_TxtParam like '%{1}%'", dcode, barcode)); + wv[0].Remove(0, wv[0].Length); + wv[0].Append("2"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码申请任务", dcode.ToString(), barcode + ":上次PLC搬运错误,重新执行入库条码扫描!"); + return; + } + else + {//条码比对 + object ob = dbo.GetSingle(string.Format("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_DeviceIndex = {0}) AND (F_Status = 1) AND (F_TxtParam = '{1}')", deviceindex, barcode)); + if (ob != null) + {//比对正确 + cgs.ActionComplete(deviceindex, Convert.ToInt32(ob), 0); + wv[0].Remove(0, wv[0].Length); + wv[0].Append("2"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + return; + } + else + {//条码被错误的报告了数据区 + + } + + + } + } + #endregion + + #region 条码没有对应的调度任务,申请任务或者比对错误 + + else + {//条码没有对应的调度任务,申请任务或者比对错误 + #region 条码比对错误 + object ob = dbo.GetSingle(string.Format("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_DeviceIndex = {0}) AND (F_Status = 1) AND (F_TxtParam = '{1}')", deviceindex, barcode)); + if (ob == null) + {//比对错误需要改道处理,以后路径里不应该存在其它条码比对了 + //生成当前条码绑定设备barBindDevice到异常人工处理站台AbendDevice的调度任务,保留原来的调度任务的主键 + dv = dbo.ExceSQL(string.Format("SELECT F_MonitorIndex, F_ManageTASKKINDINDEX, F_ManageTaskIndex FROM T_Monitor_Task WHERE (F_DeviceIndex = {0}) AND (F_Status = 1) )", deviceindex)).Tables[0].DefaultView; + if (dv.Count > 0) + { + //1删除现有设备指令索引和调度任务 + dbo.ExecuteSql(string.Format("delete from T_Monitor_Task where F_ManageTASKKINDINDEX={0} and F_ManageTaskIndex={1}", Convert.ToInt32(dv[0]["F_ManageTASKKINDINDEX"]), Convert.ToInt32(dv[0]["F_ManageTaskIndex"]))); + dbo.ExecuteSql(string.Format("delete from T_Manage_Task where F_ManageTaskKindIndex={0} and FID={1}", Convert.ToInt32(dv[0]["F_ManageTASKKINDINDEX"]), Convert.ToInt32(dv[0]["F_ManageTaskIndex"]))); + //2使用调度任务的主键生成新任务、重新拆分 + Model.AutoTask at = new Model.AutoTask(3, barcode, dcode.ToString(), "-", dv[i]["F_Remark"].ToString(), "-", false, false, 0); + BuildAutoTask(at, out _listenPLCAskError); + return; + } + else + {//逻辑混乱了 + + } + } + #endregion + + #region 扫码申请任务 + #region 向管理申请入库任务 + dvbc = dboMan.ExceSQL(string.Format("SELECT DEVICE_CODE,STOCK_BARCODE FROM IO_CONTROL_APPLY WHERE APPLY_TASK_STATUS=0 and DEVICE_CODE='{0}' and (STOCK_BARCODE = '{1}')", dcode, barcode)).Tables[0].DefaultView; + if (dvbc.Count > 0) + {//20091128 + wv[0].Remove(0, wv[0].Length); + wv[0].Append("2"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + _listenPLCAskError = "输送机:" + dcode.ToString() + "的扫描器向管理申请入库任务时:调度任务有相同的托盘号:" + barcode + "尚未处理!"; + return; + } + //向管理申请入库任务 + + //20101124 + StringBuilder dtime = new StringBuilder(DateTime.Now.ToString("u")); + dtime.Remove(dtime.Length - 1, 1); + int apptype = 1; + ob = new object[7] { apptype, dcode, barcode, 0, dtime, "", ccf.GetWarehouseIndex() }; + try + { + dboMan.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY( CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,WAREHOUSE_CODE)VALUES ({0},'{1}','{2}',{3},'{4}','{5}','{6}')", ob)); + + } + //20101124 + catch (Exception ex) + { + _listenPLCAskError = "向管理申请入库任务:" + ex.Message; + } + #endregion + //20110331 + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码申请任务", dcode.ToString(), barcode); + #endregion + + dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_BarCode = '{0}' WHERE (F_DeviceIndex = {1})", barcode, deviceindex)); + wv[0].Remove(0, wv[0].Length); + wv[0].Append("2"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + } + + #endregion + + } + catch (Exception ex) + { + throw ex; + } + finally + { + dv.Dispose(); + dvbc.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) + { + + foreach (Dictionary i in dv) + { + + } + 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); + if ((devKind == 2) || (devKind == 4)) + {//输送机清零 + sdo = CommModeCreate.CreateSendDeviceOrder(DeviceIdx); + sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0); + } + if ((devKind == 1)) //堆垛机、RGV + { + + sdo = CommModeCreate.CreateSendDeviceOrder(DeviceIdx); + sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0, 0, 0, 0, 0, 0); + } + 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); + if ((devKind == 2) || (devKind == 4)) + {//输送机、RGV清零 + sdo = CommModeCreate.CreateSendDeviceOrder(DeviceIdx); + sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0); + } + if ((devKind == 1)) //堆垛机 + { + + sdo = CommModeCreate.CreateSendDeviceOrder(DeviceIdx); + sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0, 0, 0, 0, 0, 0); + } + 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); + if ((devKind == 2) || (devKind == 4)) + {//输送机、RGV清零 + sdo = CommModeCreate.CreateSendDeviceOrder(DeviceIdx); + sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0); + } + if ((devKind == 1)) //堆垛机 + { + + sdo = CommModeCreate.CreateSendDeviceOrder(DeviceIdx); + sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0, 0, 0, 0, 0, 0); + } + 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); + if ((devKind == 2) || (devKind == 4)) + {//输送机、RGV清零 + sdo = CommModeCreate.CreateSendDeviceOrder(DeviceIdx); + sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0); + } + if ((devKind == 1)) //堆垛机 + { + + sdo = CommModeCreate.CreateSendDeviceOrder(DeviceIdx); + sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0, 0, 0, 0, 0, 0); + } + 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); + if ((devKind == 2) || (devKind == 4)) + {//输送机、RGV清零 + sdo = CommModeCreate.CreateSendDeviceOrder(DeviceIdx); + sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0); + } + if ((devKind == 1)) //堆垛机 + { + + sdo = CommModeCreate.CreateSendDeviceOrder(DeviceIdx); + sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0, 0, 0, 0, 0, 0); + } + 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 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); + 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; + return true; + } + catch + { + return false; + } + } + public bool StopObtainTask() + { + + try + { + CStaticClass.ManZWhere.Remove(0, CStaticClass.ManZWhere.Length); + CStaticClass.ObtainManageTask = false; + + 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(); + CUpdateIoControl.StartListen(); // lishuo黑匣子新纪录方式 位置1 NewWrieDarkCasket + + CParsePLCData.StartListen(); + 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); + CParsePLCData.RefreshMonitor -= new RefreshMonitorEventHandler(MonitorRefreshMonitor); + + OPCClient.CCommonOPCClient.UpdateDB -= new CUpdateDBEventHandler(CCommon_UpdateDB); + //lishuo 断掉opc订阅 + OPCClient.CCommonOPCClient.DisConnectOPCServer(); + 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(); // lishuo黑匣子新纪录方式 位置2 NewWrieDarkCasket + + 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) + { + 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]); + x = Convert.ToInt32(sp[1]); + y = Convert.ToInt32(sp[2]); + + } + sp = Handtask._cellcodeEnd.Split(cc); + if (sp.Length >= 3) + { + 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; + } + + #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) + { + 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)) + { + 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 + { + dv = dbo.ExceSQL(string.Format("SELECT FID FROM ST_CELL WHERE (F_Z = {0}) AND (F_X = {1}) AND (F_Y = {2})", z, xx[i], y)).Tables[0].DefaultView; + 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 + { + dv = dbo.ExceSQL("SELECT FID FROM ST_CELL WHERE (F_Z = " + z1 + ") AND (F_X = " + xx1[i] + ") AND (F_Y = " + y1 + ")").Tables[0].DefaultView; + 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 + "')"); + + 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(); + 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() + + "'," + 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(); + } + if (Handtask._deviceIndex == 12002 && Handtask._arrowLocation == "12001") + { + Handtask._deviceOrder = 6; + } + + 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 + "," + hidx + ",4," + hmindx + "," + Handtask._deviceIndex + + "," + Handtask._deviceOrder + "," + z + "," + x + "," + y + "," + z1 + "," + x1 + "," + y1 + ",'" + useawayfork + "','" + barcode + "')"; + 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(); + } + string dtime = DateTime.Now.ToString("u");//20101028 + dtime = dtime.Substring(0, dtime.Length - 1);//20101028 + int AutoManageIdx = ccf.GetTempManageIdx(); + //插入临时调度任务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,WORK_MODE) " + + "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 + ")";//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); + 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(); + //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_NumParam4,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={0} and F_ManageTaskKindIndex={1} ", fid, mti)).Tables[0].DefaultView; + if (dv.Count > 0) + {//有调度任务 + + //20100108 + CommonClassLib.CCarryConvert.WriteDarkCasket("调度任务管理", "调度任务手工报告完成", "托盘条码:" + barcode, "调度任务索引:" + fid.ToString()); + 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 deviceindex = 0; + if (dv[i]["F_NumParam4"].ToString() != "0" && dv[i]["F_DeviceIndex"].ToString().Substring(1, 1) == "2") + {//20120906输送机的送出指令,以终点输送机作为任务完成设备 + deviceindex = Convert.ToInt32(dv[i]["F_NumParam4"]); + } + else + { + deviceindex = Convert.ToInt32(dv[i]["F_DeviceIndex"]); + } + if (Convert.ToInt32(dv[i]["F_Status"]) >= 1) + { + cgs.ActionComplete(deviceindex, Convert.ToInt32(dv[i]["F_MonitorIndex"]), Model.CGeneralFunction.TASKFINISH); + } + else + { + cgs.ActionComplete(deviceindex, 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); + } + } + + + } + + #endregion + + + + #region 报告删除 + + else if (ActionID == Model.CGeneralFunction.TASKDELETE) + { + 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) + { + if ((ccf.GetDeviceKindIdx(Convert.ToInt32(dv[0]["F_DeviceIndex"])) == 6) && (Convert.ToInt32(dv[0]["F_Status"]) > 0)) + {//20110110 + StringBuilder sql = new StringBuilder(); + sql.Remove(0, sql.Length); + sql.Append("SELECT F_DeviceIndex,F_DeviceKindIndex, F_LocalIP, F_LocalPort, F_RemoteIP, F_RemotePort FROM T_Base_Device where F_DeviceIndex=").Append(Convert.ToInt32(dv[0]["F_DeviceIndex"])); + dvaa = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dvaa.Count > 0) + { + byte[] _Sdata = new byte[16]; + + _Sdata[0] = Convert.ToByte(60006 & 255); + _Sdata[1] = Convert.ToByte((60006 >> 8) & 255); + _Sdata[2] = Convert.ToByte((60006 >> 16) & 255); + _Sdata[3] = Convert.ToByte((60006 >> 24) & 255); + _Sdata[4] = Convert.ToByte(Convert.ToInt32(dv[0]["F_ManageTaskIndex"]) & 255); + _Sdata[5] = Convert.ToByte((Convert.ToInt32(dv[0]["F_ManageTaskIndex"]) >> 8) & 255); + _Sdata[6] = Convert.ToByte((Convert.ToInt32(dv[0]["F_ManageTaskIndex"]) >> 16) & 255); + _Sdata[7] = Convert.ToByte((Convert.ToInt32(dv[0]["F_ManageTaskIndex"]) >> 24) & 255); + _Sdata[8] = Convert.ToByte(Convert.ToInt32(dv[0]["F_MonitorIndex"]) & 255); + _Sdata[9] = Convert.ToByte((Convert.ToInt32(dv[0]["F_MonitorIndex"]) >> 8) & 255); + _Sdata[10] = Convert.ToByte((Convert.ToInt32(dv[0]["F_MonitorIndex"]) >> 16) & 255); + _Sdata[11] = Convert.ToByte((Convert.ToInt32(dv[0]["F_MonitorIndex"]) >> 24) & 255); + int ck = 60006 + Convert.ToInt32(dv[0]["F_ManageTaskIndex"]) + Convert.ToInt32(dv[0]["F_MonitorIndex"]); + _Sdata[12] = Convert.ToByte(ck & 255); + _Sdata[13] = Convert.ToByte((ck >> 8) & 255); + _Sdata[14] = Convert.ToByte((ck >> 16) & 255); + _Sdata[15] = Convert.ToByte((ck >> 24) & 255); + SocketsTCPIP.CClientTCPIP.Send(dvaa[0]["F_RemoteIP"].ToString(), Convert.ToInt32(dvaa[0]["F_RemotePort"]), _Sdata); + + + } + + Errtext = string.Empty; + return true; ; + } + } + //20110222CGetState cgs = new CGetState(); + //20090902 + 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_NumParam4,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()); + 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.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 + { + int deviceindex = 0; + if (dv[i]["F_NumParam4"].ToString() != "0" && dv[i]["F_DeviceIndex"].ToString().Substring(1, 1) == "2") + {//20120906输送机的送出指令,以终点输送机作为任务完成设备 + deviceindex = Convert.ToInt32(dv[i]["F_NumParam4"]); + } + else + { + deviceindex = Convert.ToInt32(dv[i]["F_DeviceIndex"]); + } + if (Convert.ToInt32(dv[i]["F_Status"]) >= 1) + { + int fstatus = 1; + + cgs.ActionComplete(deviceindex, Convert.ToInt32(dv[i]["F_MonitorIndex"]), fstatus); + } + else + { + cgs.ActionComplete(deviceindex, Convert.ToInt32(dv[i]["F_MonitorIndex"]), Model.CGeneralFunction.TASKDELETE); + } + } + } + } + else + {//20110412 + + CommonClassLib.CCarryConvert.WriteDarkCasket("调度任务管理", "调度任务被手工删除!", "托盘条码:" + barcode, "调度任务索引:" + fid.ToString()); + + + //回写管理表 + cgs.ReturnManageInfo(fid, mti, cap, false); + if (mti == 1) + { + dboMan.ExceSQL("update IO_Control set Control_STATUS=" + Model.CGeneralFunction.TASKDELETE + " where Control_ID=" + fid); + } + } + } + + #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 ModifyManageTask1(string id, int Mankind, int ManagetaskID, int ActionID, out string Errtext) + { + string barcode = ccf.GetBarCodeFromManageTask(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(); + //dbo.TransBegin(); + try + { + //lishuo agv新方式 如果AGV已经执行,不能删除不能报完成,即状态为0或未生成记录可以删除,删除数据库表记录,写日志(暂时不用了。agv报完成时指令列表中没有对应的任务号回直接删除) + //DataView dvAGV = dbo.ExceSQL(string.Format("SELECT T_MONITOR_TASK.F_MonitorIndex FROM T_MONITOR_TASK,T_BASE_DEVICE WHERE T_MONITOR_TASK.F_DeviceIndex= T_BASE_DEVICE.F_DeviceIndex AND T_BASE_DEVICE.F_DeviceKindIndex = 6 AND T_MONITOR_TASK.F_ManageTaskIndex={0} and T_MONITOR_TASK.F_ManageTaskKindIndex={1} ", fid, mti)).Tables[0].DefaultView; + //if (dvAGV.Count > 0) + //{ + // DataView dvCheckAGV = dbo.ExceSQL(string.Format("select control_id from io_agv where manage_id = {0}", dvAGV[0]["F_MonitorIndex"])).Tables[0].DefaultView; + // if (dvCheckAGV.Count > 0) + // { + // Errtext = "存在已下达的AGV任务,操作失败"; + // return false; + // } + //} + + #region 报告完成 + //20240812--HX6手动报完成991,防止后续AGV接货窜盘 + 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_NumParam4,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={0} and F_ManageTaskKindIndex={1} ", fid, mti)).Tables[0].DefaultView; + if (dv.Count > 0) + {//有调度任务 + + //20100108 + CommonClassLib.CCarryConvert.WriteDarkCasket("调度任务管理", "调度任务报告完成", "托盘条码:" + barcode + ",计算机:" + id, "调度任务索引:" + fid.ToString()); + 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 deviceindex = 0; + if (dv[i]["F_NumParam4"].ToString() != "0" && dv[i]["F_DeviceIndex"].ToString().Substring(1, 1) == "2") + {//20120906输送机的送出指令,以终点输送机作为任务完成设备 + deviceindex = Convert.ToInt32(dv[i]["F_NumParam4"]); + } + else + { + deviceindex = Convert.ToInt32(dv[i]["F_DeviceIndex"]); + } + if (Convert.ToInt32(dv[i]["F_Status"]) >= 1) + { + cgs.ActionComplete(deviceindex, Convert.ToInt32(dv[i]["F_MonitorIndex"]), Model.CGeneralFunction.TASKFINISH); + } + else + { + cgs.ActionComplete(deviceindex, Convert.ToInt32(dv[i]["F_MonitorIndex"]), Model.CGeneralFunction.TASKFINISH); + } + } + } + } + else + { + + + //回写管理表 + CommonClassLib.CCarryConvert.WriteDarkCasket("调度任务管理", "调度任务手工报告完成", "托盘条码:" + barcode + ",计算机:" + id, "调度任务索引:" + fid.ToString()); + cgs.ReturnManageInfo(fid, mti, cap, true); + if (mti == 1) + { + dboMan.ExceSQL("update IO_Control set Control_STATUS=" + Model.CGeneralFunction.TASKFINISH + " where Control_ID=" + fid); + } + } + + + } + + #endregion + + + #region 手动报告完成 + + else if (ActionID == Model.CGeneralFunction.TASKHANDFINISH) + { + 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_NumParam4,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={0} and F_ManageTaskKindIndex={1} ", fid, mti)).Tables[0].DefaultView; + if (dv.Count > 0) + {//有调度任务 + + //20100108 + CommonClassLib.CCarryConvert.WriteDarkCasket("调度任务管理", "调度任务手工报告完成", "托盘条码:" + barcode + ",计算机:" + id, "调度任务索引:" + fid.ToString()); + 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 deviceindex = 0; + if (dv[i]["F_NumParam4"].ToString() != "0" && dv[i]["F_DeviceIndex"].ToString().Substring(1, 1) == "2") + {//20120906输送机的送出指令,以终点输送机作为任务完成设备 + deviceindex = Convert.ToInt32(dv[i]["F_NumParam4"]); + } + else + { + deviceindex = Convert.ToInt32(dv[i]["F_DeviceIndex"]); + } + if (Convert.ToInt32(dv[i]["F_Status"]) >= 1) + { + cgs.ActionComplete(deviceindex, Convert.ToInt32(dv[i]["F_MonitorIndex"]), Model.CGeneralFunction.TASKHANDFINISH); + } + else + { + cgs.ActionComplete(deviceindex, Convert.ToInt32(dv[i]["F_MonitorIndex"]), Model.CGeneralFunction.TASKHANDFINISH); + } + } + } + } + else + { + //回写管理表 + CommonClassLib.CCarryConvert.WriteDarkCasket("调度任务管理", "调度任务手工报告完成", "托盘条码:" + barcode + ",计算机:" + id, "调度任务索引:" + fid.ToString()); + cgs.ReturnManageInfo(fid, mti, cap, true); + if (mti == 1) + { + dboMan.ExceSQL("update IO_Control set Control_STATUS=" + Model.CGeneralFunction.TASKHANDFINISH + " where Control_ID=" + fid); + } + } + + } + + #endregion + + #region 报告删除 + + else if (ActionID == Model.CGeneralFunction.TASKDELETE) + { + + // 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)lishuo 项目agv不用tcp了 + // { + // if ((ccf.GetDeviceKindIdx(Convert.ToInt32(dv[0]["F_DeviceIndex"])) == 6) && (Convert.ToInt32(dv[0]["F_Status"]) > 0)) + // {//20110110 + // StringBuilder sql = new StringBuilder(); + // sql.Remove(0, sql.Length); + // sql.Append("SELECT F_DeviceIndex,F_DeviceKindIndex, F_LocalIP, F_LocalPort, F_RemoteIP, F_RemotePort FROM T_Base_Device where F_DeviceIndex=").Append(Convert.ToInt32(dv[0]["F_DeviceIndex"])); + // dvaa = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + // if (dvaa.Count > 0) + // { + // byte[] _Sdata = new byte[16]; + + // _Sdata[0] = Convert.ToByte(60006 & 255); + // _Sdata[1] = Convert.ToByte((60006 >> 8) & 255); + // _Sdata[2] = Convert.ToByte((60006 >> 16) & 255); + // _Sdata[3] = Convert.ToByte((60006 >> 24) & 255); + // _Sdata[4] = Convert.ToByte(Convert.ToInt32(dv[0]["F_ManageTaskIndex"]) & 255); + // _Sdata[5] = Convert.ToByte((Convert.ToInt32(dv[0]["F_ManageTaskIndex"]) >> 8) & 255); + // _Sdata[6] = Convert.ToByte((Convert.ToInt32(dv[0]["F_ManageTaskIndex"]) >> 16) & 255); + // _Sdata[7] = Convert.ToByte((Convert.ToInt32(dv[0]["F_ManageTaskIndex"]) >> 24) & 255); + // _Sdata[8] = Convert.ToByte(Convert.ToInt32(dv[0]["F_MonitorIndex"]) & 255); + // _Sdata[9] = Convert.ToByte((Convert.ToInt32(dv[0]["F_MonitorIndex"]) >> 8) & 255); + // _Sdata[10] = Convert.ToByte((Convert.ToInt32(dv[0]["F_MonitorIndex"]) >> 16) & 255); + // _Sdata[11] = Convert.ToByte((Convert.ToInt32(dv[0]["F_MonitorIndex"]) >> 24) & 255); + // int ck = 60006 + Convert.ToInt32(dv[0]["F_ManageTaskIndex"]) + Convert.ToInt32(dv[0]["F_MonitorIndex"]); + // _Sdata[12] = Convert.ToByte(ck & 255); + // _Sdata[13] = Convert.ToByte((ck >> 8) & 255); + // _Sdata[14] = Convert.ToByte((ck >> 16) & 255); + // _Sdata[15] = Convert.ToByte((ck >> 24) & 255); + // SocketsTCPIP.CClientTCPIP.Send(dvaa[0]["F_RemoteIP"].ToString(), Convert.ToInt32(dvaa[0]["F_RemotePort"]), _Sdata); + // } + + // Errtext = string.Empty; + // return true; ; + // } + // } + //20110222CGetState cgs = new CGetState(); + //20090902 + 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_NumParam4,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()); + 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.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 + { + int deviceindex = 0; + if (dv[i]["F_NumParam4"].ToString() != "0" && dv[i]["F_DeviceIndex"].ToString().Substring(1, 1) == "2") + {//20120906输送机的送出指令,以终点输送机作为任务完成设备 + deviceindex = Convert.ToInt32(dv[i]["F_NumParam4"]); + } + else + { + deviceindex = Convert.ToInt32(dv[i]["F_DeviceIndex"]); + } + if (Convert.ToInt32(dv[i]["F_Status"]) >= 1) + { + int fstatus = 1; + + cgs.ActionComplete(deviceindex, Convert.ToInt32(dv[i]["F_MonitorIndex"]), Model.CGeneralFunction.TASKDELETE); + } + else + { + cgs.ActionComplete(deviceindex, Convert.ToInt32(dv[i]["F_MonitorIndex"]), Model.CGeneralFunction.TASKDELETE); + } + } + } + } + else + {//20110412 + + CommonClassLib.CCarryConvert.WriteDarkCasket("调度任务管理", "调度任务被手工删除!", "托盘条码:" + barcode, "调度任务索引:" + fid.ToString()); + + + //回写管理表 + cgs.ReturnManageInfo(fid, mti, cap, false); + if (mti == 1) + { + dboMan.ExceSQL("update IO_Control set Control_STATUS=" + Model.CGeneralFunction.TASKDELETE + " where Control_ID=" + fid); + } + } + } + + #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 + { + int mankind = ccf.GetManageTaskKindIndexFromMonitor(MonitortaskID); + int fid = ccf.GetManageTaskIndexfromMonitor(MonitortaskID); + dv = dbo.ExceSQL("SELECT * FROM T_Monitor_Task Where F_MonitorIndex=" + + 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()); + cgs.ActionComplete(DeviceIndex, MonitortaskID, Convert.ToInt32(dv[0]["F_Status"])); + //20111226有RGV的关联任务是接货定堆垛机货叉,不允许报告关联任务完成 + #endregion + } + else if (ActionID == Model.CGeneralFunction.TASKDELETE) + { + #region 指令删除 + CommonClassLib.CCarryConvert.WriteDarkCasket("设备指令管理", "手工删除设备指令", "托盘条码:" + dv[0]["F_TxtParam"].ToString(), "设备索引:" + dv[0]["F_DeviceIndex"].ToString() + ";设备指令索引:" + MonitortaskID.ToString()); + 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); + //检查关联命令一起复位 + //如果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 + } + } + 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 ModifyMonitorTask1(string id, 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(); DataView dv4 = new DataView(); + try + { + int mankind = ccf.GetManageTaskKindIndexFromMonitor(MonitortaskID); + int fid = ccf.GetManageTaskIndexfromMonitor(MonitortaskID); + dv = dbo.ExceSQL("SELECT * FROM T_Monitor_Task Where F_MonitorIndex=" + + 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() + ",计算机:" + id); + cgs.ActionComplete(DeviceIndex, MonitortaskID, Convert.ToInt32(dv[0]["F_Status"])); + //20111226有RGV的关联任务是接货定堆垛机货叉,不允许报告关联任务完成 + #endregion + } + else if (ActionID == Model.CGeneralFunction.TASKDELETE) + { + #region 指令删除 + CommonClassLib.CCarryConvert.WriteDarkCasket("设备指令管理", "手工删除设备指令", "托盘条码:" + dv[0]["F_TxtParam"].ToString(), "设备索引:" + dv[0]["F_DeviceIndex"].ToString() + ";设备指令索引:" + MonitortaskID.ToString() + ",计算机:" + id); + 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() + ",计算机:" + id, sss); + //检查关联命令一起复位 + //如果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 + } + } + 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 ModeChange(string id, int mode, out string Errtext) + { + DataView dv = new DataView(); + StringBuilder sql = new StringBuilder(); + bool li; + try + { + sql.Remove(0, sql.Length); + sql.Append("select ModeCode,Flag from ChangeInOutMode"); + dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dv.Count > 0) + { + if (Convert.ToInt32(dv[0]["ModeCode"]) != mode) + { + sql.Remove(0, sql.Length); + sql.Append("update ChangeInOutMode set ModeCode=").Append(mode); + dbo.ExceSQL(sql.ToString()); + } + } + else + { + Errtext = "没有在数据库中找到记录,模式切换失败"; + return false; + } + + Errtext = string.Empty; + return true; + } + catch (Exception ex) + { + Errtext = ex.StackTrace + ex.Message; + return false; + } + finally + { + dv.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) + { + + + } + lockstate = -1; + errcode = 998; + } + else + { + if (oldlockstate == -1) + {//上次计划检修(停用)结束 + + } + 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); + 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); + 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; + for (int kk = 0; kk < files.Length; kk++) + { + string date = BeginTime.ToString("u").Substring(0, 10); + if (files[kk].IndexOf(date) >= 0) + { + opf = files[kk]; + using (StreamReader sr = new StreamReader(opf)) + { + + sr.ReadLine(); + while (!sr.EndOfStream) + { + sp = sr.ReadLine().Split(cc, StringSplitOptions.RemoveEmptyEntries); + if (sp.GetLength(0) > 2) + { + if (sp[3].IndexOf(deviceIndex.ToString()) < 0) + { + continue; + } + + + sf = sp[0].Split(st); + dt = Convert.ToDateTime(sf[0] + ":" + sf[1] + ":" + sf[2]); + + 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.EndListen(); + CParsePLCData.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); + int deviceKind = GetDeviceKindIndex(out errtext, deviceIndex); + if ((deviceKind == 1) || (deviceKind == 6)) + { + sdo.SendDeviceOrder(0, 0, 0, deviceIndex, 0, 0, 0, 0, 0, 0); + sdo.SendDeviceOrder(ResetOrder, 0, 0, deviceIndex, 0, 0, 0, 0, 0, 0); + } + else + { + + sdo.SendDeviceOrder(0, 0, 0, deviceIndex, 0); + sdo.SendDeviceOrder(ResetOrder, 0, 0, deviceIndex, 0); + + } + _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) + { + try + { + errtext = string.Empty; + if (CStaticClass.ObtainManageTask == true) + { + if (CObtainTask.GetManagerTask() == 0) + { + errtext = CObtainTask.CObtainTaskError; + } + //lishuo呼叫空托盘 + //CObtainTask.AskForEmptyTask(); + } + 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 DealWithDeviceState(out string errtext, int deviceindex, byte[] splitbyteValue, byte[] devicestates) + {//deviceindex设备组代表的订阅,首先把设备组按照F_DBW2Address由小到大排序,拆分到具体每个设备 + + /* + // Sean-0506堆垛机动作数据接口 + mdeviceddj.XCoor = xc; + mdeviceddj.YCoor = yc; + mdeviceddj.isStretch = devicestates[tempdb2addr + 22]; + mdeviceddj.HaveGoods = devinfo.SplitByte_0; + //mdeviceddj.stcell = stcell; + try + { + using (HttpClient httpClient = new HttpClient()) + { + //httpClient.Timeout = new TimeSpan(0, 0, 120000); + using (HttpRequestMessage request = new HttpRequestMessage(new HttpMethod("Post"), "https://oapi.ywjasolar.com/jingbao/oapi/event/fixed-position")) + { + request.Headers.TryAddWithoutValidation("Content-Type", "application/json"); + request.Headers.TryAddWithoutValidation("appKey", "i6ZxguwZkBTPdhHw"); + request.Headers.TryAddWithoutValidation("appSecret", "OzZeMOe1rPQXn4CrgJY8hevsWjLHyIZZ"); + request.Content = new StringContent(JsonConvert.SerializeObject(mdeviceddj), Encoding.UTF8); + request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json"); + var result = httpClient.SendAsync(request).Result.Content.ReadAsStringAsync().Result; + if (result == "") + { + return false; + } + } + } + } + catch (Exception ex) + { + return false; + } + */ + + lock (thisLock) + { + if ((splitbyteValue == null) && (devicestates == 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 dv = new DataView(); DataView dvsp = new DataView(); DataView dvbc = new DataView(); + DataView dv1 = new DataView(); DataView dv2 = new DataView(); DataView dv3 = new DataView(); + int devicebegin = 0; int DBW2Addressbegin = 0; int SplitBytebegin = 0; string S7Connection = string.Empty; + int SplitByteLength = 0; + + try + { + StringBuilder sql = new StringBuilder(string.Format("SELECT F_DeviceKindIndex,F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte,F_S7Connection FROM T_Base_Device WHERE (F_DeviceKindIndex <>33) AND (F_ReadSubscription = '{0}') AND (F_DBW2Address IS NOT NULL) ORDER BY F_DBW2Address", deviceindex)); + dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dv.Count > 0) + { + devicebegin = Convert.ToInt32(dv[0]["F_DeviceIndex"]); + DBW2Addressbegin = Convert.ToInt32(dv[0]["F_DBW2Address"]); + //lishuo 类型7时条码,40是停车,17拆盘机,18码盘机,35入库申请不检测有货开关 + if (Convert.ToInt32(dv[0]["F_DeviceKindIndex"]) != 7 && Convert.ToInt32(dv[0]["F_DeviceKindIndex"]) != 40 && Convert.ToInt32(dv[0]["F_DeviceKindIndex"]) != 17 && Convert.ToInt32(dv[0]["F_DeviceKindIndex"]) != 18 && Convert.ToInt32(dv[0]["F_DeviceKindIndex"]) != 35) + { + SplitBytebegin = Convert.ToInt32(dv[0]["F_SplitByte"]); // 光电开关起始 + } + S7Connection = dv[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)); + dvsp = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dvsp.Count > 0) + { + SplitByteLength = Convert.ToInt32(dvsp[0]["F_DBWGetLength"]); + } + //devicebegin = Convert.ToInt32(dv[0]["F_DeviceIndex"]); + //DBW2Addressbegin = Convert.ToInt32(dv[0]["F_DBW2Address"]); + //SplitBytebegin = Convert.ToInt32(dv[0]["F_SplitByte"]); + //S7Connection = dv[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)); + //dvsp = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + //if (dvsp.Count > 0) + //{ + // SplitByteLength = Convert.ToInt32(dvsp[0]["F_DBWGetLength"]); + //} + } + else + { + sql = new StringBuilder(string.Format("SELECT F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte,F_S7Connection FROM WHERE (F_DeviceIndex = '{0}') AND (F_DBW2Address IS NOT NULL) ORDER BY F_DBW2Address", deviceindex)); + dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dv.Count > 0) + { + devicebegin = Convert.ToInt32(dv[0]["F_DeviceIndex"]); + DBW2Addressbegin = Convert.ToInt32(dv[0]["F_DBW2Address"]); + SplitBytebegin = Convert.ToInt32(dv[0]["F_SplitByte"]); + S7Connection = dv[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)); + dvsp = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dvsp.Count > 0) + { + SplitByteLength = Convert.ToInt32(dvsp[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 I/O点字节集合采集分解 + + if (splitbyteValue != null) + { + Array.Copy(splitbyteValue, CStaticClass.MutiReadSubscriptionDeviceSplitReturns[deviceindex.ToString()], splitbyteValue.Length); + dvsp = dbo.ExceSQL(string.Format("SELECT F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte FROM T_Base_Device WHERE (F_DeviceKindIndex <>31) AND(F_DeviceKindIndex <>33) AND (F_S7Connection = '{0}') AND (F_DBW2Address IS NOT NULL and F_SplitByte IS NOT NULL and F_SplitByte >={1} and F_SplitByte <{1}+{2}) ORDER BY F_DBW2Address", S7Connection, SplitBytebegin, SplitByteLength)).Tables[0].DefaultView; + for (int i = 0; i < dvsp.Count; i++) + { + devinfo = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(dvsp[i]["F_DeviceIndex"])); + + int delta = Convert.ToInt32(dvsp[i]["F_SplitByte"]) - SplitBytebegin; + if (delta < 0) continue; + devinfo.SplitByte_0 = (splitbyteValue[delta] & 1) == 1 ? 1 : 0; + devinfo.SplitByte_1 = (splitbyteValue[delta] & 2) == 2 ? 1 : 0; + devinfo.SplitByte_2 = (splitbyteValue[delta] & 4) == 4 ? 1 : 0; + devinfo.SplitByte_3 = (splitbyteValue[delta] & 8) == 8 ? 1 : 0; + devinfo.SplitByte_4 = (splitbyteValue[delta] & 16) == 16 ? 1 : 0; + devinfo.SplitByte_5 = (splitbyteValue[delta] & 32) == 32 ? 1 : 0; + devinfo.SplitByte_6 = (splitbyteValue[delta] & 64) == 64 ? 1 : 0; + devinfo.SplitByte_7 = (splitbyteValue[delta] & 128) == 128 ? 1 : 0; + Model.CGetInfo.SetDeviceInfo(devinfo); + //CDeviceStateChangeEventArgs csce = new CDeviceStateChangeEventArgs(devinfo); + //OnDeviceState("SControlMonitor.DealWithDeviceState", csce); + } + } + + #endregion + + #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 < dv.Count; di++) + { + + int devidx = Convert.ToInt32(dv[di]["F_DeviceIndex"]); + devinfo = Model.CGetInfo.GetDeviceInfo(devidx); + witemnames[0].Clear(); + witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(".").Append(Convert.ToString(devinfo.Dbw1Address + 0)).Append(",b");//20130510 + sdo = CommModeCreate.CreateSendDeviceOrder(devidx); + int taskindex = 0; int state = 0; + int taskindex2 = 0, taskindex3 = 0; + //以下代码重新开发CStaticClass.MutiS7ConnReturns改为按照F_ReadSubscription + tempdb2addr = Convert.ToInt32(dv[di]["F_DBW2Address"]) - DBW2Addressbegin; + if (3 < devinfo.Dbw2Getlength) + { + taskindex = (devicestates[tempdb2addr + 2] << 8) + devicestates[tempdb2addr + 3]; + + } + if (((devidx >= 32665) && (devidx <= 32668)) || ((devidx >= 42616) && (devidx <= 42619))) + {//20120906电气在三楼四楼配三叉 + taskindex2 = (devicestates[tempdb2addr + 4] << 8) + devicestates[tempdb2addr + 5]; + taskindex3 = (devicestates[tempdb2addr + 6] << 8) + devicestates[tempdb2addr + 7]; + + } + if (1 < devinfo.Dbw2Getlength) + { + state = devicestates[tempdb2addr + 1]; + } + int xc = 0; int yc = 0; int zc = 0; + int devkind = ccf.GetDeviceKindIdx(devidx); + switch (devkind) + { + case 1: + devinfo.SplitByte_0 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 67] & 1) == 1 ? 1 : 0; + devinfo.SplitByte_1 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 67] & 2) == 2 ? 1 : 0; + devinfo.SplitByte_2 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 67] & 4) == 4 ? 1 : 0; + devinfo.SplitByte_3 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 67] & 8) == 8 ? 1 : 0; + devinfo.SplitByte_4 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 67] & 16) == 16 ? 1 : 0; + devinfo.SplitByte_5 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 67] & 32) == 32 ? 1 : 0; + devinfo.SplitByte_6 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 67] & 64) == 64 ? 1 : 0; + devinfo.SplitByte_7 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 67] & 128) == 128 ? 1 : 0; + break; + case 2: + if (devinfo.IfCorrelDoubleFork == "1") + { + devinfo.SplitByte_0 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 4] & 1) == 1 ? 1 : 0; + devinfo.SplitByte_1 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 4] & 2) == 2 ? 1 : 0; + devinfo.SplitByte_2 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 4] & 4) == 4 ? 1 : 0; + devinfo.SplitByte_3 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 4] & 8) == 8 ? 1 : 0; + devinfo.SplitByte_4 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 4] & 16) == 16 ? 1 : 0; + devinfo.SplitByte_5 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 4] & 32) == 32 ? 1 : 0; + devinfo.SplitByte_6 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 4] & 64) == 64 ? 1 : 0; + devinfo.SplitByte_7 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 4] & 128) == 128 ? 1 : 0; + } + else + { + devinfo.SplitByte_0 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 16] & 1) == 1 ? 1 : 0; + devinfo.SplitByte_1 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 16] & 2) == 2 ? 1 : 0; + devinfo.SplitByte_2 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 16] & 4) == 4 ? 1 : 0; + devinfo.SplitByte_3 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 16] & 8) == 8 ? 1 : 0; + devinfo.SplitByte_4 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 16] & 16) == 16 ? 1 : 0; + devinfo.SplitByte_5 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 16] & 32) == 32 ? 1 : 0; + devinfo.SplitByte_6 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 16] & 64) == 64 ? 1 : 0; + devinfo.SplitByte_7 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 16] & 128) == 128 ? 1 : 0; + } + break; + case 4: + devinfo.SplitByte_0 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 8] & 1) == 1 ? 1 : 0; + devinfo.SplitByte_1 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 8] & 2) == 2 ? 1 : 0; + devinfo.SplitByte_2 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 8] & 4) == 4 ? 1 : 0; + devinfo.SplitByte_3 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 8] & 8) == 8 ? 1 : 0; + devinfo.SplitByte_4 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 8] & 16) == 16 ? 1 : 0; + devinfo.SplitByte_5 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 8] & 32) == 32 ? 1 : 0; + devinfo.SplitByte_6 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 8] & 64) == 64 ? 1 : 0; + devinfo.SplitByte_7 = (devicestates[tempdb2addr + (int)devinfo.Dbw2Getlength - 8] & 128) == 128 ? 1 : 0; + break; + default: + break; + } + 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 + { + string errText = string.Empty; + 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 + { + 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; + + + } + } + devinfo.TaskNo = taskindex; + if ((devinfo.DeviceKind == 1) || (devinfo.DeviceKind == 4)) + { + 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坐标 + + + } + } + #region 设备被停用时,不显示真实状态20120820 + //if (ccf.GetDeviceLockedState(devidx) == -1) devinfo.RunState = 4;//20121203 + #endregion + 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 (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坐标 + //xc = devicestates[tempdb2addr + 12] ;//X坐标 + //yc = devicestates[tempdb2addr + 13] ;//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).Append("**巷道坐标" + zc); + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到堆垛机状态", devidx.ToString(), sss.ToString()); + cgs.GetKindDeviceState(taskindex, devidx, state); + } + + //if (devicestates[tempdb2addr + 0] != 1) continue; + if ((state <= 0) || (taskindex <= 0)) + { + continue; + } + break; + #endregion + + #region 类输送机 + case 2: + 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; + //lishuo 这里去掉taskindex <= 0因为电气垛机放货站台运行上报不了任务号 + if (state <= 0) //|| taskindex <= 0)//20120906 + { + 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 + DataView dvr = dbo.ExceSQL(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)).Tables[0].DefaultView; + 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)); + } + + } + cgs.ActionComplete(dev1, taskindex, 1); + cgs.ActionComplete(dev2, taskindex2, 1); + cgs.ActionComplete(dev3, taskindex3, 1); + #endregion + } + else + { + //if (state == 1) + //{ + // //lishuo 垛机放货站台不能上报任务号,这里只能写死站台号,来清理这个逻辑有货 + // if (IsLaneGate.Contains(devidx)) + // { + // dbo.ExceSQL(string.Format("UPDATE T_Base_Device SET F_HaveGoods=0 WHERE F_DeviceIndex={0}", devidx)); + // } + //} + if (taskindex > 0) + { + cgs.GetKindDeviceState(taskindex, devidx, state); + } + } + break; + #endregion + + #region 穿梭车RGV + case 4: + 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()); + cgs.GetKindDeviceState(taskindex, devidx, state); + } + if (devicestates[tempdb2addr + 0] != 1) continue; + if ((state <= 0) || (taskindex <= 0)) + { + continue; + } + + break; + #endregion + + #region 条形码字符串信息 + case 7: + if (devicestates[tempdb2addr + 0] != 1) continue; + //20140109申请任务(任务不存在)或者条码比对(任务已经存在) + dvsp = 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,F_BarCode from T_Base_PLC_Ask WHERE (F_DeviceIndex = {0}) ", devidx)).Tables[0].DefaultView; //20130510F_ManageAskkind + if (dvsp.Count > 0) + { + StringBuilder warehouse = new StringBuilder(dvsp[0]["F_WareHouse"].ToString()); + int dcode = Convert.ToInt32(dvsp[0]["F_BindingDevice"]); + int apptype = Convert.ToInt32(dvsp[0]["F_ManageAskkind"]);//20130510 + int BarcodeForkAmount = Convert.ToInt32(dvsp[0]["F_BarcodeForkAmount"]); //多叉堆垛机的货叉数量 + int BoxQuality = devicestates[tempdb2addr + 1];//检尺信息,只要是上报条码必须预留数量字节,大于30是报警 + //lishuo 称重的四个字节 2.3.4.5 + + //byte[] temp1 = new byte[4]; + //temp1[0] = devicestates[tempdb2addr + 5]; + //temp1[1] = devicestates[tempdb2addr + 4]; + //temp1[2] = devicestates[tempdb2addr + 3]; + + //temp1[3] = devicestates[tempdb2addr + 2]; + //float weight = BitConverter.ToSingle(temp1, 0); + //int weight = devicestates[tempdb2addr + 2]; + //byte[] weightbyte = new byte[4] { devicestates[tempdb2addr + 2], devicestates[tempdb2addr + 3], devicestates[tempdb2addr + 4], devicestates[tempdb2addr + 5] }; + //float weights = CommonClassLib.CCarryConvert.ByteToFloat(weightbyte);//重量信息 + + int weight = devicestates[tempdb2addr + 5] + (devicestates[tempdb2addr + 4] << 8) + (devicestates[tempdb2addr + 3] << 16) + (devicestates[tempdb2addr + 2] << 32); + + bool flag = false;//lishuo 山东 不需要读一朵垛多个条码 + + int BarcodeLength = Convert.ToInt32(dvsp[0]["F_BarcodeLength"]);//多叉堆垛机取货站台上报条码、周转箱叠箱、托盘码垛 + int BarcodeReservedLength = Convert.ToInt32(dvsp[0]["F_BarcodeReservedLength"]);//多叉堆垛机取货站台上报条码、周转箱叠箱、托盘码垛 + if (BarcodeReservedLength < BarcodeLength) + { + BarcodeReservedLength = BarcodeLength; + } + int BarcodeTotalLength = BarcodeReservedLength * BoxQuality; + int PalletBarcodeLength = Convert.ToInt32(dvsp[0]["F_PalletBarcodeLength"]);//电力纸箱码垛机器人专用\普通条码申请 + int PalletBarcodeReservedLength = Convert.ToInt32(dvsp[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' + } + for (int j = 0; j < BarcodeForkAmount; j++) + {//多叉堆垛机,在取货前上报条码格式:头+数量+条码//20140218 + appbarArray[j] = new StringBuilder(ASCIIEncoding.ASCII.GetString(devicestates, tempdb2addr + 2 + j * BarcodeReservedLength, BarcodeReservedLength).Substring(0, BarcodeLength)); + + } + barcode.Clear(); + incompleteBarcode.Clear(); + if (PalletBarcodeLength > 0) + { + for (int j = 1; j <= PalletBarcodeLength; j++) + {//20150103 + incompleteBarcode.Append("1");//PLC扫到残码,但是有货物,转换为字符'1' + noneBarcode.Append("0");//PLC没扫描,没货物,保留的空值0,转换为字符'\0' + } + var dbBegin = 10; + if (deviceindex == 36001 || deviceindex == 36002 || deviceindex == 36003 || deviceindex == 36004 || deviceindex == 36005) + { + dbBegin = 2; + } + //普通扫描单箱的条码申请\机器人码垛的托盘条码 + for (int j = 0; j < PalletBarcodeLength; j++) + { + barcode.Append(Convert.ToChar(devicestates[tempdb2addr + dbBegin + j]).ToString().ToUpper()); + } + + } + //lishuo BarcodeLength=0时就不会进入了 + if (BoxQuality > 0 && BarcodeLength > 0)//20140218 + {//周转箱叠箱和机器人码垛的(除托盘条码)表箱条码组 + if (flag) + { + for (int i = 0; i < BoxQuality; i++) + { + StringBuilder tempparam = new StringBuilder(); + for (int ii = 0; ii < BarcodeLength; ii++) + {//周转箱叠箱时PalletBarcodeLength=0和PalletBarcodeReservedLength=0 + tempparam.Append(Convert.ToChar(devicestates[PalletBarcodeReservedLength + 3 + i * BarcodeReservedLength + ii]).ToString().ToUpper().TrimEnd('|'));//20131106richard + } + if (tempparam.ToString() == incompleteBarcode.ToString())//扫到残码,但是有货物 + {//自动生成条码“9+dvsp[0]["F_BindingDevice"]+顺序号” + //tempparam.Clear(); + //tempparam.Append(GetErrorBarcode(dcode, devidx, BarcodeLength)); + } + parameter.Append(tempparam); + if (i < BoxQuality - 1) + { + parameter.Append('|'); + } + if ((i == 0) && (barcode.Length == 0)) + {//托盘垛或者箱垛记录最上面的条码作为记录 + barcode = tempparam; + } + } + } + + } + if (IsEquals(devinfo.ReturnMessage, states, states.Length) == false) + { + + devinfo.ReturnMessage = states; + Model.CGetInfo.SetDeviceMessage(devinfo); + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "读PLC条码", devidx.ToString(), "读标志1**条码:" + barcode.ToString().ToUpper()); + + } + + #endregion + + //20130831richard + DateTime appdt = new DateTime(); + if (dvsp[0]["F_Time"] == DBNull.Value) + { + appdt = DateTime.Now.AddSeconds(-10); + } + else + { + DateTime.TryParse(dvsp[0]["F_Time"].ToString(), out appdt); + + } + + if (dvsp[0]["F_BarCode"] != DBNull.Value) + { + if ((appdt.AddSeconds(5) > DateTime.Now) && (dvsp[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()); + 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); + break; + } + + }//20130831richard + #region + //if (Hight >= 30 ) + //{ + // StringBuilder dtime = new StringBuilder(DateTime.Now.ToString("u")); + // dtime.Remove(dtime.Length - 1, 1); + + + + // //int appid = dboMan.GetManageTableIndex("IO_CONTROL_APPLY", true);//CONTROL_APPLY_ID + // string errortext = string.Empty; + // switch (Hight) + // { + // case 31: + // errortext = "货物超高"; + // break; + // case 40: + // errortext = "货物左超宽"; + // break; + // case 41: + // errortext = "货物右超宽"; + // break; + // case 42: + // errortext = "货物前超长"; + // break; + // case 30: + // errortext = "条码未扫描到"; + // break; + // case 43: + // errortext = "货物后超长"; + // break; + // case 44: + // errortext = "货物超重"; + // break; + // } + // int appid = dboMan.GetManageTableIndex("IO_CONTROL_APPLY", false);//CONTROL_APPLY_ID + // object[] ob = new object[8] { 1, dcode, 0, dtime, warehouse.ToString(), errortext, barcode,appid }; + // try + // { + // string sql12 = string.Format("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_TYPE,DEVICE_CODE, APPLY_TASK_STATUS, CREATE_TIME,WAREHOUSE_CODE,Error_Text,STOCK_BARCODE,CONTROL_APPLY_ID)VALUES ({0},'{1}','{2}','{3}','{4}','{5}','{6}',{7})", ob); + // dboMan.ExecuteSql(sql12); + // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条报告错误信息:", devidx.ToString(), ",站台:" + ",错误原因:" + errortext);//20140218 + // 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); + + // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "写条码应答", devidx.ToString(), "写标志2**源条码:" + barcode.ToString().ToUpper()); + + // dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_Time='{2}', F_BarCode = '{1}' WHERE (F_DeviceIndex = {0}) ", devidx, barcode.ToString(), DateTime.Now)); + // } + // catch (Exception ex) + // { + // RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务时发生错误:" + ex.StackTrace + ex.Message); + // OnRefreshMonitor(rmea); + // continue;//20140218 + // } + + // break; + //} + #endregion + switch (dvsp[0]["F_Askkind"].ToString()) + { + case "4": + //普通条码申请任务 + #region 普通条码申请任务 + + #region 扫到残码 + //if (barcode.ToString() == incompleteBarcode.ToString()) + //{//扫到残码 + // //lishuo 宁德极片库条码没扫到等电气重新上报 + // 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); + // dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_Time='{2}', F_BarCode = '{1}' WHERE (F_DeviceIndex = {0}) ", devidx, barcode.ToString(), DateTime.Now)); + // continue; + //} + #endregion + + #region 向管理申请任务 + 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}')", dcode, barcode)).Tables[0].DefaultView; + if (dvbc.Count <= 0) + { + //lishuo 17006暂时不用 + if (devidx != 17006) + { + StringBuilder dtime = new StringBuilder(DateTime.Now.ToString("u")); + dtime.Remove(dtime.Length - 1, 1); + //lishuo 条码上报时加入检尺信息 + //lishuo 加入重量信息 + //object[] ob = new object[9] { apptype, dcode, barcode, 0, dtime, warehouse.ToString(), 1, BoxQuality.ToString(), weights }; + object[] ob = new object[9] { apptype, dcode, barcode, 0, dtime, warehouse.ToString(), 1, BoxQuality.ToString(), weight }; + try + { + string sql12 = string.Format("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,WAREHOUSE_CODE,CELL_MODEL,GOODS_WEIGHT)VALUES ({0},'{1}','{2}',{3},'{4}',{5},'{7}',{8})", ob); + dboMan.ExecuteSql(sql12); + //CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务:", devidx.ToString(), ",站台:" + dcode + ",条码:" + barcode.ToString().ToUpper() + ",检尺信息:" + BoxQuality.ToString() + ",重量信息:" + weights.ToString());//20140218 + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务:", devidx.ToString(), ",站台:" + dcode + ",条码:" + barcode.ToString().ToUpper() + ",检尺信息:" + BoxQuality.ToString() + ",重量信息:" + weight.ToString());//20140218 + } + catch (Exception ex) + { + RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务时发生错误:" + ex.StackTrace + ex.Message); + OnRefreshMonitor(rmea); + continue;//20140218 + } + } + } + else + { + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "存在相同申请未处理,没有向管理条码申请任务:", devidx.ToString(), ",站台:" + dcode + ",条码:" + barcode.ToString().ToUpper());//20140218 + } + #endregion + + #endregion + break; + case "7": + //叠盘机前条码扫描器申请入库任务 + + break; + case "9": + //lishuo 湖西6出库输送机条码报完成,无比对指令 + DataView dvll = new DataView(); + if ((barcode.ToString() == incompleteBarcode.ToString()) || (string.IsNullOrEmpty(barcode.ToString().Replace("\0", ""))))//没扫到条码用任务号报完成 + { + barcode.Clear(); + barcode.Append(incompleteBarcode.ToString()); + int taskno = devicestates[tempdb2addr + 29] + (devicestates[tempdb2addr + 28] << 8) + (devicestates[tempdb2addr + 27] << 16) + (devicestates[tempdb2addr + 26] << 32); + dvll = 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_MonitorIndex ={0})", taskno)).Tables[0].DefaultView; + if (dvll.Count > 0) + { + int mankind = Convert.ToInt32(dvll[0]["F_ManageTASKKINDINDEX"]); + int FID = Convert.ToInt32(dvll[0]["F_ManageTaskIndex"]); + if ((ccf.GetDeviceKindIdx(Convert.ToInt32(dvll[0]["F_DeviceIndex"])) == 2) && ((dvll[0]["F_DeviceCommandIndex"].ToString() == "6") || (dvll[0]["F_DeviceCommandIndex"].ToString() == "11")) || (ccf.GetDeviceKindIdx(Convert.ToInt32(dvll[0]["F_DeviceIndex"])) == 7)) + { + int ctype = ccf.GetFCONTROLTASKTYPEFromManageTask(mankind, FID); + if ((dvll[0]["F_NumParam4"].ToString() == dcode.ToString())) + {//目的地址正确 + cgs.ActionComplete(dcode, Convert.ToInt32(dvll[0]["F_MonitorIndex"]), 0); + } + + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码报完成", dcode.ToString(), "未扫到该条码的任务,寻找任务号完成!"); + + } + } + } + else//扫到条码 + { + try + { + //dvll = 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.ToString())).Tables[0].DefaultView; + //if (dvll.Count > 0)//找到正确的条码了 + //{ + // int mankind = Convert.ToInt32(dvll[0]["F_ManageTASKKINDINDEX"]); + // int FID = Convert.ToInt32(dvll[0]["F_ManageTaskIndex"]); + // if ((ccf.GetDeviceKindIdx(Convert.ToInt32(dvll[0]["F_DeviceIndex"])) == 2) && ((dvll[0]["F_DeviceCommandIndex"].ToString() == "6") || (dvll[0]["F_DeviceCommandIndex"].ToString() == "11")) || (ccf.GetDeviceKindIdx(Convert.ToInt32(dvll[0]["F_DeviceIndex"])) == 7)) + // { + // int ctype = ccf.GetFCONTROLTASKTYPEFromManageTask(mankind, FID); + // if ((dvll[0]["F_NumParam4"].ToString() == dcode.ToString())) + // {//正确 + // cgs.ActionComplete(dcode, Convert.ToInt32(dvll[0]["F_MonitorIndex"]), 0); + // } + // } + //} + //else//没找到条码,重新找指令号 + //{ + int taskno = devicestates[tempdb2addr + 29] + (devicestates[tempdb2addr + 28] << 8) + (devicestates[tempdb2addr + 27] << 16) + (devicestates[tempdb2addr + 26] << 32); + dvll = 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_MonitorIndex ={0})", taskno)).Tables[0].DefaultView; + if (dvll.Count > 0) + { + int mankind = Convert.ToInt32(dvll[0]["F_ManageTASKKINDINDEX"]); + int FID = Convert.ToInt32(dvll[0]["F_ManageTaskIndex"]); + if ((ccf.GetDeviceKindIdx(Convert.ToInt32(dvll[0]["F_DeviceIndex"])) == 2) && ((dvll[0]["F_DeviceCommandIndex"].ToString() == "6") || (dvll[0]["F_DeviceCommandIndex"].ToString() == "11")) || (ccf.GetDeviceKindIdx(Convert.ToInt32(dvll[0]["F_DeviceIndex"])) == 7)) + { + int ctype = ccf.GetFCONTROLTASKTYPEFromManageTask(mankind, FID); + if ((dvll[0]["F_NumParam4"].ToString() == dcode.ToString())) + {//目的地址正确,但是应该给wms上报异常完成 + object[] obj = new object[3] { mankind, FID, Model.CGeneralFunction.TASKABEND }; + dbo.ExecuteSql(string.Format("UPDATE T_Manage_Task SET FExceptionNO={2} WHERE (F_ManageTaskKindIndex ={0}) AND (FID ={1})", obj)); + cgs.ActionComplete(dcode, Convert.ToInt32(dvll[0]["F_MonitorIndex"]), 0); + } + + } + //} + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码报完成", dcode.ToString(), "扫到条码但找不到该条码的任务,寻找任务号完成!"); + RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.BarcodeComplete时," + dcode.ToString() + ",扫到条码但找不到该条码的任务,寻找任务号完成!"); + OnRefreshMonitor(rmea); + } + } + catch (Exception ex) + { + + } + } + break; + + case "13": + //条码报告完成,考虑第一个扫描器没扫到,但是第二个扫描器却扫到 + //没扫到或者有码无对应任务的改道异常口 + #region 条码报告完成 + + //if (barcode.ToString() == incompleteBarcode.ToString()) + //{//扫到残码 + // #region 是否具备申请任务扫码条件 + // int[] statess; + // statess = CStaticClass.GetDeviceState(Convert.ToInt32(dvsp[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(dvsp[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(), ",站台:" + dvsp[0]["F_BindingDevice"].ToString() + ",出口开关没填写记录!"); + // rmea = new RefreshMonitorEventArgs("notifyIcon1", "警告:条码扫描器申请入库任务:" + dvsp[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(dvsp[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, dvsp[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 + //{ + BarcodeComplete(devidx, dcode, barcode.ToString(), dvsp[0]["F_Remark"].ToString()); + //} + #endregion + + break; + + case "14": + //PLC控制机器人码垛,成功后上报数量、托盘条码和所有表“设备”条码 + #region PLC控制机器人码垛,成功后上报数量、托盘条码和所有表“设备”条码,申请码垛任务 + if (barcode.ToString().Length > 0) + { + #region 向管理申请码盘后入库任务 + + #region MyRegion + + sql.Remove(0, sql.Length); + sql.Append("SELECT FPALLETBARCODE,FSTARTDEVICE FROM T_Manage_Task where FSTARTDEVICE=").Append(dcode).Append(" AND FPALLETBARCODE='").Append(barcode).Append("'"); + //20091128 + dvbc = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dvbc.Count > 0) + { + wv[0].Clear(); + wv[0].Append("2"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", dcode.ToString() + "码盘位,托盘条码:" + barcode + ",重复收到码盘结束信号!发生时间:" + DateTime.Now.ToString("u")); + OnRefreshMonitor(rmea); + errtext = "SControlMonitor.DealWithDeviceState时" + dcode.ToString() + "码盘位,托盘条码:" + barcode + ",重复收到码盘结束信号!发生时间:" + DateTime.Now.ToString("u"); + continue; + + } + + + //20090922 + sql.Remove(0, sql.Length); + sql.Append("SELECT STOCK_BARCODE,START_DEVICE_CODE FROM IO_CONTROL where START_DEVICE_CODE=").Append(dcode).Append(" AND STOCK_BARCODE='").Append(barcode).Append("'"); + dvbc = dboMan.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dvbc.Count > 0) + { + wv[0].Clear(); + wv[0].Append("2"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", dcode.ToString() + "码盘位,托盘条码:" + barcode + ",重复收到码盘结束信号!发生时间:" + DateTime.Now.ToString("u")); + OnRefreshMonitor(rmea); + errtext = "SControlMonitor.DealWithDeviceState时" + dcode.ToString() + "码盘位,托盘条码:" + barcode + ",重复收到码盘结束信号!发生时间:" + DateTime.Now.ToString("u"); + continue; + + } + + sql.Remove(0, sql.Length); + sql.Append("SELECT DEVICE_CODE,STOCK_BARCODE FROM IO_CONTROL_APPLY WHERE APPLY_TASK_STATUS=0 and DEVICE_CODE='").Append(dcode).Append("' and (STOCK_BARCODE = '").Append(barcode).Append("')"); + dvbc = dboMan.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dvbc.Count > 0) + { + wv[0].Clear(); + wv[0].Append("2"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", string.Format("SControlMonitor.DealWithDeviceState时向管理申请码垛入库任务时,申请的任务条码:{0}已经存在!", barcode.ToString())); + OnRefreshMonitor(rmea); + errtext = string.Format("SControlMonitor.DealWithDeviceState时向管理申请码垛入库任务时,申请的任务条码:{0}已经存在!", barcode.ToString()); + continue; + } + #endregion + + //向管理申请入库任务 + string dtime = DateTime.Now.ToString("u"); + dtime = dtime.Substring(0, dtime.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(dtime).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 = 14) AND (F_BindingDevice = ").Append(dvsp[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 "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+dvsp[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 dtime = DateTime.Now.ToString("u"); + dtime = dtime.Substring(0, dtime.Length - 1); + int appid = dboMan.GetManageTableIndex("IO_CONTROL_APPLY", true);//CONTROL_APPLY_ID + object[] ob = new object[8] { apptype, devbinds.ToString(), parameter.ToString(), 0, dtime, "", 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}')", ob)); + 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": + #region 16,PLC入库扫码申请分道 + //异步调用管理系统的服务,true:可以入库;false剔出 + //object asyncState = new object(); + + //AsyncCallback cb = new AsyncCallback(FactorizeCallback); + + // IAsyncResult ar = g_manageService.BeginManageInStorageCheckout(barcode.ToString(), dcode.ToString(), cb, asyncState); + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "调用管理分道时:", dcode.ToString(), ",条码:" + barcode); + //g_manageService.ManageInStorageCheckoutAsync(barcode.ToString(), dcode.ToString()); + #endregion + + break; + case "17": + + #region 叠箱机上报个数和箱条码 + + if (parameter.ToString().Length > 0) + { + #region 向管理申请叠箱后入库任务 + + + //向管理申请入库任务 + string dtime = DateTime.Now.ToString("u"); + dtime = dtime.Substring(0, dtime.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(dtime).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(dvsp[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 "40": + //lishuo 湖西6垛机条码比对 此处记录条码,命令发送时进行条码报完成 + if ((barcode.ToString() == incompleteBarcode.ToString()) || (string.IsNullOrEmpty(barcode.ToString().Replace("\0", "")))) + { + barcode.Clear(); + barcode.Append(incompleteBarcode.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); + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "写条码应答", devidx.ToString(), "写标志" + flag + "**源条码:" + barcode.ToString().ToUpper()); + break; + default: + //无类型,条码比对或者记录条码 + + break; + } + + 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); + + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "写条码应答", devidx.ToString(), "写标志2**源条码:" + barcode.ToString().ToUpper()); + + dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_Time='{2}', F_BarCode = '{1}' WHERE (F_DeviceIndex = {0}) ", devidx, barcode.ToString(), DateTime.Now)); + + } + 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); + 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); + 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 + dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + + if (dv.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(dv[0]["F_MonitorIndex"]).Append(""); + dbo.ExceSQL(sql.ToString()); + } + + ResetSendorder(askDevice, Convert.ToInt32(dv[0]["F_MonitorIndex"]), GetRouteIDsub(askDevice), Convert.ToInt32(dv[0]["F_NumParam4"])); + wv[0].Remove(0, wv[0].Length); + wv[0].Append("4"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + } + else + { + //35申请的设备号和条形码不匹配 + wv[0].Remove(0, wv[0].Length); + wv[0].Append("35"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + 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 + dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + + if (dv.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(dv[0]["F_MonitorIndex"]); + dbo.ExceSQL(sql.ToString()); + } + + ResetSendorder(askDevice, taskindex, GetRouteIDsub(askDevice), Convert.ToInt32(dv[0]["F_NumParam4"])); + wv[0].Remove(0, wv[0].Length); + wv[0].Append("4"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + } + else + { + //36申请的设备号和任务号不匹配 + wv[0].Remove(0, wv[0].Length); + wv[0].Append("36"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + 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); + 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"); + dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dv.Count > 0) + { + AssociateComplete(askDevice, Convert.ToInt32(dv[0]["F_MonitorIndex"])); + wv[0].Remove(0, wv[0].Length); + wv[0].Append("2"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + } + else + { + //30申请的条码号不存在 + wv[0].Remove(0, wv[0].Length); + wv[0].Append("30"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + 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"); + dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dv.Count > 0) + { + AssociateComplete(askDevice, Convert.ToInt32(dv[0]["F_MonitorIndex"])); + wv[0].Remove(0, wv[0].Length); + wv[0].Append("2"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + } + else + { + //31申请的任务号不存在 + wv[0].Remove(0, wv[0].Length); + wv[0].Append("31"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + 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); + 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"); + dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dv.Count > 0) + { + DeleteDeviceTask(Convert.ToInt32(dv[0]["F_MonitorIndex"])); + wv[0].Remove(0, wv[0].Length); + wv[0].Append("3"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + } + else + { + //30申请的条码号不存在 + wv[0].Remove(0, wv[0].Length); + wv[0].Append("30"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + 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"); + dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dv.Count > 0) + { + DeleteDeviceTask(Convert.ToInt32(dv[0]["F_MonitorIndex"])); + wv[0].Remove(0, wv[0].Length); + wv[0].Append("3"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + } + else + { + //31申请的任务号不存在 + wv[0].Remove(0, wv[0].Length); + wv[0].Append("31"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + 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); + 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); + 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); + 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); + 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); + 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); + } + else + { + //33申请的条码号不存在 + wv[0].Remove(0, wv[0].Length); + wv[0].Append("33"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + 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 + cgs.GetKindDeviceState(GetMonitorTaskIndexFromBarCode(barcode, devinfo), devidx, state); + } + else + {//20120405error + cgs.GetKindDeviceState(taskindex, devidx, state); + } + + break; + + #endregion + + #region 到抓取位的两组一号工程码信息 + case 21: + #region 获取一号工程码信息F_Askkind=8 + //F_BindingDevice 绑定设备号+“7”代表存放机器人抓取位的两箱一号工程码的“设备” + //F_BindingDevice 绑定设备号+“8”代表存放码垛位码垛信息的“设备” + sql.Remove(0, sql.Length); + sql.Append("SELECT F_DeviceIndex, F_FirstProject,F_BoxBarcode,F_HaveFirstProject, F_Askkind, F_BindingDevice,F_DoubleFirstProject FROM T_Base_PLC_Ask WHERE (F_Askkind = 8) AND (F_BindingDevice = ").Append(devidx.ToString().Substring(0, devidx.ToString().Length - 1)).Append(")"); + dvsp = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dvsp.Count > 0) + { + barcode.Clear(); + for (int j = 0; j <= 32; j++) + { + barcode.Append(devicestates[tempdb2addr + j].ToString().ToUpper()); + + } + string bcp = barcode.ToString().Substring(1); + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "到抓取位的两组一号工程码:", devidx.ToString(), bcp); + string bar1 = "", bar2 = ""; + string ExceptionCode = "0"; + + bar1 = bcp.Substring(0, 16); + bar2 = bcp.Substring(16, 16); + + if ((bar1 == "0000000000000000") || (bar1 == "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0")) + { + + if (dvsp[0]["F_HaveFirstProject"].ToString() == "1") + { + ExceptionCode = "800"; + } + else + { + ExceptionCode = "0"; + } + bcp = ""; + } + else + { + if (dvsp[0]["F_HaveFirstProject"].ToString() == "1") + { + ExceptionCode = "0"; + + } + else + { + ExceptionCode = "800"; + } + bcp = bar1; + } + if ((bar2 != "0000000000000000") && (bar2 != "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0")) + { + if (dvsp[0]["F_HaveFirstProject"].ToString() != "1") + { + ExceptionCode = "800"; + } + else + { + ExceptionCode = "0"; + } + bcp = bcp + ";" + bar2; + } + if (bcp.Length >= 1) + { + if (bcp.Substring(0, 1) == ";") + { + if (bcp.Length > 1) + { + bcp = bcp.Substring(1); + } + else + { + bcp = ""; + } + } + } + if (ExceptionCode == "800") + { + //判断是否为无码烟,是无码烟不报告异常码,否则报告异常码 + sql.Remove(0, sql.Length); + sql.Append("UPDATE T_Base_PLC_Ask SET F_Remark='").Append(ExceptionCode).Append("' WHERE (F_Askkind = 8) AND (F_BindingDevice = ").Append(dvsp[0]["F_BindingDevice"]).Append(")"); + dbo.ExceSQL(sql.ToString()); + } + //两箱到机器人抓取位,未报告抓取完成的两组一号工程码临时保存区 + sql.Remove(0, sql.Length); + sql.Append("UPDATE T_Base_PLC_Ask SET F_DoubleFirstProject = '").Append(bcp).Append("' WHERE (F_Askkind = 8) AND (F_BindingDevice = ").Append(dvsp[0]["F_BindingDevice"]).Append(")"); + dbo.ExceSQL(sql.ToString()); + + wv[0].Remove(0, wv[0].Length); + wv[0].Append("2"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + } + + + #endregion + break; + #endregion + + #region 烟厂成品机器人码垛信息(抓取完成、放完成、码垛完成) + case 24: + #region 成品码垛结束,向管理申请入库任务 + //把码盘位输送机,托盘条码,一号工程码信息,码垛数量整合生成向管理申请入库任务 + //清空托盘条码、一号工程码信息、异常码信息F_Remark + //设备号:绑定设备号+“6”代表存放码垛位托盘条码的“设备”;绑定设备号+“7”代表存放机器人抓取位的两箱一号工程码的“设备” + //绑定设备号+“8”代表存放码垛位码垛信息的“设备” + sql.Remove(0, sql.Length); + sql.Append("SELECT F_BarCode, F_DeviceIndex, F_FirstProject,F_BoxBarcode,F_HaveFirstProject, F_Askkind, F_BindingDevice,F_DoubleFirstProject FROM T_Base_PLC_Ask WHERE (F_Askkind = 8) AND (F_DeviceIndex = ").Append(devidx).Append(")"); + dvsp = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dvsp.Count > 0) + { + + //[1]机器人动作:1-取货完成;2-放货完成;3-托盘码垛完成 + //[2]托盘码垛数量 + if (states[1] == 1)//取货完成 + { + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "机器人码垛信息", devidx.ToString(), devidx.ToString() + "取货完成"); + sql.Remove(0, sql.Length); + sql.Append("UPDATE T_Base_PLC_Ask SET F_TempFirstProject = F_DoubleFirstProject WHERE (F_Askkind = 8) AND (F_DeviceIndex = ").Append(devidx).Append(") and (F_DoubleFirstProject<>'')"); + dbo.ExceSQL(sql.ToString()); + + } + else if (states[1] == 2)//放货完成 + { + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "机器人码垛信息", devidx.ToString(), devidx.ToString() + "放货完成"); + sql.Remove(0, sql.Length); + sql.Append("UPDATE T_Base_PLC_Ask SET F_FirstProject =F_FirstProject).Append(';').Append( F_TempFirstProject WHERE (F_Askkind = 8) AND (F_DeviceIndex = ").Append(devidx).Append(") and (F_TempFirstProject<>'')"); + dbo.ExceSQL(sql.ToString()); + sql.Remove(0, sql.Length); + sql.Append("UPDATE T_Base_PLC_Ask SET F_TempFirstProject='' WHERE (F_Askkind = 8) AND (F_DeviceIndex = ").Append(devidx).Append(")"); + dbo.ExceSQL(sql.ToString()); + } + else if (states[1] == 3)//码盘结束 + { + #region 码盘结束 + + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "机器人码垛信息", devidx.ToString(), devidx.ToString() + "码盘结束"); + //读取托盘条码; + barcode.Clear(); + barcode.Append(dvsp[0]["F_BarCode"].ToString()); + if ((barcode == null) || (barcode.ToString() == "\0\0\0\0\0\0\0\0\0\0")) + { + RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.DealWithDeviceState时只读到码盘结束,但没读到对应的托盘条码信息!发生时间:" + DateTime.Now.ToString("u")); + OnRefreshMonitor(rmea); + errtext = "SControlMonitor.DealWithDeviceState时只读到码盘结束,但没读到对应的托盘条码信息!发生时间:" + DateTime.Now.ToString("u"); + continue; + } + sql.Remove(0, sql.Length); + sql.Append("SELECT FPALLETBARCODE,FSTARTDEVICE FROM T_Manage_Task where FSTARTDEVICE=").Append(dvsp[0]["F_BindingDevice"]).Append(" AND FPALLETBARCODE='").Append(barcode).Append("'"); + //20091128 + dvsp = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dvsp.Count > 0) + { + wv[0].Remove(0, wv[0].Length); + wv[0].Append("2"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", dvsp[0]["F_BindingDevice"].ToString() + "码盘通道,托盘条码:" + barcode + ",重复收到码盘结束信号!发生时间:" + DateTime.Now.ToString("u")); + OnRefreshMonitor(rmea); + errtext = "SControlMonitor.DealWithDeviceState时" + dvsp[0]["F_BindingDevice"].ToString() + "码盘通道,托盘条码:" + barcode + ",重复收到码盘结束信号!发生时间:" + DateTime.Now.ToString("u"); + continue; + + } + + + //20090922 + sql.Remove(0, sql.Length); + sql.Append("SELECT STOCK_BARCODE,START_DEVICE_CODE FROM IO_CONTROL where START_DEVICE_CODE=").Append(dvsp[0]["F_BindingDevice"]).Append(" AND STOCK_BARCODE='").Append(barcode).Append("'"); + dvsp = dboMan.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dvsp.Count > 0) + { + wv[0].Remove(0, wv[0].Length); + wv[0].Append("2"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", dvsp[0]["F_BindingDevice"].ToString() + "码盘通道,托盘条码:" + barcode + ",重复收到码盘结束信号!发生时间:" + DateTime.Now.ToString("u")); + OnRefreshMonitor(rmea); + errtext = "SControlMonitor.DealWithDeviceState时" + dvsp[0]["F_BindingDevice"].ToString() + "码盘通道,托盘条码:" + barcode + ",重复收到码盘结束信号!发生时间:" + DateTime.Now.ToString("u"); + continue; + + } + + //一号工程码信息 + string FirstProject = ""; string ExceptionCode = "0"; string BoxBarcode = ""; + //20091128 + sql.Remove(0, sql.Length); + sql.Append("SELECT F_DeviceIndex, F_FirstProject,F_Remark,F_BoxBarcode,F_HaveFirstProject, F_Askkind, F_BindingDevice FROM T_Base_PLC_Ask WHERE (F_Askkind = 8) AND (F_BindingDevice = ").Append(dvsp[0]["F_BindingDevice"]).Append(")"); + dvsp = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dvsp.Count > 0) + { + BoxBarcode = dvsp[0]["F_BoxBarcode"].ToString(); + FirstProject = dvsp[0]["F_FirstProject"].ToString(); + if (FirstProject.Length > 0) + { + if (FirstProject.Substring(0, 1) == ";") + { + if (FirstProject.Length > 1) + { + FirstProject = FirstProject.Substring(1); + } + } + } + ExceptionCode = dvsp[0]["F_Remark"].ToString(); + } + int dcode = Convert.ToInt32(dvsp[0]["F_BindingDevice"]); + + #region 向管理申请码盘后入库任务 + //20091128 + sql.Remove(0, sql.Length); + sql.Append("SELECT DEVICE_CODE,STOCK_BARCODE FROM IO_CONTROL_APPLY WHERE APPLY_TASK_STATUS=0 and DEVICE_CODE='").Append(dcode).Append("' and (STOCK_BARCODE = '").Append(barcode).Append("')"); + dvbc = dboMan.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dvbc.Count > 0) + { + wv[0].Remove(0, wv[0].Length); + wv[0].Append("2"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.DealWithDeviceState时向管理申请入库任务时,申请的任务条码已经存在!"); + OnRefreshMonitor(rmea); + errtext = "SControlMonitor.DealWithDeviceState时向管理申请入库任务时,申请的任务条码已经存在!"; + continue; + } + //向管理申请入库任务 + string dtime = DateTime.Now.ToString("u"); + dtime = dtime.Substring(0, dtime.Length - 1); + //20101108CONTROL_APPLY_ID," + fid + ", + sql.Remove(0, sql.Length); + sql.Append("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_TYPE, DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK)VALUES ").Append( + "(1,'").Append(dcode).Append("','").Append(barcode).Append("',0,'").Append(dtime).Append("','").Append(BoxBarcode).Append(";").Append(FirstProject).Append(";").Append(states[2].ToString()).Append(";").Append(ExceptionCode).Append(";1").Append("')");//; + try + { + dboMan.ExceSQL(sql.ToString()); + //20091128 + sql.Remove(0, sql.Length); + sql.Append("UPDATE T_Base_PLC_Ask SET F_FirstProject = '',F_Remark='' WHERE (F_Askkind = 8) AND (F_BindingDevice = ").Append(dvsp[0]["F_BindingDevice"]).Append(")"); + dbo.ExceSQL(sql.ToString()); + + } + catch (Exception ex) + { + RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务:" + ex.StackTrace + ex.Message); + OnRefreshMonitor(rmea); + errtext = "向管理申请入库任务:" + ex.Message; + wv[0].Remove(0, wv[0].Length); + wv[0].Append("2"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + continue; + } + + #endregion + + + #region 设置码垛通道 + + DataView md = dboMan.ExceSQL("select * from v_fr_routwaysetting").Tables[0].DefaultView; + for (int a = 0; a < md.Count; a++) + { + string boxcode = ""; + if (md[a]["fgoodscode"] == DBNull.Value) + { + boxcode = "0000000000000"; + } + else + { + boxcode = md[a]["fgoodscode"].ToString(); + } + int devbind = Convert.ToInt32(md[a]["froutwayid"]); + string HaveFirstProject = md[a]["fbarcodeflag"].ToString(); + bool IfHaveFirstProject = false; + if (HaveFirstProject == "1") + { + IfHaveFirstProject = true; + } + else + { + IfHaveFirstProject = false; + } + for (int j = 0; j <= 12; j++) + { + if (boxcode.Length < 13) + { + boxcode += "0"; + } + } + int devcount = 28; + if (md[a]["v_fullpalletqty"] != DBNull.Value) + { + devcount = Convert.ToInt32(md[a]["v_fullpalletqty"]); + } + int dev = Convert.ToInt32(md[a]["froutwayid"].ToString() + "11"); + //设置PLC码垛通道(froutwayid:输送机设备索引 fgoodscode:烟箱码 fbarcodeflag :有无一号工程码标识);5244人工码垛位通道 + sdo = CommModeCreate.CreateSendDeviceOrder(dev); + sdo.SendDeviceOrder(dev, boxcode, IfHaveFirstProject, false, devcount); + //改写T_Base_PLC_Ask表(F_BindingDevice:输送机设备索引 F_BoxBarcode:烟箱码 F_HaveFirstProject :有无一号工程码标识) + sql.Remove(0, sql.Length); + sql.Append("UPDATE T_Base_PLC_Ask SET F_HaveFirstProject ='").Append(HaveFirstProject).Append("', F_BoxBarcode ='").Append(boxcode).Append("' WHERE (F_BindingDevice =").Append(devbind).Append(")"); + dbo.ExceSQL(sql.ToString()); + } + //20091128 + md = null; + #endregion + + + #endregion + } + } + wv[0].Remove(0, wv[0].Length); + wv[0].Append("2"); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + + #endregion + break; + #endregion + + #region 嘉兴电力四楼三个单元检定回库电气申请放行 + case 36: + if (states[0] == 1) + {//46006-116;46007-118 46008-120 + //设备号:绑定设备+“2” + sql.Remove(0, sql.Length); + sql.Append("SELECT F_DeviceIndex, F_Askkind, F_BindingDevice FROM T_Base_PLC_Ask WHERE (F_DeviceIndex = ").Append(devidx).Append(")"); + dvsp = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dvsp.Count > 0) + { + int dcode = Convert.ToInt32(dvsp[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)).Tables[0].DefaultView; + if (dvbc.Count > 0) + { + IfExit = true; + } + dvbc = dboMan.ExceSQL(string.Format("select CONTROL_ID from IO_CONTROL where START_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 FSTARTDEVICE = '{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(",4,1,'").Append(dcode).Append("',null,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); + continue; + } + } + //wv[0].Remove(0, wv[0].Length); + //wv[0].Append("2"); + //sdo.WriteDBData(witemnames, wv); + } + } + break; + #endregion + + #region 接收称重信息//20130510 + case 8: + if (devinfo.DeviceIndex == 888) + { + continue; + } + if (devicestates[tempdb2addr + 0] != 1) + { + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到电气清0信号" + devicestates[tempdb2addr + 0].ToString(), devidx.ToString(), ""); + continue; + } + if (devicestates[tempdb2addr + 1] != 0) + { + //CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到电气清0信号" + devicestates[tempdb2addr + 0].ToString(), devidx.ToString(), ""); + continue; + } + + dvsp = 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,F_BarCode from T_Base_PLC_Ask WHERE (F_DeviceIndex = {0}) ", devidx)).Tables[0].DefaultView; //20130510F_ManageAskkind + DateTime appdt1 = new DateTime(); + if (dvsp[0]["F_Time"] == DBNull.Value) + { + appdt1 = DateTime.Now.AddSeconds(-10); + } + else + { + DateTime.TryParse(dvsp[0]["F_Time"].ToString(), out appdt1); + + } + + if ((appdt1.AddSeconds(5) > DateTime.Now)) + { + dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_Time='{1}' WHERE (F_DeviceIndex = {0}) ", devidx, DateTime.Now)); + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "PLC重复上报回库申请:", devidx.ToString(), ",站台:" + 12089); + witemnames[0].Clear(); + witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 1)).Append(",b");//20130510 + wv[0].Clear(); + wv[0].Append("2"); + sdo = CommModeCreate.CreateSendDeviceOrder(devidx); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "写申请应答2", devidx.ToString(), ""); + + } + else + { + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到电气申请1", devidx.ToString(), ""); + bool x = false; + bool xx = false; + string xxx = string.Empty; + try + { + string ex; + string kkk = DateTime.Now.ToString("u"); + Model.AutoTask at = new Model.AutoTask(4, kkk, "12089", "-", "12103", "-", false, false, 0); + BuildAutoTask(at, out ex); + dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_Time='{1}' WHERE (F_DeviceIndex = {0}) ", devidx, DateTime.Now)); + witemnames[0].Clear(); + witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 1)).Append(",b");//20130510 + wv[0].Clear(); + wv[0].Append("2"); + sdo = CommModeCreate.CreateSendDeviceOrder(devidx); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "调用服务异常写申请应答2", devidx.ToString(), ""); + + } + catch (Exception ex) + { + dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_Time='{1}' WHERE (F_DeviceIndex = {0}) ", devidx, DateTime.Now)); + witemnames[0].Clear(); + witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 1)).Append(",b");//20130510 + wv[0].Clear(); + wv[0].Append("2"); + sdo = CommModeCreate.CreateSendDeviceOrder(devidx); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "调用服务异常写申请应答2", devidx.ToString(), ""); + } + } + + //} + break; + #endregion + + } + + #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 + { + dv.Dispose(); + dvbc.Dispose(); + dvsp.Dispose(); + dv1.Dispose(); + } + } + } + //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) + { + 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[6]; + 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"); + } + + + if (Wdata.Length == 6) + { + barbyte = ASCIIEncoding.ASCII.GetBytes(Wdata); + wv[0] = new StringBuilder("1"); + wv[1] = new StringBuilder("0"); + wv[8] = new StringBuilder("3"); + } + else + { + for (int i = 0; i <= 5; i++) + { + barbyte[i] = 0; + } + wv[0] = new StringBuilder("1"); + wv[1] = new StringBuilder("0"); + wv[8] = new StringBuilder("0"); + } + for (int i = 2; i <= 7; i++) + { + wv[i] = new StringBuilder(barbyte[i - 2].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 + 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]); + } + 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); + sdo.WriteDBData(wn, wv, md.S7Connection); + CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "调用管理分道时:", deviceIndex.ToString(), md.S7Connection + ";" + DBBlock + md.Dbw1Address.ToString() + ";" + Wdata); + + return true; + } + catch (Exception ex) + { + errtext = ex.StackTrace + ex.Message; + return false; + } + } + + /// + /// 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); + } + } + } + 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); + } + #endregion + 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()); + for (int i = 0; i < (barcodeLength - bc.Length); i++) + { + sb.Append("0").Append(bcsn.ToString()); + } + 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(); + } + } + /// + /// 根据条码,报告输送机的送出任务完成 + /// + /// 条码设备 + /// 条码设备的绑定输送机 + /// 条码 + /// 异常处理口设备 + void BarcodeComplete(int Bardevice, int BindDevice, string barcode, string AbendDevice) + { + DataView dv = new DataView(); + try + { + 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); + } + 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"]), 0); + } + } + else + { + int abst = 0; + if (int.TryParse(AbendDevice.ToString(), out abst) == true) + { + object[] 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", "条码报完成", Bardevice.ToString(), "条码和任务匹配,但扫描器不在此任务设备指令队列里,条码:" + barcode.ToString().ToUpper()); + RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", Bardevice.ToString() + "条码和任务匹配,但扫描器不在此任务设备指令队列里,条码:" + barcode.ToString()); + OnRefreshMonitor(rmea); + } + } + } + } + else + { + int abst = 0; + if (int.TryParse(AbendDevice.ToString(), out abst) == true) + { + object[] 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", "条码报完成", Bardevice.ToString(), "扫描器找不到可以报完成的设备指令,条码:" + barcode.ToString().ToUpper()); + RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", Bardevice.ToString() + "扫描器找不到可以报完成的设备指令,条码:" + barcode.ToString()); + OnRefreshMonitor(rmea); + } + + } + } + 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); + + } + } + } + catch (Exception ex) + { + RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.BarcodeComplete时" + ex.StackTrace + ex.Message); + OnRefreshMonitor(rmea); + return; + } + finally + { + + } + } + + 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(); + } + + } + + //lishuo 跟agv对接 + public bool GetAllAGVTask(out string errtext) + { + try + { + errtext = string.Empty; + + if (CObtainTask.GetAGVTask() == 0) + { + errtext = CObtainTask.CObtainTaskError; + } + + return true; + } + catch (Exception ex) + { + errtext = ex.StackTrace + ex.Message; + return false; + } + } + + public bool AGVManage(int device)//通用查看agv是否还有取货任务 + { + DataView dv = new DataView(); + DataView dv1 = new DataView(); + StringBuilder sql = new StringBuilder(); + try + { + sql.Clear(); + sql.Append("select FID from T_Manage_Task where FSTARTDEVICE=").Append(device).Append(" and FIntoStepOK=0"); + dv1 = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + if (dv1.Count > 0) + { + return false; + } + else + { + //sql.Clear(); + //sql.Append("select F_ManageTaskIndex from T_Manage_Task,T_Monitor_Task where T_Manage_Task.FID=T_Monitor_Task.F_ManageTaskIndex and T_Manage_Task.FCONTROLTASKTYPE=4 and F_NumParam2=").Append(device) + // .Append(" and T_Monitor_Task.F_DeviceIndex=10001 and T_Monitor_Task.F_DeviceCommandIndex=4 and (F_Status=0 or F_Status=1)"); + //dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; + //if (dv.Count > 0) + //{ + // return false; + //} + //else + //{ + return true; + //} + } + } + catch (Exception ex) + { + return false; + } + finally + { + dv.Dispose(); + } + + } + + #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 + + + } + + + + +} diff --git a/WcfControlMonitorLib/SControlMonitor.cs b/WcfControlMonitorLib/SControlMonitor.cs index 93b54ad..8da9184 100644 --- a/WcfControlMonitorLib/SControlMonitor.cs +++ b/WcfControlMonitorLib/SControlMonitor.cs @@ -6609,6 +6609,49 @@ namespace WcfControlMonitorLib #endregion break; + + case "40": + //lishuo 湖西6垛机条码比对 此处记录条码,命令发送时进行条码报完成 + if ((barcode.ToString() == incompleteBarcode.ToString()) || (string.IsNullOrEmpty(barcode.ToString().Replace("\0", "")))) + { + barcode.Clear(); + barcode.Append(incompleteBarcode.ToString()); + + } + //获取堆垛机设备信息 + var device= Model.CGetInfo.GetDeviceInfo(dcode); + + dvbc = dboMan.ExceSQL(string.Format("SELECT 条码 FROM V_Monitor_Task WHERE 设备指令索引={0})", device.TaskNo)).Tables[0].DefaultView;//从视图表获取任务条码 + if (dvbc.Count > 0) + { + if (dvbc[0]["条码"].ToString() == barcode.ToString())//条码和扫码结果一致正常回复 + { + 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); + } + else + {//条码和扫码结果不一致,暂定回复99 + witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 0)).Append(",b");//20130510 + wv[0].Clear(); + wv[0].Append("99"); + sdo = CommModeCreate.CreateSendDeviceOrder(devidx); + sdo.WriteDBData(witemnames, wv, devinfo.S7Connection); + } + } + else//无对应任务 暂定正常回复 + { + 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); + } + b + // CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "写条码应答", devidx.ToString(), "写标志2**源条码:" + barcode.ToString().ToUpper()); + break; default: //无类型,条码比对或者记录条码 @@ -8101,6 +8144,8 @@ namespace WcfControlMonitorLib } break; + + case 50: devinfo.SplitByte_0 = (devicestates[tempdb2addr + 0] & 1) == 1 ? 1 : 0; Model.CGetInfo.SetDeviceMessage(devinfo);