You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
9442 lines
563 KiB
9442 lines
563 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Runtime.Serialization;
|
|
using System.ServiceModel;
|
|
using System.Text;
|
|
using CommonLib;
|
|
using System.Data;
|
|
using ICommLayer;
|
|
using CommLayerFactory;
|
|
using System.IO;
|
|
using System.Threading;
|
|
using System.Timers;
|
|
using Model;
|
|
//using MidDataTable;
|
|
|
|
namespace WcfControlMonitorLib
|
|
{
|
|
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service1”。
|
|
|
|
/// <summary>
|
|
/// 调度wcf的实现
|
|
/// </summary>
|
|
[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();
|
|
/// <summary>
|
|
/// 数据变化事件
|
|
/// </summary>
|
|
public static event CDataSourceChangeEventHandler DataChange;
|
|
/// <summary>
|
|
/// 通道打开事件
|
|
/// </summary>
|
|
public static event ClientLogEventHandler ChannelOpen;
|
|
/// <summary>
|
|
/// 客户端断开服务
|
|
/// </summary>
|
|
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();
|
|
|
|
|
|
ISendDeviceOrder sdo;
|
|
Model.MDevice devinfo;
|
|
Model.MDevice modifypathdevinfo;
|
|
Model.MDevice askDevinfo;
|
|
StringBuilder[] wv = { new StringBuilder("2") };
|
|
StringBuilder[] witemnames = { new StringBuilder("") };
|
|
private Object thisLock = new Object();
|
|
#endregion
|
|
/// <summary>
|
|
/// 构造函数
|
|
/// </summary>
|
|
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)
|
|
{
|
|
if (PLCCommonUpdateDB != null)
|
|
{//20150103
|
|
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 自定义方法
|
|
|
|
/// <summary>
|
|
/// 比较两个值型一维数组变量是否值相等
|
|
/// </summary>
|
|
/// <param name="array1">值型一维数组1</param>
|
|
/// <param name="array2">值型一维数组2</param>
|
|
/// <returns>比较结果,相等则true,否则false</returns>
|
|
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();
|
|
}
|
|
}
|
|
|
|
int GetTaskOrderFromMonitorIndex(int taskindex)
|
|
{
|
|
DataView dvb = new DataView(); StringBuilder sss = new StringBuilder("");
|
|
try
|
|
{
|
|
|
|
sss.Append("SELECT F_DeviceCommandIndex FROM T_Monitor_Task WHERE (F_MonitorIndex = ").Append(taskindex).Append(")");
|
|
dvb = dbo.ExceSQL(sss.ToString()).Tables[0].DefaultView;
|
|
if (dvb.Count > 0)
|
|
{
|
|
return Convert.ToInt32(dvb[0]["F_DeviceCommandIndex"]) ;
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
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 = 0;
|
|
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)
|
|
{
|
|
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();
|
|
}
|
|
|
|
}
|
|
/// <summary>
|
|
/// 获取可用的目标位置:入库的巷道或者出库站台
|
|
/// </summary>
|
|
/// <param name="manageTaskIdx">调度任务索引</param>
|
|
/// <param name="manageKindIdx">调度任务类别</param>
|
|
/// <returns></returns>
|
|
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_ID, WAREHOUSE_CODE, STOCK_BARCODE, DEVICE_CODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK)").Append(
|
|
"VALUES (").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();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 20091005判断是否可以获得可用的路径子路经
|
|
/// </summary>
|
|
/// <param name="manageTaskIdx">调度任务索引</param>
|
|
/// <param name="manageKindIdx">任务类型索引</param>
|
|
/// <param name="curLocation">当前设备索引</param>
|
|
/// <returns></returns>
|
|
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<int> 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<int> 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<int> 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<int> 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<int> priorrgv = CDisassembleTask.GetPriorDevice(routeID, consn);
|
|
int rgvdev = priorrgv[0];
|
|
int rgvsn = ccf.GetSerialNumberFromRouteDevice(routeidNew, rgvdev);
|
|
List<int> 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();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 判断设备是否被包含在子路径中
|
|
/// </summary>
|
|
/// <param name="deviceIdx">设备索引</param>
|
|
/// <param name="routeSub">子路经</param>
|
|
/// <returns></returns>
|
|
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 契约实现
|
|
/// <summary>
|
|
/// 根据安装条码扫描器的输送机设备索引查询【在PLC读到的条码】和【已经给管理上报的条码】20140218
|
|
/// </summary>
|
|
/// <param name="bindDeviceOfBarcode">安装条码扫描器的输送机</param>
|
|
/// <param name="readedBarcode">在PLC读到的条码</param>
|
|
/// <param name="reportedBarcode">已经给管理上报的条码</param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 卸载
|
|
/// </summary>
|
|
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<Model.MRoute> GetAllRouteinfo(out string errorText)
|
|
{
|
|
List<Model.MRoute> lmr = new List<Model.MRoute>();
|
|
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<Model.MRoute> GetDeviceJoinRouteinfo(int deviceIndex, out string errorText)
|
|
{
|
|
List<Model.MRoute> lmr = new List<Model.MRoute>();
|
|
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;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 通过设置订阅的监控模式,刷新订阅
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public bool RefreshMonitoringMode()
|
|
{//20150103增加断网恢复
|
|
OPCClient.CCommonOPCClient.RefreshMonitoringMode();
|
|
return true;
|
|
}
|
|
/// <summary>
|
|
/// 注册客户端
|
|
/// </summary>
|
|
/// <param name="userID">客户端标识</param>
|
|
/// <param name="errText"></param>
|
|
/// <returns></returns>
|
|
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<IClient>();
|
|
var id = OperationContext.Current.SessionId;
|
|
|
|
OperationContext.Current.Channel.Closing += new EventHandler(Channel_Closing);
|
|
OperationContext.Current.Channel.Faulted += new EventHandler(Channel_Closing);
|
|
ClientCallbackLists.Add(client, userDescription);
|
|
ClientShowLists.Add(client, userID);
|
|
ClientLogEventArgs coea = new ClientLogEventArgs(userDescription + ":连接服务!");
|
|
|
|
OnChannelOpen(coea);
|
|
|
|
errText = string.Empty;
|
|
return true;
|
|
}
|
|
catch(Exception ex)
|
|
{
|
|
errText =ex.StackTrace+ ex.Message;
|
|
return false;
|
|
}
|
|
|
|
}
|
|
public Model.MDevice SendAllDeviceStates(int device)
|
|
{
|
|
|
|
return Model.CGetInfo.GetDeviceInfo(device);
|
|
}
|
|
/// <summary>
|
|
/// 注销客户端
|
|
/// </summary>
|
|
/// <param name="userID">用户标识</param>
|
|
/// <param name="ErrText"></param>
|
|
/// <returns></returns>
|
|
public bool LogoutClient(string userID, out string ErrText)
|
|
{
|
|
try
|
|
{
|
|
var client = OperationContext.Current.GetCallbackChannel<IClient>();
|
|
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;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 获取任务
|
|
/// </summary>
|
|
/// <param name="laneway">巷道限制</param>
|
|
/// <param name="Order">更新"UPDATE",追加"APPEND",替换"REPLACE"</param>
|
|
/// <returns></returns>
|
|
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"])]);
|
|
}
|
|
}
|
|
SocketsTCPIP.CClientTCPIP.InitAllClientTCPIP(); //wxk connet agv
|
|
|
|
CStaticClass.Order = true;
|
|
CStaticClass.ReConnect();
|
|
|
|
CParsePLCData.StartListen();
|
|
OPCClient.CCommonOPCClient.CreateSubscriptionGroup();
|
|
|
|
CUpdateIoControl.StartListen(); // NewWrieDarkCasket 位置1
|
|
//CommonClassLib.CCarryConvert.WriteDarkCasket("打开命令开关", "", "", "");
|
|
|
|
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);
|
|
OPCClient.CCommonOPCClient.DisConnectOPCServer();//20141201张磊发现错误,应该注销订阅和事件
|
|
CDisassembleTask.EndListen();
|
|
//20121108
|
|
SocketsTCPIP.CClientTCPIP.UpdateDB -= new CUpdateDBEventHandler(CListenAGVState_UpdateDB);
|
|
SocketsTCPIP.CClientTCPIP.WriteDarkCasket -= new CWriteDarkCasketEventHandler(CClientTCPIP_WriteDarkCasket);
|
|
SocketsTCPIP.CClientTCPIP.SendDeviceOrder -= new CSendDeviceOrderEventHandler(CClientTCPIP_SendDeviceOrder);
|
|
SocketsTCPIP.CClientTCPIP.EndConnect();
|
|
CParsePLCData.EndListen();
|
|
|
|
CUpdateIoControl.EndListen(); // NewWrieDarkCasket 位置2
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("关闭命令开关", "", "", "");
|
|
|
|
return true;
|
|
}
|
|
catch
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
public bool DeviceCommunicationInit(string CommunicationType, out string ErrText)
|
|
{
|
|
try
|
|
{
|
|
if(CommunicationType.IndexOf("OPCClient")>=0)
|
|
{
|
|
OPCClient.CCommonOPCClient.ConnectCount = new Dictionary<string, int>();
|
|
|
|
}
|
|
else if (CommunicationType.IndexOf("SocketsTCPIP") >= 0)
|
|
{//CommunicationType="SocketsTCPIP:191.168.1.3,3000"
|
|
char[] cc = new char[1] { ':' };
|
|
string[] sp=CommunicationType.Split(cc);
|
|
string remoteip = string.Empty;
|
|
int port = 0;
|
|
if (sp.Length > 1)
|
|
{
|
|
|
|
cc = new char[1] { ',' };
|
|
string[] sp1 = sp[1].Split(cc);
|
|
remoteip = sp1[0];
|
|
port = Convert.ToInt32(sp1[1]);
|
|
|
|
SocketsTCPIP.CClientTCPIP.TcpIPInitCount[remoteip] = 0;
|
|
SocketsTCPIP.CClientTCPIP.InitClientTCPIP(remoteip, port);
|
|
|
|
}
|
|
|
|
|
|
}
|
|
ErrText = string.Empty;
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ErrText=ex.StackTrace+ex.Message;
|
|
return false;
|
|
}
|
|
}
|
|
public DataTable GetUsers(out string Errtext)
|
|
{
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
dv = dbo.ExceSQL(string.Format("SELECT f_userid, f_username, f_purview, f_password FROM T_Base_Users")).Tables[0].DefaultView;
|
|
Errtext = string.Empty;
|
|
if (dv.Count <= 0)
|
|
{
|
|
|
|
return null;
|
|
}
|
|
else
|
|
return dv.Table;
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Errtext =ex.StackTrace+ ex.Message;
|
|
return null;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
|
|
public bool BuildHandTask(Model.HandTask Handtask, out string Errtext)
|
|
{//20141201张磊发现没验证货位和巷道
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
|
|
string Sql = string.Empty;
|
|
string dtime = DateTime.Now.ToString("u");
|
|
dtime = dtime.Substring(0, dtime.Length - 1);
|
|
string qcell = string.Empty, scell = string.Empty;
|
|
int hidx = GetManageHandIdx();//T_Base_Manage_Task_Index_Hand_Task 20000~30000
|
|
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) && Handtask._deviceIndex < 99999)
|
|
{
|
|
|
|
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))
|
|
{
|
|
object[] ob;//20141201
|
|
rehidx = hidx + 1+i;
|
|
rehmindx = ccf.GetMonitorIndex(rehidx, 4);
|
|
string bc = rehmindx.ToString();
|
|
int bcl = bc.Length;
|
|
for (int j = 0; j < (6 - bcl); j++)
|
|
{
|
|
bc += j.ToString();
|
|
}
|
|
if (Handtask._deviceOrder == 4)//取货
|
|
{//z-x-y
|
|
|
|
if (x == 1)
|
|
{
|
|
//xx[i] = 1;
|
|
}
|
|
else
|
|
{
|
|
ob = new object[4] { z, xx[i], y, ccf.GetLaneWayNoFromStack(Handtask._deviceIndex) };//20141201
|
|
dv = dbo.ExceSQL(string.Format("SELECT FID FROM ST_CELL WHERE (F_Z = {0}) AND (F_X = {1}) AND (F_Y = {2}) and FLaneWay={3}", ob)).Tables[0].DefaultView;//20141201
|
|
if (dv.Count == 0)
|
|
{
|
|
Errtext = "堆垛机取货坐标在数据库不存在!";
|
|
return false;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
qcell = z.ToString() + "-" + xx[i].ToString() + "-" + y.ToString();//20101028
|
|
dbo.ExceSQL("insert into T_Monitor_Task(F_RouteID,F_ManageTaskIndex,F_ManageTaskKindIndex,F_MonitorIndex," +
|
|
"F_DeviceIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6,F_UseAwayFork,F_TxtParam) " +
|
|
"values(" + routeIDsub + "," + rehidx + ",4," + rehmindx + "," + Handtask._deviceIndex
|
|
+ "," + Handtask._deviceOrder + "," + z + "," + xx[i] + "," + y + ",0,0,0,'" + useawayfork1 + "','" + bc + "')");
|
|
|
|
}
|
|
else if (Handtask._deviceOrder == 5)//送货
|
|
{//z1-x1-y1
|
|
|
|
if (x1 == 1)
|
|
{
|
|
//20130710xx1[i] = 1;
|
|
}
|
|
else
|
|
{
|
|
ob = new object[4] { z1, xx1[i], y1, ccf.GetLaneWayNoFromStack(Handtask._deviceIndex) };//20141201
|
|
dv = dbo.ExceSQL(string.Format("SELECT FID FROM ST_CELL WHERE (F_Z = {0}) AND (F_X = {1}) AND (F_Y = {2}) and FLaneWay={3}",ob)).Tables[0].DefaultView;//20141201
|
|
if (dv.Count == 0)
|
|
{
|
|
Errtext = "堆垛机送货坐标在数据库不存在!";
|
|
return false;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
scell = z1.ToString() + "-" + xx1[i].ToString() + "-" + y1.ToString();//20101028
|
|
dbo.ExceSQL("insert into T_Monitor_Task(F_RouteID,F_ManageTaskIndex,F_ManageTaskKindIndex,F_MonitorIndex," +
|
|
"F_DeviceIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2,F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6,F_UseAwayFork,F_TxtParam) " +
|
|
"values(" + routeIDsub + "," + rehidx + ",4," + rehmindx + "," + Handtask._deviceIndex
|
|
+ "," + Handtask._deviceOrder + ",0,0,0," + z1 + "," + xx1[i] + "," + y1 + ",'" + useawayfork1 + "','" + bc + "')");
|
|
|
|
}
|
|
|
|
dbo.ExceSQL("insert into T_Manage_Task(FPALLETBARCODE,FID,F_ManageTaskKindIndex,F_RELATIVECONTORLID,FIntoStepOK,FSTARTDEVICE,FREMARK,FSTARTCELL,FENDDEVICE,FENDCELL,FBEGTIME) values('" +
|
|
bc + "'," + rehidx + ",4,-1,1," + Handtask._deviceIndex + ",'" + Handtask._deviceOrder + "','" + qcell + "'," + Handtask._deviceIndex + ",'" + scell + "','" + dtime + "')");
|
|
|
|
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 + "," + hidx + ",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 + "'," + 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(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();
|
|
}
|
|
|
|
#region 20200924 德玛提升机任务,托盘条码作为终端输送线
|
|
if (ccf.GetDeviceKindIdx(Handtask._deviceIndex) == 4 && Handtask._deviceOrder == 8)
|
|
{
|
|
barcode = Handtask._cellcodeEnd;
|
|
}
|
|
#endregion
|
|
|
|
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_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
|
|
{
|
|
if (Convert.ToInt32(dv[i]["F_Status"]) >= 1)
|
|
{
|
|
cgs.ActionComplete(Convert.ToInt32(dv[i]["F_DeviceIndex"]), Convert.ToInt32(dv[i]["F_MonitorIndex"]), 1);
|
|
}
|
|
else
|
|
{
|
|
cgs.ActionComplete(Convert.ToInt32(dv[i]["F_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_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)
|
|
{//20170622删除AGV任务
|
|
cgs.ActionComplete(Convert.ToInt32(dv[i]["F_DeviceIndex"]), Convert.ToInt32(dv[i]["F_MonitorIndex"]), Model.CGeneralFunction.TASKDELETE);
|
|
//1 辅料出库;2 空托盘回收;3残托盘回收
|
|
|
|
if ((Convert.ToInt32(dv[i]["F_DeviceCommandIndex"]) == 2) || (Convert.ToInt32(dv[i]["F_DeviceCommandIndex"]) == 3))
|
|
{
|
|
tableAGVGate = dbo.ExceSQL("SELECT F_AGVGateDeviceIndex FROM T_BASE_AGV_GATE WHERE F_ADDRESS = " + Convert.ToInt32(dv[i]["F_NumParam2"]) + "").Tables[0];
|
|
if (tableAGVGate.Rows.Count > 0)
|
|
{
|
|
|
|
dbo.ExecuteSql("UPDATE T_BASE_DEVICE SET F_PALLETBARCODE='" + dv[i]["F_TxtParam"] + "',F_HAVEGOODS = 1 WHERE F_DEVICEINDEX = " + Convert.ToInt32(tableAGVGate.Rows[0]["F_AGVGateDeviceIndex"]) + "");
|
|
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{//20170622删除非AGV任务
|
|
//if (Convert.ToInt32(dv[i]["F_Status"]) >= 1)
|
|
//{//如果保留此段落,管理任务的最后一条报警时会变成报完成操作。
|
|
// int fstatus = 1;
|
|
|
|
// cgs.ActionComplete(Convert.ToInt32(dv[i]["F_DeviceIndex"]), Convert.ToInt32(dv[i]["F_MonitorIndex"]), fstatus);
|
|
//}
|
|
//else
|
|
//{
|
|
cgs.ActionComplete(Convert.ToInt32(dv[i]["F_DeviceIndex"]), Convert.ToInt32(dv[i]["F_MonitorIndex"]), Model.CGeneralFunction.TASKDELETE);
|
|
//}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{//20110412
|
|
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("调度任务管理", "调度任务被手工删除!", "托盘条码:" + barcode, "调度任务索引:" + fid.ToString());
|
|
|
|
|
|
//回写管理表
|
|
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 SetDeviceState(Model.MDevice Devinfo, out string Errtext)
|
|
{
|
|
try
|
|
{
|
|
string errText = string.Empty;
|
|
int lockstate=0;
|
|
int manTaskReserve=Devinfo.ManTaskReserve;
|
|
int errcode = 0;
|
|
int oldlockstate=ccf.GetDeviceLockedState(Devinfo.DeviceIndex);
|
|
int devidx = Devinfo.DeviceIndex; Model.MError errs = Model.CGetInfo.GetErrorInfo(Convert.ToInt32(Devinfo.DeviceKind.ToString() + Devinfo.ErrorCode.ToString())); StringBuilder sql = new StringBuilder();//20160501
|
|
if (Devinfo.RunState == 4)
|
|
{
|
|
if (oldlockstate != -1)
|
|
{
|
|
#region 20160501统计上次报警 注释
|
|
//if (errs != null)
|
|
//{
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("UPDATE T_Base_Device_Error_Log SET F_FixDateTime ='").Append(DateTime.Now.ToString("u")).Append("' Where F_DeviceIndex=")
|
|
// .Append(devidx).Append(" and F_ErrorIndex=").Append(errs.ErrorIndex).Append(" and F_ManageTaskNo=").Append(Model.CGeneralFunction.GetManageTaskIndexfromMonitor(Devinfo.TaskNo));
|
|
// dbo.ExceSQL(sql.ToString());
|
|
// if (errs.IfAlarm == '1')
|
|
// {//20160501
|
|
// CStaticClass.UpdateDeviceOEE(devidx, DateTime.Now.Date, 0, 0, 0, 0
|
|
// , 0, ccf.GetAlarmTimeSpan(devidx), errs.ErrorKind, 0, out errText);//统计上次报警
|
|
// dbo.ExecuteSql(string.Format("update T_Base_Device set F_AlarmStartTime='-' where F_DeviceIndex ={0}", devidx));
|
|
// }
|
|
// else
|
|
// {
|
|
// CStaticClass.UpdateDeviceOEE(devidx, DateTime.Now.Date, 0, 0, 0, 0
|
|
// , ccf.GetErrorTimeSpan(devidx), 0, errs.ErrorKind, 0, out errText);//统计上次故障
|
|
// dbo.ExecuteSql(string.Format("update T_Base_Device set F_ErrorStartTime='-' where F_DeviceIndex ={0}", devidx));
|
|
// }
|
|
//}
|
|
#endregion
|
|
#region 20160501记录计划检修开始时间(停用时间) 注释
|
|
// dbo.ExecuteSql(string.Format("update T_Base_Device set F_ScheduledRepairStartTime='{1}' where F_DeviceIndex ={0}", Devinfo.DeviceIndex, DateTime.Now.ToString("u").Substring(0,19)));
|
|
#endregion
|
|
|
|
}
|
|
lockstate = -1;
|
|
errcode = 998;
|
|
}
|
|
else
|
|
{
|
|
if (oldlockstate == -1)
|
|
{//上次计划检修(停用)结束
|
|
#region 20160501上次计划检修(停用)结束 注释
|
|
// CStaticClass.UpdateDeviceOEE(Devinfo.DeviceIndex, DateTime.Now.Date, 0, 0, 0, 0
|
|
//, 0, 0,'O', ccf.GetScheduledRepairTimeSpan(Devinfo.DeviceIndex), out errText);
|
|
// dbo.ExecuteSql(string.Format("update T_Base_Device set F_ScheduledRepairStartTime='-' where F_DeviceIndex ={0}", Devinfo.DeviceIndex ));
|
|
#endregion
|
|
}
|
|
errcode = Devinfo.ErrorCode;
|
|
lockstate = Devinfo.RunState;
|
|
}
|
|
|
|
object[] ob=new object[4]{lockstate,errcode,manTaskReserve,Devinfo.DeviceIndex};
|
|
dbo.ExecuteSql( string.Format("UPDATE T_Base_Device SET F_LockedState ={0},f_errorcode={1},F_ManTaskReserve ={2} where F_DeviceIndex= {3}",ob));
|
|
Model.CGetInfo.SetDeviceInfo(Devinfo);
|
|
Model.CGetInfo.SetModifyPathDeviceInfo(Devinfo);//20200521
|
|
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;
|
|
using (StreamReader sr = new StreamReader(opf))
|
|
{
|
|
|
|
sr.ReadLine();
|
|
while (!sr.EndOfStream)
|
|
{
|
|
sp = sr.ReadLine().Split(cc, StringSplitOptions.RemoveEmptyEntries);
|
|
|
|
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();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 获得管理任务种类
|
|
/// </summary>
|
|
/// <param name="errtext"></param>
|
|
/// <param name="monitorIndex">设备指令索引</param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 获得管理任务索引
|
|
/// </summary>
|
|
/// <param name="errtext"></param>
|
|
/// <param name="monitorIndex">设备指令索引</param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 获得设备种类索引
|
|
/// </summary>
|
|
/// <param name="errtext"></param>
|
|
/// <param name="deviceIndex">设备索引</param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 发送设备置位清零
|
|
/// </summary>
|
|
/// <param name="errtext"></param>
|
|
/// <param name="deviceIndex"></param>
|
|
/// <returns></returns>
|
|
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(ResetOrder, 0, 0, deviceIndex, 0, 0, 0, 0, 0, 0);
|
|
}
|
|
else if (deviceKind == 40) //LHDF
|
|
{
|
|
devinfo = Model.CGetInfo.GetDeviceInfo(deviceIndex);
|
|
witemnames[0].Clear();
|
|
witemnames[0].Append(Model.CGeneralFunction.DBSend).Append(".").Append(Convert.ToString(devinfo.Dbw1Address + 0)).Append(",b");//20130510
|
|
wv[0].Clear();
|
|
wv[0].Append(ResetOrder);
|
|
sdo.WriteDBData(witemnames, wv, devinfo.S7Connection);
|
|
}
|
|
else
|
|
{
|
|
|
|
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;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 心跳诊断
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
/// <summary>
|
|
/// 获得指定SQL语句返回的DataView
|
|
/// </summary>
|
|
/// <param name="errtext"></param>
|
|
/// <param name="SQL"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 只执行SQL,不反悔数据集的,例如insert,update,delete等
|
|
/// </summary>
|
|
/// <param name="errtext"></param>
|
|
/// <param name="SQL"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 获得指定SQL语句返回的DataView
|
|
/// </summary>
|
|
/// <param name="errtext"></param>
|
|
/// <param name="SQL"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 只执行SQL,不反悔数据集的,例如insert,update,delete等
|
|
/// </summary>
|
|
/// <param name="errtext"></param>
|
|
/// <param name="SQL"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
}
|
|
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由小到大排序,拆分到具体每个设备
|
|
//获取设备状态
|
|
lock (thisLock)
|
|
{
|
|
if (deviceindex == 26301)
|
|
{
|
|
int u = 0;
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "进入数据变化事件!", deviceindex.ToString(), "日志记录!");
|
|
|
|
}
|
|
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);
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "数据空!", deviceindex.ToString(), "日志记录!");
|
|
|
|
return false;
|
|
}
|
|
errtext = string.Empty; DataView dv = new DataView(); DataView dvsp = new DataView(); DataView dvbc = new DataView();DataView dvmt = new DataView();
|
|
int devicebegin = 0; int DBW2Addressbegin = 0; int SplitBytebegin = 0; string S7Connection = string.Empty;
|
|
int SplitByteLength = 0;
|
|
|
|
|
|
|
|
try
|
|
{
|
|
// 查找f_controldevice='1'并且F_DeviceKindIndex <>33 的订阅组,
|
|
//f_controldevice设置为0的设备只在客户端显示状态,服务端不处理状态,减少压力
|
|
StringBuilder sql = new StringBuilder(string.Format("SELECT F_DeviceIndex, F_DBW2Address, F_DBWGetLength, F_SplitByte,F_S7Connection FROM T_Base_Device WHERE f_controldevice='1' and (F_DeviceKindIndex <>33) AND (F_ReadSubscription = '{0}') AND (F_DBW2Address IS NOT NULL) ORDER BY F_DBW2Address", deviceindex));//20151120,增加字段是否需要服务端处理设备的订阅
|
|
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"]);
|
|
if (dv[0]["F_SplitByte"]!= DBNull.Value)
|
|
{
|
|
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 T_Base_Device 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);
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "进入数据变化事件!", deviceindex.ToString(), "订阅组不存在!");
|
|
|
|
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_controldevice='1' and (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;//20151120,增加字段是否需要服务端处理设备的订阅
|
|
// 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();
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "数据空222!", deviceindex.ToString(), "日志记录!");
|
|
|
|
if (devicestates != null)
|
|
{
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "数据空333!", deviceindex.ToString(), "日志记录!");
|
|
|
|
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.Dbw2Address + 0)).Append(",b");//20141201张磊发现误写为Dbw1Address
|
|
sdo = CommModeCreate.CreateSendDeviceOrder(devidx);
|
|
int taskindex = 0; int state = 0;
|
|
int taskindex2 = 0, taskindex3 = 0;
|
|
|
|
if (devidx==46013)
|
|
{
|
|
|
|
}
|
|
if (devidx == 121271)
|
|
{
|
|
|
|
}
|
|
|
|
if (devidx == 22260)
|
|
{
|
|
|
|
}
|
|
//以下代码重新开发CStaticClass.MutiS7ConnReturns改为按照F_ReadSubscription
|
|
tempdb2addr = Convert.ToInt32(dv[di]["F_DBW2Address"]) - DBW2Addressbegin;
|
|
if (3 < devinfo.Dbw2Getlength && (devinfo .DeviceKind ==1 || devinfo .DeviceKind ==2 || devinfo .DeviceKind ==4) )
|
|
{
|
|
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 devkind = ccf.GetDeviceKindIdx(devidx);
|
|
if (devkind == 31)
|
|
{//解析南京14所得高端自动化的是否有物信号,高位低位信号(I/O信号字节填写在状态字节的后面)
|
|
#region 解析高端设备状态及探物
|
|
devinfo = Model.CGetInfo.GetDeviceInfo(devidx);
|
|
state = (devicestates[tempdb2addr + 0] & 1) == 1 ? 1 : 0;
|
|
devinfo.SplitByte_0 = (devicestates[tempdb2addr + 4] & 1) == 1 ? 1 : 0;
|
|
devinfo.SplitByte_1 = (devicestates[tempdb2addr + 4] & 2) == 2 ? 1 : 0;
|
|
devinfo.SplitByte_2 = (devicestates[tempdb2addr + 4] & 4) == 4 ? 1 : 0;
|
|
devinfo.SplitByte_3 = (devicestates[tempdb2addr + 4] & 8) == 8 ? 1 : 0;
|
|
devinfo.SplitByte_4 = (devicestates[tempdb2addr + 4] & 16) == 16 ? 1 : 0;
|
|
devinfo.SplitByte_5 = (devicestates[tempdb2addr + 4] & 32) == 32 ? 1 : 0;
|
|
devinfo.SplitByte_6 = (devicestates[tempdb2addr + 4] & 64) == 64 ? 1 : 0;
|
|
devinfo.SplitByte_7 = (devicestates[tempdb2addr + 4] & 128) == 128 ? 1 : 0;
|
|
if (devinfo.RunState != 4)//20121203
|
|
{
|
|
if (state == 1)
|
|
{
|
|
|
|
devinfo.RunState = 0;
|
|
}
|
|
else
|
|
{//0,1,2
|
|
|
|
devinfo.RunState =1;
|
|
|
|
|
|
devinfo.ErrorCode = state;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
#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 (1 < devinfo.Dbw2Getlength)
|
|
{
|
|
state = devicestates[tempdb2addr + 1];
|
|
}
|
|
if (devinfo.RunState != 4)//20121203
|
|
{
|
|
string errText = string.Empty;
|
|
if (state >= 30)
|
|
{
|
|
|
|
#region 20160501故障信息变化,上一故障结束,新故障开始 20221110注释
|
|
|
|
////30手动代表原有故障结束填写F_FixDateTime,进入手动报警状态
|
|
//Model.MError errs;
|
|
//if (devinfo.ErrorCode != state && devinfo.ErrorCode>=30)
|
|
//{
|
|
// #region 上一次报警或者故障时间分别统计记录
|
|
|
|
// errs = Model.CGetInfo.GetErrorInfo(Convert.ToInt32(devkind.ToString() + devinfo.ErrorCode.ToString()));
|
|
// if (errs != null)
|
|
// {
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("UPDATE T_Base_Device_Error_Log SET F_FixDateTime ='").Append(DateTime.Now.ToString("u")).Append("' Where F_DeviceIndex=")
|
|
// .Append(devidx).Append(" and F_ErrorIndex=").Append(errs.ErrorIndex).Append(" and F_ManageTaskNo=").Append(Model.CGeneralFunction.GetManageTaskIndexfromMonitor(taskindex));
|
|
// dbo.ExceSQL(sql.ToString());
|
|
// if (errs.IfAlarm == '1')
|
|
// {
|
|
// CStaticClass.UpdateDeviceOEE(devidx, DateTime.Now.Date, 0, 0, 0, 0
|
|
// , 0, ccf.GetAlarmTimeSpan(devidx),errs.ErrorKind, 0, out errText);//统计上次报警
|
|
// dbo.ExecuteSql(string.Format("update T_Base_Device set F_AlarmStartTime='-' where F_DeviceIndex ={0}", devidx));
|
|
// }
|
|
// else
|
|
// {
|
|
// CStaticClass.UpdateDeviceOEE(devidx, DateTime.Now.Date, 0, 0, 0, 0
|
|
// , ccf.GetErrorTimeSpan(devidx), 0,errs.ErrorKind, 0, out errText);//统计上次故障
|
|
// dbo.ExecuteSql(string.Format("update T_Base_Device set F_ErrorStartTime='-' where F_DeviceIndex ={0}", devidx));
|
|
// }
|
|
// }
|
|
// #endregion
|
|
// //新的报警或故障开始计时
|
|
// errs = Model.CGetInfo.GetErrorInfo(Convert.ToInt32(devkind.ToString() + state.ToString()));
|
|
// if (errs != null)
|
|
// {
|
|
// if (errs.IfAlarm == '1')
|
|
// {
|
|
// dbo.ExecuteSql(string.Format("update T_Base_Device set F_AlarmStartTime='{1}' where F_DeviceIndex ={0}", devidx, DateTime.Now.ToString("u").Substring(0, 19)));
|
|
// }
|
|
// else
|
|
// {
|
|
// dbo.ExecuteSql(string.Format("update T_Base_Device set F_ErrorStartTime='{1}' where F_DeviceIndex ={0}", devidx, DateTime.Now.ToString("u").Substring(0, 19)));
|
|
// }
|
|
// }
|
|
//}
|
|
//else if (devinfo.ErrorCode != state && devinfo.ErrorCode < 30)
|
|
//{//求上一次运行时间
|
|
// CStaticClass.UpdateDeviceOEE(devidx, DateTime.Now.Date, 0, 0, 0, ccf.GetConveyorRunTimeSpan(devidx)
|
|
// ,0,0,'O',0, out errText);//统计上次运行时间
|
|
// dbo.ExecuteSql(string.Format("update T_Base_Device set F_ConveyorRunStartTime='-' where F_DeviceIndex ={0}", devidx));
|
|
// //新的报警或故障开始计时
|
|
// errs = Model.CGetInfo.GetErrorInfo(Convert.ToInt32(devkind.ToString() + state.ToString()));
|
|
// if (errs != null)
|
|
// {
|
|
// if (errs.IfAlarm == '1')
|
|
// {
|
|
// dbo.ExecuteSql(string.Format("update T_Base_Device set F_AlarmStartTime='{1}' where F_DeviceIndex ={0}", devidx, DateTime.Now.ToString("u").Substring(0, 19)));
|
|
// }
|
|
// else
|
|
// {
|
|
// dbo.ExecuteSql(string.Format("update T_Base_Device set F_ErrorStartTime='{1}' where F_DeviceIndex ={0}", devidx, DateTime.Now.ToString("u").Substring(0, 19)));
|
|
// }
|
|
// }
|
|
//}
|
|
#endregion
|
|
devinfo.ErrorCode = state;
|
|
devinfo.RunState = 2;
|
|
}
|
|
else
|
|
{//0,1,2
|
|
#region 20160501上一故障结束,输送机任务变化:任务数增加1 20221110注释
|
|
////输送机状态变化:0->1开始运行;1->0运行结束,运行时间增加
|
|
//if (devinfo.ErrorCode >= 30)
|
|
//{
|
|
// #region 如果上一次报警或者故障结束,清除时间,改为运行时间
|
|
|
|
// Model.MError errs = Model.CGetInfo.GetErrorInfo(Convert.ToInt32(devkind.ToString() + devinfo.ErrorCode.ToString()));
|
|
// if (errs != null)
|
|
// {
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("UPDATE T_Base_Device_Error_Log SET F_FixDateTime ='").Append(DateTime.Now.ToString("u")).Append("' Where F_DeviceIndex=")
|
|
// .Append(devidx).Append(" and F_ErrorIndex=").Append(errs.ErrorIndex).Append(" and F_ManageTaskNo=").Append(Model.CGeneralFunction.GetManageTaskIndexfromMonitor(taskindex));
|
|
// dbo.ExceSQL(sql.ToString());
|
|
// if (errs.IfAlarm == '1')
|
|
// {
|
|
// CStaticClass.UpdateDeviceOEE(devidx, DateTime.Now.Date, 0, 0, 0, 0
|
|
// , 0, ccf.GetAlarmTimeSpan(devidx),errs.ErrorKind, 0, out errText);
|
|
// dbo.ExecuteSql(string.Format("update T_Base_Device set F_AlarmStartTime='-' where F_DeviceIndex ={0}", devidx));
|
|
// }
|
|
// else
|
|
// {
|
|
// CStaticClass.UpdateDeviceOEE(devidx, DateTime.Now.Date, 0, 0, 0, 0
|
|
// , ccf.GetErrorTimeSpan(devidx), 0,errs.ErrorKind, 0, out errText);
|
|
// dbo.ExecuteSql(string.Format("update T_Base_Device set F_ErrorStartTime='-' where F_DeviceIndex ={0}", devidx));
|
|
// }
|
|
// //开始记录运行时间
|
|
// if (devkind == 2)
|
|
// {
|
|
// dbo.ExecuteSql(string.Format("update T_Base_Device set F_ConveyorRunStartTime='{1}' where F_DeviceIndex ={0}", devidx, DateTime.Now.ToString("u").Substring(0, 19)));
|
|
// }
|
|
// }
|
|
// #endregion
|
|
//}
|
|
//else
|
|
//{//状态变化:0->1开始运行;1->0()运行结束,运行时间增加
|
|
// if (devinfo.ErrorCode == 0 && state == 1 && devkind==2)
|
|
// {
|
|
// //开始记录运行时间
|
|
// dbo.ExecuteSql(string.Format("update T_Base_Device set F_ConveyorRunStartTime='{1}' where F_DeviceIndex ={0}", devidx, DateTime.Now.ToString("u").Substring(0, 19)));
|
|
// }
|
|
// else if (devinfo.ErrorCode == 1 && (state == 0 || state == 2) && devkind==2)
|
|
// {
|
|
// CStaticClass.UpdateDeviceOEE(devidx, DateTime.Now.Date, 0, 0, 0, ccf.GetConveyorRunTimeSpan(devidx)
|
|
// , 0, 0,'O', 0, out errText);//统计上次运行时间
|
|
// dbo.ExecuteSql(string.Format("update T_Base_Device set F_ConveyorRunStartTime='-' where F_DeviceIndex ={0}", devidx));
|
|
// }
|
|
|
|
//}
|
|
////任务变化
|
|
//if (devinfo.TaskNo != taskindex && devkind == 2 && taskindex>0)
|
|
//{
|
|
// CStaticClass.UpdateDeviceOEE(devidx, DateTime.Now.Date,1, 0, 0, 0
|
|
// ,0, 0,'O', 0, out errText);
|
|
//}
|
|
#endregion
|
|
if (state == 2)
|
|
{
|
|
devinfo.RunState = 5;
|
|
}
|
|
else
|
|
{
|
|
devinfo.RunState = state;
|
|
}
|
|
|
|
devinfo.ErrorCode = state;
|
|
|
|
|
|
}
|
|
}
|
|
//CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "有数据444!", deviceindex.ToString(), "日志记录!");
|
|
|
|
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坐标
|
|
}
|
|
}
|
|
|
|
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
|
|
}
|
|
#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);
|
|
//CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "有数据555!", deviceindex.ToString(), "日志记录!");
|
|
|
|
#region 新版标准协议,取得设备光电信号
|
|
int byteprio = 0;
|
|
switch (devkind)
|
|
{
|
|
case 1:
|
|
byteprio = 13;
|
|
break;
|
|
case 2:
|
|
byteprio = 4;
|
|
break;
|
|
case 4:
|
|
byteprio = 8;
|
|
break;
|
|
}
|
|
|
|
if (devidx == 11003)
|
|
{
|
|
|
|
}
|
|
if (byteprio > 0)
|
|
{
|
|
|
|
devinfo.SplitByte_0 = (devicestates[tempdb2addr + byteprio] & 1) == 1 ? 1 : 0+ (devicestates[tempdb2addr + byteprio] & 2) == 2 ? 1 : 0;
|
|
devinfo.SplitByte_1 = (devicestates[tempdb2addr + byteprio] & 2) == 2 ? 1 : 0;
|
|
devinfo.SplitByte_2 = (devicestates[tempdb2addr + byteprio] & 4) == 4 ? 1 : 0;
|
|
devinfo.SplitByte_3 = (devicestates[tempdb2addr + byteprio] & 8) == 8 ? 1 : 0;
|
|
devinfo.SplitByte_4 = (devicestates[tempdb2addr + byteprio] & 16) == 16 ? 1 : 0;
|
|
devinfo.SplitByte_5 = (devicestates[tempdb2addr + byteprio] & 32) == 32 ? 1 : 0;
|
|
devinfo.SplitByte_6 = (devicestates[tempdb2addr + byteprio] & 64) == 64 ? 1 : 0;
|
|
devinfo.SplitByte_7 = (devicestates[tempdb2addr + byteprio] & 128) == 128 ? 1 : 0;
|
|
|
|
#region 20220425 骊骅淀粉实时上报WMS异常口有货开关状态
|
|
//if (devidx == 22037 || devidx == 22038)
|
|
//{
|
|
// dboMan.ExceSQL(string.Format(" update IO_DEVICE_FLAG set FLAG = '{0}' where DEVICE_CODE = {1}", devinfo.SplitByte_0, devidx));
|
|
|
|
//}
|
|
|
|
#endregion
|
|
}
|
|
#endregion
|
|
|
|
|
|
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坐标
|
|
devinfo.ReturnMessage = states;
|
|
Model.CGetInfo.SetDeviceMessage(devinfo);
|
|
sss.Remove(0, sss.Length);
|
|
sss.Append("**条码:").Append(bc).Append("**读标志" + devicestates[tempdb2addr + 0]).Append("**状态" + state).Append("**任务号" + taskindex)
|
|
.Append("**列坐标" + xc).Append("**层坐标" + yc);
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到堆垛机状态", devidx.ToString(), sss.ToString());
|
|
|
|
|
|
//if (devicestates[tempdb2addr + 0] != 1) continue;
|
|
if ((state <= 0) || (taskindex <= 0))
|
|
{
|
|
continue;
|
|
}
|
|
cgs.GetKindDeviceState(taskindex, devidx, state);
|
|
}
|
|
break;
|
|
#endregion
|
|
|
|
#region 类输送机
|
|
case 2:
|
|
if (IsEquals(devinfo.ReturnMessage, states, 4) == false)
|
|
{
|
|
//if (devinfo.S7Connection != "S7 connection_1")
|
|
//{
|
|
// continue;
|
|
//}
|
|
//if (devidx == 22226)
|
|
//{
|
|
// if (devinfo.SplitByte_0==1)
|
|
// {
|
|
// string dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
// int AutoManageIdx = ccf.GetTempManageIdx();
|
|
// //var dcode = 22226;
|
|
// var iDevice = "22202";
|
|
|
|
// dvbc = dbo.ExceSQL(string.Format("select fid from T_Manage_Task where FENDDEVICE = '{0}' and fstartdevice='{1}' AND FCONTROLTASKTYPE = 4 ", iDevice, devidx)).Tables[0].DefaultView;
|
|
// if ( dvbc.Count <= 0)
|
|
// {
|
|
// //插入临时调度任务T_Manage_Task(监控下的调度任务):
|
|
|
|
// string Sql = "insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL," +
|
|
// "FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME) " +
|
|
// "values(" + AutoManageIdx + ",'" + "PP" + devidx.ToString() + "','4',2,'1','" + devidx + "','-','1','"
|
|
// + iDevice + "','-', '-' ,'','-','" + dtime + "')";//20101028
|
|
// if (dbo.ExecuteSql(Sql) > 0)
|
|
// {
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "生成自动任务成功", devidx.ToString(), $"生成{devidx}到{iDevice} 任务成功!");
|
|
|
|
// }
|
|
// }
|
|
// }
|
|
//}
|
|
|
|
|
|
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());
|
|
#region 20200923 双鹿电池,德玛提升机出口设备,报告空闲需要清理DB1的标志位
|
|
if (devidx > 99999 && state == 0)// 6位编号输送线状态
|
|
{
|
|
SendDeviceReset(out errtext, devidx, 1);// 标志位!=2 或4
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "提升机出口状态0", devidx.ToString(), "回复握手标记:1" );
|
|
}
|
|
#endregion
|
|
|
|
//if (devicestates[tempdb2addr + 0] != 1) continue;
|
|
if (state <= 0)//20140305|| taskindex <= 0
|
|
{
|
|
continue;
|
|
}
|
|
|
|
#region 骊骅淀粉增加出库称重校验,命令9
|
|
if ((devidx == 12047 || devidx == 12050) && GetTaskOrderFromMonitorIndex(taskindex)== 9 && state == 2)
|
|
{
|
|
int PLCWeight = (devicestates[tempdb2addr + 6] << 8) + devicestates[tempdb2addr + 7];
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "PLC上报称重完成", devidx.ToString(), "称重信息:" + PLCWeight.ToString().ToUpper());
|
|
|
|
int FID = ccf.GetManageTaskIndexfromMonitor(taskindex);
|
|
int WMSWeight = Convert.ToInt32(ccf.GetMWSWeightFromFID(FID));
|
|
CStaticClass.WeightError = CommonClassLib.AppSettings.GetValue("WeightError");
|
|
if (Math.Abs(PLCWeight - WMSWeight) > Convert.ToInt32(CStaticClass.WeightError))
|
|
{
|
|
int manTKind = ccf.GetManageTaskKindIndexFromMonitor(taskindex);
|
|
// 误差过大,上报WMS异常完成,990-异常完成,ERROR_TEXT 称重异常时调度写入(电气实际上报重量)
|
|
// sql.Append("update T_Manage_Task set FExceptionNO=").Append(Model.CGeneralFunction.TASKABEND).Append(",PALLET_SIZE = ").Append(PLCWeight).Append(" where (F_ManageTaskKindIndex = ").Append(manTKind).Append(") AND (FID = ").Append(FID).Append(")");
|
|
sql.Append("update T_Manage_Task set FExceptionNO='").Append("',PALLET_SIZE = ").Append(PLCWeight).Append(" where (F_ManageTaskKindIndex = ").Append(manTKind).Append(") AND (FID = ").Append(FID).Append(")");
|
|
dbo.ExceSQL(sql.ToString());
|
|
//cgs.ActionComplete(devidx, taskindex, 990);
|
|
}
|
|
else
|
|
{
|
|
int manTKind = ccf.GetManageTaskKindIndexFromMonitor(taskindex);
|
|
sql.Append("update T_Manage_Task set FExceptionNO='").Append("',PALLET_SIZE = ").Append(WMSWeight).Append(" where (F_ManageTaskKindIndex = ").Append(manTKind).Append(") AND (FID = ").Append(FID).Append(")");
|
|
dbo.ExceSQL(sql.ToString()); ;// 正常完成
|
|
}
|
|
cgs.ActionComplete(devidx, taskindex, 1);
|
|
break;
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
if ((taskindex2 > 0 || taskindex3 > 0) && (state == 2))
|
|
{//20120906根据电气报告三叉关联,配三叉
|
|
#region 根据电气报告三叉关联,配三叉
|
|
if (((devidx >= 32665) && (devidx <= 32668)) || ((devidx >= 42616) && (devidx <= 42619)))
|
|
{
|
|
devidx = devidx * 10 + 3;
|
|
}
|
|
string aa;
|
|
int mankind = 0, fid1 = 0, fid2 = 0, fid3 = 0, relFID = 0, tindex = 0;
|
|
if (taskindex3 > 0)
|
|
{
|
|
mankind = GetManageTaskKindFromMonitor(out aa, taskindex3);
|
|
relFID = GetManageTaskIndexFromMonitor(out aa, taskindex3);
|
|
tindex = taskindex3;
|
|
}
|
|
else
|
|
{
|
|
mankind = GetManageTaskKindFromMonitor(out aa, taskindex2);
|
|
relFID = GetManageTaskIndexFromMonitor(out aa, taskindex2);
|
|
tindex = taskindex2;
|
|
}
|
|
fid1 = GetManageTaskIndexFromMonitor(out aa, taskindex);
|
|
fid2 = GetManageTaskIndexFromMonitor(out aa, taskindex2);
|
|
fid3 = GetManageTaskIndexFromMonitor(out aa, taskindex3);
|
|
//关联分配三叉
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("update T_Manage_Task set FUseAwayFork=1,F_RELATIVECONTORLID=").Append(relFID).Append(" where F_ManageTaskKindIndex=").Append(mankind).Append(" and FID=").Append(fid1);
|
|
dbo.ExecuteSql(sql.ToString());
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("update T_Manage_Task set FUseAwayFork=2,F_RELATIVECONTORLID=").Append(relFID).Append(" where F_ManageTaskKindIndex=").Append(mankind).Append(" and FID=").Append(fid2);
|
|
dbo.ExecuteSql(sql.ToString());
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("update T_Manage_Task set FUseAwayFork=3,F_RELATIVECONTORLID=").Append(relFID).Append(" where F_ManageTaskKindIndex=").Append(mankind).Append(" and FID=").Append(fid3);
|
|
dbo.ExecuteSql(sql.ToString());
|
|
int dev3 = devidx;
|
|
int dev2 = 0, dev1 = 0;
|
|
//堆垛机设备指令配叉F_UseAwayFork、提前检测F_AheadDetect、取货坐标F_NumParam2
|
|
sql.Clear();//20151120
|
|
if (CStaticClass.DBFactory == "OracleDBFactory")
|
|
{//20151120调度系统oracle的特殊语句
|
|
sql.Append(string.Format("SELECT F_ManageTASKKINDINDEX,F_ManageTaskIndex,F_MonitorIndex, F_DeviceIndex FROM T_Monitor_Task WHERE rownum=1 and F_ManageTASKKINDINDEX={0} and F_ManageTaskIndex={1} and (F_MonitorIndex > {2}) ORDER BY F_MonitorIndex", mankind, relFID, tindex));
|
|
}
|
|
else
|
|
{//20151120调度系统SQLServer的特殊语句
|
|
sql.Append(string.Format("SELECT TOP 1 F_ManageTASKKINDINDEX,F_ManageTaskIndex,F_MonitorIndex, F_DeviceIndex FROM T_Monitor_Task WHERE F_ManageTASKKINDINDEX={0} and F_ManageTaskIndex={1} and (F_MonitorIndex > {2}) ORDER BY F_MonitorIndex", mankind, relFID, tindex));
|
|
}
|
|
DataView dvr = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;//20151120调度系统oracle的特殊语句
|
|
if (dvr.Count > 0)
|
|
{
|
|
int stackno = Convert.ToInt32(dvr[0]["F_DeviceIndex"]);
|
|
dbo.ExceSQL(string.Format("UPDATE T_Monitor_Task SET F_NumParam2=1,F_UseAwayFork = 1 WHERE F_DeviceIndex={0} and (F_ManageTaskIndex ={1}) AND (F_ManageTASKKINDINDEX ={2})", stackno, fid1, mankind));
|
|
dbo.ExceSQL(string.Format("UPDATE T_Monitor_Task SET F_NumParam2=2,F_UseAwayFork = 2 WHERE F_DeviceIndex={0} and (F_ManageTaskIndex ={1}) AND (F_ManageTASKKINDINDEX ={2})", stackno, fid2, mankind));
|
|
dbo.ExceSQL(string.Format("UPDATE T_Monitor_Task SET F_NumParam2=3,F_UseAwayFork = 3 WHERE F_DeviceIndex={0} and (F_ManageTaskIndex ={1}) AND (F_ManageTASKKINDINDEX ={2})", stackno, fid3, mankind));
|
|
object[] ob;
|
|
dvr = dbo.ExceSQL(string.Format("SELECT F_LaneGateDeviceIndex FROM T_Base_Lane_Gate WHERE (F_CorrelDeviceIndex LIKE '%{0}%') AND (F_UseAwayFork = '1')", devidx)).Tables[0].DefaultView;
|
|
if ((dvr.Count > 0) && (fid1 > 0))
|
|
{
|
|
dev1 = Convert.ToInt32(dvr[0]["F_LaneGateDeviceIndex"]);
|
|
ob = new object[5] { devidx, dev1, stackno, fid1, mankind };
|
|
dbo.ExceSQL(string.Format("UPDATE T_Monitor_Task SET F_AheadDetect = REPLACE(F_AheadDetect, '{0}', '{1}') WHERE F_DeviceIndex={2} and (F_ManageTaskIndex ={3}) AND (F_ManageTASKKINDINDEX ={4})", ob));
|
|
ob = new object[4] { dev1.ToString().Substring(0, 5), stackno, fid1, mankind };
|
|
dbo.ExceSQL(string.Format("UPDATE T_Monitor_Task SET F_AheadDetect = REPLACE(F_AheadDetect, '{0}.2', '{0}.0') WHERE F_DeviceIndex={1} and (F_ManageTaskIndex ={2}) AND (F_ManageTASKKINDINDEX ={3})", ob));
|
|
}
|
|
dvr = dbo.ExceSQL(string.Format("SELECT F_LaneGateDeviceIndex FROM T_Base_Lane_Gate WHERE (F_CorrelDeviceIndex LIKE '%{0}%') AND (F_UseAwayFork = '2')", devidx)).Tables[0].DefaultView;
|
|
if ((dvr.Count > 0) && (fid2 > 0))
|
|
{
|
|
dev2 = Convert.ToInt32(dvr[0]["F_LaneGateDeviceIndex"]);
|
|
ob = new object[5] { devidx, dev2, stackno, fid2, mankind };
|
|
dbo.ExceSQL(string.Format("UPDATE T_Monitor_Task SET F_AheadDetect = REPLACE(F_AheadDetect, '{0}', '{1}') WHERE F_DeviceIndex={2} and (F_ManageTaskIndex ={3}) AND (F_ManageTASKKINDINDEX ={4})", ob));
|
|
ob = new object[4] { dev2.ToString().Substring(0, 5), stackno, fid2, mankind };
|
|
dbo.ExceSQL(string.Format("UPDATE T_Monitor_Task SET F_AheadDetect = REPLACE(F_AheadDetect, '{0}.2', '{0}.1') WHERE F_DeviceIndex={1} and (F_ManageTaskIndex ={2}) AND (F_ManageTASKKINDINDEX ={3})", ob));
|
|
}
|
|
|
|
}
|
|
cgs.ActionComplete(dev1, taskindex, 1);
|
|
cgs.ActionComplete(dev2, taskindex2, 1);
|
|
cgs.ActionComplete(dev3, taskindex3, 1);
|
|
#endregion
|
|
}
|
|
else
|
|
{
|
|
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());
|
|
|
|
|
|
if (devicestates[tempdb2addr + 0] != 1) continue;
|
|
if ((state <= 0) || (taskindex <= 0))
|
|
{
|
|
continue;
|
|
}
|
|
cgs.GetKindDeviceState(taskindex, devidx, state);
|
|
}
|
|
break;
|
|
#endregion
|
|
|
|
#region 7条形码字符串信息
|
|
case 7:
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码阅读器:", devidx.ToString(), "分组:" + deviceindex.ToString() + "tempdb2addr:" + tempdb2addr.ToString());
|
|
if (devicestates[tempdb2addr + 0] != 1)
|
|
{
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码阅读器:", devidx.ToString(), "分组:" + deviceindex.ToString() + "tempdb2addr:" + tempdb2addr.ToString() + "标志:" + devicestates[tempdb2addr + 0].ToString());
|
|
continue;
|
|
}
|
|
//20140109申请任务(任务不存在)或者条码比对(任务已经存在)
|
|
dvsp = dbo.ExceSQL(string.Format("select * from T_Base_PLC_Ask WHERE (F_DeviceIndex = {0}) ", devidx)).Tables[0].DefaultView; //20130510F_ManageAskkind
|
|
if (dvsp.Count > 0)
|
|
{
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "有数据666!", deviceindex.ToString(), "日志记录!");
|
|
|
|
StringBuilder warehouse = new StringBuilder(dvsp[0]["F_WareHouse"].ToString());
|
|
StringBuilder sbRfid = new StringBuilder();
|
|
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]; //数量,只要是上报条码必须预留数量字节
|
|
// int BoxQuality = devicestates[tempdb2addr + 6]; //数量,只要是上报条码必须预留数量字节
|
|
int BoxQuality = 1; // 润弘单条码入库;
|
|
int CheckHigh = devicestates[tempdb2addr + 1];// 检尺,0正常
|
|
string PalletCount = "";// 子托盘数量或者子托盘条码,杨文志要求默认值空字符
|
|
int Weight = devicestates[tempdb2addr + 4] * 256 + devicestates[tempdb2addr + 5];//称重重量2、3、4、---5
|
|
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));
|
|
// appbarArray[j] = new StringBuilder(ASCIIEncoding.ASCII.GetString(devicestates, tempdb2addr + 10 + j * BarcodeReservedLength, BarcodeReservedLength).Substring(0, BarcodeLength));
|
|
|
|
//}
|
|
barcode.Clear();
|
|
if (PalletBarcodeLength > 0)
|
|
{//普通扫描单箱的条码申请\机器人码垛的托盘条码
|
|
incompleteBarcode.Clear();//20150103
|
|
noneBarcode.Clear();//20150103
|
|
for (int j = 10; j <= PalletBarcodeLength; j++)
|
|
{//20150103
|
|
incompleteBarcode.Append("1");//PLC扫到残码,但是有货物,转换为字符'1'
|
|
noneBarcode.Append("0");//PLC没扫描,没货物,保留的空值0,转换为字符'\0'
|
|
}
|
|
// for (int j = 2; j < PalletBarcodeLength + 2; j++)
|
|
var BB = "";
|
|
var aa = "";
|
|
System.Text.ASCIIEncoding ASCIIencoin = new System.Text.ASCIIEncoding();
|
|
//var ss = string.Empty;
|
|
// 新协议第10位开始条码值20190806
|
|
for (int j = 10; j < 10+PalletBarcodeLength ; j++)
|
|
{
|
|
//barcode.Append(Convert.ToChar(devicestates[tempdb2addr + j]).ToString().ToUpper());
|
|
|
|
//ss= barcode.Append(devicestates[tempdb2addr + j]).ToString().ToUpper()
|
|
//ASCIIEncoding.ASCII.GetBytes(wd[0])
|
|
|
|
//barcode.Append(ASCIIEncoding.ASCII.GetBytes(devicestates[tempdb2addr + j].ToString()));
|
|
//var SS = ASCIIEncoding.ASCII.GetBytes("65");
|
|
//BB += devicestates[tempdb2addr + j];
|
|
|
|
barcode.Append(ASCIIencoin.GetString(new byte[] { (byte)Convert.ToInt32(devicestates[tempdb2addr + j]) }));
|
|
}
|
|
|
|
var bools = true;
|
|
|
|
///Rfid内容:从第20位开始
|
|
for (int i = 22; i < 50; i++)
|
|
{
|
|
if (bools)
|
|
{
|
|
BB += devicestates[tempdb2addr + i];
|
|
var values = ASCIIencoin.GetString(new byte[] { (byte)Convert.ToInt32(devicestates[tempdb2addr + i]) });
|
|
if (values == ",")
|
|
{
|
|
bools = false;
|
|
|
|
}
|
|
else {
|
|
|
|
sbRfid.Append(values);//devicestates[tempdb2addr + i].ToString().ToUpper()
|
|
}
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
|
|
PalletCount = devicestates[tempdb2addr + 53].ToString();
|
|
if (!(sbRfid.Length>2))
|
|
{
|
|
sbRfid.Clear();
|
|
}
|
|
|
|
|
|
//barcode.Clear();
|
|
//barcode.Append(DateTime.Now.ToString("yyyyMMddhhmmss"));
|
|
|
|
}
|
|
//if (BoxQuality > 0 && BarcodeLength > 0)//20140218
|
|
//{//周转箱叠箱和机器人码垛的(除托盘条码)表箱条码组
|
|
// 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 + 2 + 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());
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "读PLC条码", devidx.ToString(), "读标志1**条码:" + barcode.ToString().ToUpper() + ",检尺:" + CheckHigh.ToString() + ",重量:" + Weight.ToString()+" ,商品信息: "+ sbRfid.ToString());
|
|
|
|
}
|
|
else
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "读PLC条码比较相同!", devidx.ToString(), "读标志1**条码:" + barcode.ToString().ToUpper() + ",检尺:" + CheckHigh.ToString() + ",重量:" + Weight.ToString());
|
|
|
|
}
|
|
|
|
#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.ToString("u").Substring(0, 19)));
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "PLC重复上报条码:", devidx.ToString(), ",站台:" + dcode + ",条码:" + barcode.ToString().ToUpper());
|
|
break;
|
|
}
|
|
|
|
}//20130831richard
|
|
|
|
if (barcode.ToString()!= "NoRead")
|
|
{
|
|
|
|
switch (dvsp[0]["F_Askkind"].ToString())
|
|
{
|
|
case "4":
|
|
//普通条码申请任务
|
|
#region 普通条码申请任务
|
|
|
|
#region 扫到残码
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "读PLC条码比较残码之前!", devidx.ToString(), "读标志1**条码:" + barcode.ToString().ToUpper() + ",检尺:" + CheckHigh.ToString() + ",重量:" + Weight.ToString());
|
|
if (barcode.ToString() == incompleteBarcode.ToString())//LHDF
|
|
{//扫到残码
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务时1:", devidx.ToString(), ",站台:" + dcode + ",扫到残缺条码!" + barcode.ToString().ToUpper() + ",Remark:" + dvsp[0]["F_Remark"].ToString());
|
|
|
|
#region 是否具备申请任务扫码条件
|
|
int[] statess;
|
|
statess = CStaticClass.GetDeviceState(Convert.ToInt32(dvsp[0]["F_BindingDevice"]));
|
|
if (statess != null)
|
|
{
|
|
if (statess[1] != 0)
|
|
{
|
|
// 20201022 双鹿,取消检测条码器对应输送线状态
|
|
//break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
RefreshMonitorEventArgs rmea;
|
|
#region 原来就注释的代码
|
|
//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
|
|
#endregion
|
|
|
|
#region 原来就注释的代码
|
|
//if (dcode == 32634 || dcode == 42634)
|
|
//{
|
|
// //自动生成条码“9+dvsp[0]["F_BindingDevice"]+顺序号”
|
|
// barcode.Clear();
|
|
// barcode.Append(GetErrorBarcode(dcode, devidx, BarcodeLength));
|
|
//}
|
|
//else
|
|
//{
|
|
// int abst;
|
|
// if (int.TryParse(dvsp[0]["F_Remark"].ToString(), out abst) == true)
|
|
// {
|
|
// if (IfExitDeviceBarcodeTask(dcode, barcode.ToString()) == false || Convert.ToInt32(dvsp[0]["F_ManageAskkind"]) == 11) // 长段输送线可能连续扫不到,有任务不能不处理
|
|
// {
|
|
// #region 双鹿电池,扫不到条码全部向管理申请
|
|
// if (Convert.ToInt32(dvsp[0]["F_ManageAskkind"]) < 10)
|
|
// {
|
|
// 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));
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理上报残缺条码:", devidx.ToString(), ",站台:" + dcode + ",扫到残缺条码!" + barcode.ToString().ToUpper() + "***Remark:" + dvsp[0]["F_Remark"].ToString());
|
|
|
|
// }
|
|
// #endregion
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务时:", devidx.ToString(), ",站台:" + dcode + ",扫到残缺条码!" + barcode.ToString().ToUpper() + "***Remark:" + dvsp[0]["F_Remark"].ToString());
|
|
// rmea = new RefreshMonitorEventArgs("notifyIcon1", "警告:向管理条码申请任务时,站台:" + dcode + ",扫到残缺条码!时间:" + DateTime.Now.ToString("u") + "目标" +dvsp[0]["F_Remark"].ToString());
|
|
// OnRefreshMonitor(rmea);
|
|
// }
|
|
// wv[0].Clear();
|
|
// wv[0].Append("2");
|
|
// sdo = CommModeCreate.CreateSendDeviceOrder(devidx);
|
|
// sdo.WriteDBData(witemnames, wv, devinfo.S7Connection);
|
|
// if (Convert.ToInt32(dvsp[0]["F_ManageAskkind"]) < 10)// 20201026 双鹿电池,扫码错误也要向管理申请
|
|
// {
|
|
// continue;
|
|
// }
|
|
|
|
//}
|
|
#endregion
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 向管理申请任务
|
|
//Thread.Sleep(2500);
|
|
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)
|
|
{
|
|
dvbc = dboMan.ExceSQL(string.Format("select CONTROL_ID from IO_CONTROL where CONTROL_STATUS <> 999 AND STOCK_BARCODE like '%{0}%' ", barcode)).Tables[0].DefaultView;//and CONTROL_STATUS = 0
|
|
if (dvbc.Count <= 0)// 20201026 不是入库起点,中间段的申请,前段任务完成,管理可能没有处理中间表
|
|
{
|
|
dvbc = dbo.ExceSQL(string.Format("select fid from T_Manage_Task where FPALLETBARCODE like '%{0}%' and FSTARTDEVICE = {1}", barcode, dcode)).Tables[0].DefaultView;// 20210419 大现场入库口太多,任务判断增加申请点
|
|
if (dvbc.Count <= 0) //20200920 长输送多个申请
|
|
{
|
|
#region 双路电池20210615,处理22580
|
|
// 处理22580 有没完成的终点是22580的管理任务,报告完成
|
|
//if (dcode == 22580)
|
|
//{
|
|
// dvbc = dbo.ExceSQL(string.Format("select fid from T_Manage_Task where FPALLETBARCODE like '%{0}%' and FENDDEVICE = {1}", barcode, dcode)).Tables[0].DefaultView;// 终点到申请点的,之前的任务
|
|
// for (int i = 0; i < dvbc.Count; i++)
|
|
// {
|
|
// dvmt = dbo.ExceSQL(string.Format("select * from T_Monitor_Task where F_ManageTaskIndex = {0}", dvbc[i]["fid"])).Tables[0].DefaultView;// monitor command
|
|
// // 处理设备指令任务
|
|
// for (int j = 0; j < dvmt.Count; j++)
|
|
// {
|
|
// cgs.ActionComplete(dcode,Convert.ToInt32(dvmt[j]["F_MonitorIndex"]),1);
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务:", devidx.ToString(), ",站台:" + dcode + ",条码:" + barcode.ToString().ToUpper() + "残留之前的任务fid:" + dvbc[i]["fid"].ToString() + "自动报告完成" + "monitortask:" + dvmt[j]["F_MonitorIndex"].ToString());
|
|
|
|
// }
|
|
|
|
// //处理IO_Control表
|
|
// int n = dboMan.ExecuteSql(string.Format("update IO_CONTROL set CONTROL_STATUS = 999 where CONTROL_ID = {0}", dvbc[i]["fid"]));
|
|
// if (n > 0)
|
|
// {
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务:", devidx.ToString(), ",站台:" + dcode + ",条码:" + barcode.ToString().ToUpper()+"残留之前的任务fid:"+ dvbc[i]["fid"].ToString()+"自动给管理报告完成");
|
|
// }
|
|
// }
|
|
//}
|
|
#endregion
|
|
|
|
StringBuilder dtime = new StringBuilder(DateTime.Now.ToString("u"));
|
|
dtime.Remove(dtime.Length - 1, 1);
|
|
|
|
bool ifSQLServer = true;
|
|
if (CStaticClass.ManDBFactory == "OracleDBFactory")
|
|
{
|
|
ifSQLServer = false;
|
|
}
|
|
//int appid = dboMan.GetManageTableIndex("IO_CONTROL_APPLY", ifSQLServer);//CONTROL_APPLY_ID,oracle false
|
|
//object[] ob = new object[9] { apptype, dcode, barcode, 0, dtime, "", warehouse.ToString(), appid, BoxQuality };
|
|
//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,BOX_QUANTITY)VALUES ({7},{0},'{1}','{2}',{3},'{4}','{5}','{6}',{8})", ob));
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务:", devidx.ToString(), ",站台:" + dcode + ",条码:" + barcode.ToString().ToUpper());//20140218
|
|
//}
|
|
|
|
#region 20200810 双鹿电池,字母托盘合盘申请入库,条码包括两条码
|
|
string BarcodeToManage = barcode.ToString().Trim();
|
|
|
|
#endregion
|
|
|
|
// object[] ob = new object[8] { apptype, dcode, barcode, 0, dtime, "", warehouse.ToString(), BoxQuality };
|
|
//apptype = 0;// 20201022 shuanglu 所有类型都是0 CONTROL_APPLY_PARAMETER
|
|
object[] ob = new object[9] { apptype, dcode, BarcodeToManage, 0, dtime, sbRfid, warehouse.ToString(), CheckHigh.ToString(), PalletCount };//CONTROL_APPLY_PARAMETER
|
|
try
|
|
{
|
|
dboMan.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY( CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_PARAMETER,WAREHOUSE_CODE,CONTROL_APPLY_PARA01,CONTROL_APPLY_PARA02)VALUES ({0},'{1}','{2}',{3},'{4}','{5}','{6}','{7}','{8}')", ob));
|
|
|
|
//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,CONTROL_APPLY_ID,CONTROL_APPLY_PARA01,CONTROL_APPLY_PARA02)VALUES ({0},'{1}','{2}',{3},'{4}','{5}','{6}',{7},'{8}','{9}')", ob));
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务:", devidx.ToString(), " 站台:" + dcode + "**条码:" + BarcodeToManage.ToUpper() + ",高度:" + CheckHigh + ",重量:" + Weight + ",数量" + PalletCount);//20140218
|
|
}
|
|
|
|
catch (Exception ex)
|
|
{
|
|
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务时发生错误:" + ex.StackTrace + ex.Message);
|
|
OnRefreshMonitor(rmea);
|
|
continue;//20140218
|
|
}
|
|
|
|
|
|
}
|
|
#region 20200513 增加入库申请异常日志
|
|
else
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "入库条码申请异常:", devidx.ToString(), " **站台:" + dcode + "**条码:" + barcode.ToString().ToUpper() + "** Mamage_Task 有任务");//20140218
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "入库条码申请异常:", devidx.ToString(), " **站台:" + dcode + "**条码:" + barcode.ToString().ToUpper() + "** IO_Control 有任务 CONTROL_ID " + dvbc[0]["CONTROL_ID"]);//20140218
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "入库条码申请异常:", devidx.ToString(), " **站台:" + dcode + "**条码:" + barcode.ToString().ToUpper() + "** IO_Control_Apply 有未处理");//20140218
|
|
|
|
}
|
|
#endregion
|
|
#endregion
|
|
|
|
#endregion
|
|
break;
|
|
case "7":
|
|
//叠盘机前条码扫描器申请入库任务
|
|
|
|
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_TYPE,WAREHOUSE_CODE, DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,BOX_QUANTITY,CONTROL_APPLY_PARAMETER)VALUES ").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[7] { apptype, devbinds.ToString(), parameter.ToString(), 0, dtime, "", warehouse.ToString() };
|
|
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));
|
|
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_TYPE,WAREHOUSE_CODE, DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,BOX_QUANTITY,CONTROL_APPLY_PARAMETER)VALUES ").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 "18":
|
|
|
|
var dvspss = dbo.ExceSQL(string.Format($"select * from t_base_device_st where F_BarCode='{barcode}' ")).Tables[0].DefaultView;
|
|
|
|
string errtexts = string.Empty;
|
|
//WriteDBData(devidx, "DB2", dvspss[0]["F_Content"].ToString(), out errtexts);
|
|
|
|
if (WriteDBData(devidx, "DB2", dvspss[0]["F_Content"].ToString(), out errtexts))
|
|
{
|
|
//普通条码申请任务
|
|
#region 普通条码申请任务
|
|
|
|
#region 扫到残码
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "读PLC条码比较残码之前!", devidx.ToString(), "读标志1**条码:" + barcode.ToString().ToUpper() + ",检尺:" + CheckHigh.ToString() + ",重量:" + Weight.ToString());
|
|
|
|
if (barcode.ToString() == incompleteBarcode.ToString())//LHDF
|
|
{//扫到残码
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务时1:", devidx.ToString(), ",站台:" + dcode + ",扫到残缺条码!" + barcode.ToString().ToUpper() + ",Remark:" + dvsp[0]["F_Remark"].ToString());
|
|
|
|
#region 是否具备申请任务扫码条件
|
|
int[] statess;
|
|
statess = CStaticClass.GetDeviceState(Convert.ToInt32(dvsp[0]["F_BindingDevice"]));
|
|
if (statess != null)
|
|
{
|
|
if (statess[1] != 0)
|
|
{
|
|
// 20201022 双鹿,取消检测条码器对应输送线状态
|
|
//break;
|
|
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
RefreshMonitorEventArgs rmea;
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
#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)
|
|
{
|
|
dvbc = dboMan.ExceSQL(string.Format("select CONTROL_ID from IO_CONTROL where STOCK_BARCODE like '%{0}%' and CONTROL_STATUS = 0", barcode)).Tables[0].DefaultView;
|
|
if (dvbc.Count <= 0)// 20201026 不是入库起点,中间段的申请,前段任务完成,管理可能没有处理中间表
|
|
{
|
|
dvbc = dbo.ExceSQL(string.Format("select fid from T_Manage_Task where FPALLETBARCODE like '%{0}%' and FSTARTDEVICE = {1}", barcode, dcode)).Tables[0].DefaultView;// 20210419 大现场入库口太多,任务判断增加申请点
|
|
if (dvbc.Count <= 0) //20200920 长输送多个申请
|
|
{
|
|
StringBuilder dtime = new StringBuilder(DateTime.Now.ToString("u"));
|
|
dtime.Remove(dtime.Length - 1, 1);
|
|
|
|
bool ifSQLServer = true;
|
|
if (CStaticClass.ManDBFactory == "OracleDBFactory")
|
|
{
|
|
ifSQLServer = false;
|
|
}
|
|
#region 20200810 双鹿电池,字母托盘合盘申请入库,条码包括两条码
|
|
string BarcodeToManage = barcode.ToString().Trim();
|
|
|
|
#endregion
|
|
|
|
// object[] ob = new object[8] { apptype, dcode, barcode, 0, dtime, "", warehouse.ToString(), BoxQuality };
|
|
//apptype = 0;// 20201022 shuanglu 所有类型都是0 CONTROL_APPLY_PARAMETER
|
|
object[] ob = new object[10] { apptype, dcode, BarcodeToManage, 0, dtime, Weight.ToString(), warehouse.ToString(), CheckHigh.ToString(), PalletCount, sbRfid };
|
|
try
|
|
{
|
|
dboMan.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY( CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_PARAMETER,WAREHOUSE_CODE,CONTROL_APPLY_PARA01,CONTROL_APPLY_PARA02,CONTROL_APPLY_PARAMETER)VALUES ({0},'{1}','{2}',{3},'{4}','{5}','{6}','{7}','{8}','{9}')", ob));
|
|
|
|
//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,CONTROL_APPLY_ID,CONTROL_APPLY_PARA01,CONTROL_APPLY_PARA02)VALUES ({0},'{1}','{2}',{3},'{4}','{5}','{6}',{7},'{8}','{9}')", ob));
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务:", devidx.ToString(), " 站台:" + dcode + "**条码:" + BarcodeToManage.ToUpper() + ",高度:" + CheckHigh + ",重量:" + Weight + ",数量" + PalletCount);//20140218
|
|
}
|
|
|
|
catch (Exception ex)
|
|
{
|
|
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务时发生错误:" + ex.StackTrace + ex.Message);
|
|
OnRefreshMonitor(rmea);
|
|
continue;//20140218
|
|
}
|
|
|
|
|
|
}
|
|
#region 20200513 增加入库申请异常日志
|
|
else
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "入库条码申请异常:", devidx.ToString(), " **站台:" + dcode + "**条码:" + barcode.ToString().ToUpper() + "** Mamage_Task 有任务");//20140218
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "入库条码申请异常:", devidx.ToString(), " **站台:" + dcode + "**条码:" + barcode.ToString().ToUpper() + "** IO_Control 有任务");//20140218
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "入库条码申请异常:", devidx.ToString(), " **站台:" + dcode + "**条码:" + barcode.ToString().ToUpper() + "** IO_Control_Apply 有未处理");//20140218
|
|
|
|
}
|
|
#endregion
|
|
#endregion
|
|
|
|
#endregion
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
//无类型,条码比对或者记录条码
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
witemnames[0].Clear();
|
|
if (devidx == 27001)
|
|
{
|
|
witemnames[0].Append(Model.CGeneralFunction.DBSend).Append(".").Append(Convert.ToString(devinfo.Dbw1Address + 0)).Append(",b");//20130510
|
|
}
|
|
else {
|
|
witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 0)).Append(",b");//20130510
|
|
}
|
|
wv[0].Clear();
|
|
wv[0].Append("2");
|
|
sdo = CommModeCreate.CreateSendDeviceOrder(devidx);
|
|
sdo.WriteDBData(witemnames, wv, devinfo.S7Connection);
|
|
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "写条码应答", devidx.ToString(), "写标志2**源条码:" + barcode.ToString().ToUpper());
|
|
// 20200713 更新时间按照统一格式,否则5秒重复条码部分有问题
|
|
dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_Time='{2}', F_BarCode = '{1}' WHERE (F_DeviceIndex = {0}) and F_BarCode<>'{1}'", devidx, barcode.ToString(), DateTime.Now.ToString("u").Substring(0,19)));
|
|
sql.Clear();
|
|
sql.Append(string.Format("select * from T_Base_RGV_Gate where F_RGVGateDeviceIndex={0}", dcode));
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
dbo.ExecuteSql(string.Format("UPDATE T_Base_RGV_Gate SET F_RGVGateBarcode = '{0}' WHERE (F_RGVGateDeviceIndex = {1})", barcode, dcode));//20220525在T_Base_RGV_Gate中保留条码
|
|
}
|
|
|
|
sql.Clear();
|
|
sql.Append(string.Format("select * from T_Base_Lane_Gate where F_LaneGateDeviceIndex={0}", dcode));
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
dbo.ExecuteSql(string.Format("UPDATE T_Base_Lane_Gate SET F_LaneGateBarcode = '{0}' WHERE (F_LaneGateDeviceIndex = {1})", barcode, dcode));//20220525在T_Base_Lane_Gate中保留条码 堆垛机在此站台取货时校验条码
|
|
}
|
|
|
|
|
|
}
|
|
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[10];
|
|
//Array.Copy(devicestates, tempdb2addr, states, 0, 10);
|
|
//if (IsEquals(devinfo.ReturnMessage, states, 10) == false)
|
|
//{
|
|
// devinfo.ReturnMessage = states;
|
|
// Model.CGetInfo.SetDeviceMessage(devinfo);
|
|
// sss.Remove(0, sss.Length);
|
|
// sss.Append("**站台:").Append(devidx.ToString()).Append("**读标志" + devicestates[tempdb2addr + 0]).Append("**状态" + state).Append("**任务号0");
|
|
// 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 21到抓取位的两组一号工程码信息
|
|
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 24 烟厂成品机器人码垛信息(抓取完成、放完成、码垛完成)
|
|
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 34 双鹿电池,自动申请母托盘出库 20200825
|
|
case 34:
|
|
if (states[0] == 1)// 26508、36508 db2 对应叠盘机最后一个byte
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT F_WareHouse,F_ManageAskkind,F_DeviceIndex, F_Askkind, F_HaveFirstProject,F_BindingDevice,F_FirstProject,F_Remark,F_TempFirstProject FROM T_Base_PLC_Ask WHERE (F_DeviceIndex = ").Append(devidx).Append(")");
|
|
dvsp = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dvsp.Count > 0)
|
|
{
|
|
//1.得到需要判断的条件--检查输送机索引,总任务数量
|
|
bool bok = false;
|
|
int iMaxCount = Convert.ToInt32(dvsp[0]["F_Remark"]); // 可以缓存最大托盘数量: 有物开关 + 出库任务数量
|
|
int istation = Convert.ToInt32(dvsp[0]["F_BindingDevice"]); // 申请站台
|
|
string ConevyorToCheck = dvsp[0]["F_FirstProject"].ToString();// 需要检查有货的输送线组
|
|
int iMaxTask = Convert.ToInt32(dvsp[0]["F_TempFirstProject"]); // 最大出库任务数量
|
|
|
|
string ifask = dvsp[0]["F_HaveFirstProject"].ToString();//是否申请开关
|
|
if (ifask == "0" )
|
|
{
|
|
continue;
|
|
}
|
|
|
|
// 条件判断
|
|
bok = CheckEmptyOutOK(iMaxCount, istation, ConevyorToCheck, iMaxTask);
|
|
|
|
//2.向管理申请
|
|
if (bok == true)
|
|
{
|
|
bool ifSQLServer = true;
|
|
if (CStaticClass.ManDBFactory == "OracleDBFactory")
|
|
{
|
|
ifSQLServer = false;
|
|
}
|
|
|
|
//int appid = dboMan.GetManageTableIndex("IO_CONTROL_APPLY", ifSQLServer);//CONTROL_APPLY_ID
|
|
int apptype = 0;// 双鹿要求申请类型0
|
|
string warehouse = dvsp[0]["F_WareHouse"].ToString();
|
|
int dcode = Convert.ToInt32(dvsp[0]["F_BindingDevice"]);
|
|
int BoxQuality = 1;// 0标记,1类型,2数量
|
|
string dtime = DateTime.Now.ToString("u");
|
|
dtime.Remove(dtime.Length - 1, 1);
|
|
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_TYPE, WAREHOUSE_CODE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,CONTROL_APPLY_PARLAPTOP-G9N81K1O)VALUES ").Append(
|
|
"(").Append(apptype).Append(",'").Append(warehouse).Append("','").Append(dcode).Append("','',0,'").Append(dtime).Append("','',").Append(BoxQuality).Append(")");
|
|
// 插入记录
|
|
dboMan.ExceSQL(sql.ToString());
|
|
|
|
|
|
#region 旧代码注释
|
|
// int appid = dboMan.GetManageTableIndex("IO_CONTROL_APPLY", true);//CONTROL_APPLY_ID
|
|
//object[] ob = new object[8] { 2, istation, "-", 0, dtime, "", "1", 1 };
|
|
|
|
//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,BOX_QUANTITY)VALUES ({0},'{1}','{2}',{3},'{4}','{5}','{6}',{7})", ob));
|
|
#endregion
|
|
//记录黑匣子
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理系统申请空母托盘出库任务:", devidx.ToString(), ",站台:" + istation.ToString());
|
|
|
|
// 20210607 记录申请时间,加间隔校验,管理申请不能太快!
|
|
dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_Time='{1}' WHERE (F_DeviceIndex = {0}) ", devidx, dtime));
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
#endregion
|
|
|
|
#region 35申请叠盘完成(电气申请)//
|
|
case 35:
|
|
//
|
|
if (states[0] == 1)
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT F_WareHouse,F_ManageAskkind,F_DeviceIndex, F_Askkind, F_BindingDevice FROM T_Base_PLC_Ask WHERE (F_DeviceIndex = ").Append(devidx).Append(")");
|
|
dvsp = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dvsp.Count > 0)
|
|
{
|
|
StringBuilder warehouse = new StringBuilder(dvsp[0]["F_WareHouse"].ToString());
|
|
int apptype = Convert.ToInt32(dvsp[0]["F_ManageAskkind"]);//20130510
|
|
int dcode = Convert.ToInt32(dvsp[0]["F_BindingDevice"]);
|
|
//int BoxQuality = states[2];// 0标记,1类型,2数量
|
|
//int type = states[1];
|
|
//int iAskkind = Convert.ToInt32(dvsp[0]["F_Askkind"]);
|
|
bool IfExit = false;
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到叠盘完成", devidx.ToString(), "站台:" + dcode);
|
|
dvbc = dboMan.ExceSQL(string.Format("SELECT DEVICE_CODE FROM IO_CONTROL_APPLY WHERE APPLY_TASK_STATUS<2 and DEVICE_CODE='{0}' ", dcode.ToString())).Tables[0].DefaultView;
|
|
if (dvbc.Count > 0 )
|
|
{
|
|
IfExit = true;
|
|
}
|
|
dvbc = dboMan.ExceSQL(string.Format("select CONTROL_ID from IO_CONTROL where START_DEVICE_CODE = '{0}' AND CONTROL_STATUS =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}' AND FSTATUS=0 ", dcode)).Tables[0].DefaultView;
|
|
if (dvbc.Count > 0 )
|
|
{
|
|
IfExit = true;
|
|
}
|
|
if (IfExit == false)
|
|
{
|
|
try
|
|
{
|
|
|
|
string dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
#region --如果31060缓存位空,没有到31060的任务,则分到31060,如果31065缓存位空,没有到31065的任务,则分到31065,否则申请入库
|
|
int iDevice = 31060;
|
|
Model.MDevice mDevice = Model.CGetInfo.GetDeviceInfo(iDevice);
|
|
dvbc = dbo.ExceSQL(string.Format("select fid from T_Manage_Task where FENDDEVICE = '{0}' AND FCONTROLTASKTYPE = 2 ", iDevice)).Tables[0].DefaultView;
|
|
if (mDevice.SplitByte_0 == 0 && dvbc.Count <= 0)
|
|
{
|
|
int AutoManageIdx = ccf.GetTempManageIdx();
|
|
//插入临时调度任务T_Manage_Task(监控下的调度任务):
|
|
string Sql = "insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL," +
|
|
"FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME) " +
|
|
"values(" + AutoManageIdx + ",'" + "PP" + dcode.ToString() + "','4',2,'1','" + dcode + "','-','1','"
|
|
+ iDevice + "','-', '-' ,'','-','" + dtime + "')";//20101028
|
|
if (dbo.ExecuteSql(Sql) > 0)
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "叠盘完成申请", devidx.ToString(), "生成到31060 任务成功!");
|
|
|
|
}
|
|
else
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "叠盘完成申请", devidx.ToString(), "生成到31060 任务操作数据库失败!");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
iDevice = 31065;
|
|
mDevice = Model.CGetInfo.GetDeviceInfo(iDevice);
|
|
dvbc = dbo.ExceSQL(string.Format("select fid from T_Manage_Task where FENDDEVICE = '{0}' AND FCONTROLTASKTYPE = 2 ", iDevice)).Tables[0].DefaultView;
|
|
if (mDevice.SplitByte_0 == 0 && dvbc.Count <= 0)
|
|
{
|
|
int AutoManageIdx = ccf.GetTempManageIdx();
|
|
//插入临时调度任务T_Manage_Task(监控下的调度任务):
|
|
string Sql = "insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL," +
|
|
"FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME) " +
|
|
"values(" + AutoManageIdx + ",'" + "PP" + dcode.ToString() + "','4',2,'1','" + dcode + "','-','1','"
|
|
+ iDevice + "','-', '-' ,'','-','" + dtime + "')";//20101028
|
|
if (dbo.ExecuteSql(Sql) > 0)
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "叠盘完成申请", devidx.ToString(), "生成到31065 任务成功!");
|
|
|
|
}
|
|
else
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "叠盘完成申请", devidx.ToString(), "生成到31065 任务操作数据库失败!");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_TYPE, WAREHOUSE_CODE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,CONTROL_APPLY_PARAMETER)VALUES ").Append(
|
|
"(").Append(apptype).Append(",'").Append(warehouse.ToString()).Append("','").Append(dcode).Append("','',0,'").Append(dtime).Append("','',").Append(string.Empty).Append(")");
|
|
|
|
dboMan.ExceSQL(sql.ToString());
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "申请入库/叠盘完成", devidx.ToString(), "站台:" + dcode);
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.叠盘完成时" + ex.StackTrace + ex.Message);
|
|
OnRefreshMonitor(rmea);
|
|
errtext = "SControlMonitor.叠盘完成时" + ex.StackTrace;
|
|
witemnames[0].Clear();
|
|
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("2");
|
|
sdo.WriteDBData(witemnames, wv, devinfo.S7Connection);
|
|
continue;
|
|
}
|
|
}
|
|
witemnames[0].Clear();
|
|
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("2");
|
|
//sdo.WriteDBData(witemnames, wv);
|
|
sdo.WriteDBData(witemnames, wv, devinfo.S7Connection);
|
|
}
|
|
}
|
|
break;
|
|
#endregion
|
|
|
|
#region 41按钮申请//LHDF
|
|
case 41:
|
|
//
|
|
if (states[0] == 1)
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT F_Remark,F_WareHouse,F_ManageAskkind,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)
|
|
{
|
|
StringBuilder warehouse = new StringBuilder(dvsp[0]["F_WareHouse"].ToString());
|
|
int apptype = Convert.ToInt32(dvsp[0]["F_ManageAskkind"]);//20130510
|
|
int dcode = Convert.ToInt32(dvsp[0]["F_BindingDevice"]);
|
|
//int BoxQuality = states[2];// 0标记,1类型,2数量
|
|
// int type = states[1];
|
|
int iAskkind = Convert.ToInt32(dvsp[0]["F_Askkind"]);
|
|
int iEndStation = Convert.ToInt32(dvsp[0]["F_Remark"]);
|
|
bool IfExit = false;
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到按钮申请", devidx.ToString(), "站台:" + dcode);
|
|
|
|
dvbc = dboMan.ExceSQL(string.Format("select CONTROL_ID from IO_CONTROL where (START_DEVICE_CODE = '{0}' ) AND CONTROL_STATUS =0", dcode)).Tables[0].DefaultView;
|
|
if (dvbc.Count > 0 )
|
|
{
|
|
IfExit = true;
|
|
}
|
|
dvbc = dbo.ExceSQL(string.Format("select fid from T_Manage_Task where FSTARTDEVICE = '{0}' AND FSTATUS = 0", dcode)).Tables[0].DefaultView;
|
|
if (dvbc.Count > 0)
|
|
{
|
|
IfExit = true;
|
|
}
|
|
if (IfExit == false)
|
|
{
|
|
try
|
|
{
|
|
bool ifSQLServer = true;
|
|
if (CStaticClass.ManDBFactory == "OracleDBFactory")
|
|
{
|
|
ifSQLServer = false;
|
|
}
|
|
string dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
//dtime = dtime.Substring(0, dtime.Length - 1);
|
|
|
|
|
|
// 入库申请,直接插入任务
|
|
|
|
|
|
int AutoManageIdx = ccf.GetTempManageIdx();
|
|
//插入临时调度任务T_Manage_Task(监控下的调度任务):
|
|
string Sql = "insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL," +
|
|
"FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME) " +
|
|
"values(" + AutoManageIdx + ",'" + "PP" + dcode.ToString() + "','4',2,'1','" + dcode + "','-','1','"
|
|
+ iEndStation + "','-', '-' ,'','-','" + dtime + "')";//20101028
|
|
if (dbo.ExecuteSql(Sql) > 0)
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "按钮申请", devidx.ToString(), "生成到"+iEndStation +" 任务成功!");
|
|
|
|
}
|
|
else
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "按钮申请", devidx.ToString(), "生成到" + iEndStation + "任务操作数据库失败!");
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.按钮申请时" + ex.StackTrace + ex.Message);
|
|
OnRefreshMonitor(rmea);
|
|
errtext = "SControlMonitor.按钮申请时" + ex.StackTrace;
|
|
witemnames[0].Clear();
|
|
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("2");
|
|
sdo.WriteDBData(witemnames, wv, devinfo.S7Connection);
|
|
continue;
|
|
}
|
|
}
|
|
witemnames[0].Clear();
|
|
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("2");
|
|
//sdo.WriteDBData(witemnames, wv);
|
|
sdo.WriteDBData(witemnames, wv, devinfo.S7Connection);
|
|
}
|
|
}
|
|
break;
|
|
#endregion
|
|
|
|
#region 42按钮申请空盘//YXCP
|
|
case 42:
|
|
//
|
|
if (states[0] == 1)
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT F_Remark,F_WareHouse,F_ManageAskkind,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)
|
|
{
|
|
StringBuilder warehouse = new StringBuilder(dvsp[0]["F_WareHouse"].ToString());
|
|
int apptype = Convert.ToInt32(dvsp[0]["F_ManageAskkind"]);//20130510
|
|
int dcode = Convert.ToInt32(dvsp[0]["F_BindingDevice"]);
|
|
//int BoxQuality = states[2];// 0标记,1类型,2数量
|
|
// int type = states[1];
|
|
int iAskkind = Convert.ToInt32(dvsp[0]["F_Askkind"]);
|
|
int iEndStation = Convert.ToInt32(dvsp[0]["F_Remark"]);
|
|
bool IfExit = false;
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到按钮申请", devidx.ToString(), "站台:" + dcode);
|
|
|
|
dvbc = dboMan.ExceSQL(string.Format("select CONTROL_ID from IO_CONTROL where (START_DEVICE_CODE = '{0}' ) AND CONTROL_STATUS =0", dcode)).Tables[0].DefaultView;
|
|
if (dvbc.Count > 0)
|
|
{
|
|
IfExit = true;
|
|
}
|
|
dvbc = dbo.ExceSQL(string.Format("select fid from T_Manage_Task where FSTARTDEVICE = '{0}' AND FSTATUS = 0", dcode)).Tables[0].DefaultView;
|
|
if (dvbc.Count > 0)
|
|
{
|
|
IfExit = true;
|
|
}
|
|
if (IfExit == false)
|
|
{
|
|
try
|
|
{
|
|
#region --
|
|
|
|
int iDevice = 31063;
|
|
int iEndDevice = 31064;
|
|
switch (dcode)
|
|
{
|
|
|
|
case 31001: //dcode = 31001 存在31063-31064的设备指令,改道到31001,否则生成31065送出到31001任务
|
|
|
|
dvbc = dbo.ExceSQL(string.Format("select F_ManageTaskIndex from T_Monitor_Task where F_DeviceIndex = '{0}' and F_NumParam4 = '{1}' and F_DeviceCommandIndex = 6", iDevice, iEndDevice)).Tables[0].DefaultView;
|
|
if (dvbc.Count > 0)
|
|
{
|
|
int iFid = Convert.ToInt16(dvbc[0][0]);
|
|
dbo.ExecuteSql(string.Format("update T_Monitor_Task set F_NumParam4 = {0} where F_ManageTaskIndex = {1} and F_DeviceIndex = '{2}' and F_DeviceCommandIndex = 6 ", dcode, iFid, iEndDevice));
|
|
dbo.ExecuteSql(string.Format("delete t_monitor_task where F_ManageTaskIndex = {0} and (F_DeviceIndex <> '{1}' and F_DeviceIndex <> '{2}'", iFid, iDevice, iEndDevice));
|
|
}
|
|
else
|
|
{
|
|
string dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
//dtime = dtime.Substring(0, dtime.Length - 1);
|
|
|
|
|
|
int AutoManageIdx = ccf.GetTempManageIdx();
|
|
//插入临时调度任务T_Manage_Task(监控下的调度任务):
|
|
string Sql = "insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL," +
|
|
"FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME) " +
|
|
"values(" + AutoManageIdx + ",'" + "PP" + dcode.ToString() + "','4',2,'1','" + iEndStation + "','-','1','"
|
|
+ dcode + "','-', '-' ,'','-','" + dtime + "')";//20101028
|
|
if (dbo.ExecuteSql(Sql) > 0)
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "按钮申请空盘", devidx.ToString(), "生成到" + dcode.ToString () + " 任务成功!");
|
|
|
|
}
|
|
else
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "按钮申请空盘", devidx.ToString(), "生成到" + dcode .ToString () + "任务操作数据库失败!");
|
|
}
|
|
}
|
|
|
|
break;
|
|
case 31043://存在31041-31038的设备指令,改道到31043,存在31064-31037的设备指令,改道到31043,否则生成31065送出到31043任务
|
|
iDevice = 31041;
|
|
iEndDevice = 31038;
|
|
dvbc = dbo.ExceSQL(string.Format("select F_ManageTaskIndex from T_Monitor_Task where F_DeviceIndex = '{0}' and F_NumParam4 = '{1}' and F_DeviceCommandIndex = 6", iDevice, iEndDevice)).Tables[0].DefaultView;
|
|
if (dvbc.Count > 0)
|
|
{
|
|
int iFid = Convert.ToInt16(dvbc[0][0]);
|
|
dbo.ExecuteSql(string.Format("update T_Monitor_Task set F_NumParam4 = {0} where F_ManageTaskIndex = {1} and F_DeviceIndex = '{2}' and F_DeviceCommandIndex = 6 ", dcode, iFid, iEndDevice));
|
|
dbo.ExecuteSql(string.Format("delete t_monitor_task where F_ManageTaskIndex = {0} and (F_DeviceIndex <> '{1}' and F_DeviceIndex <> '{2}'", iFid, iDevice, iEndDevice));
|
|
}
|
|
else
|
|
{
|
|
iDevice = 31064;
|
|
iEndDevice = 31037;
|
|
dvbc = dbo.ExceSQL(string.Format("select F_ManageTaskIndex from T_Monitor_Task where F_DeviceIndex = '{0}' and F_NumParam4 = '{1}' and F_DeviceCommandIndex = 6", iDevice, iEndDevice)).Tables[0].DefaultView;
|
|
if (dvbc.Count > 0)
|
|
{
|
|
int iFid = Convert.ToInt16(dvbc[0][0]);
|
|
dbo.ExecuteSql(string.Format("update T_Monitor_Task set F_NumParam4 = {0} where F_ManageTaskIndex = {1} and F_DeviceIndex = '{2}' and F_DeviceCommandIndex = 6 ", dcode, iFid, iEndDevice));
|
|
dbo.ExecuteSql(string.Format("delete t_monitor_task where F_ManageTaskIndex = {0} and (F_DeviceIndex <> '{1}' and F_DeviceIndex <> '{2}' and F_DeviceIndex <> '{3}'", iFid, iDevice, iEndDevice,31063));
|
|
}
|
|
else
|
|
{
|
|
string dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
//dtime = dtime.Substring(0, dtime.Length - 1);
|
|
|
|
|
|
int AutoManageIdx = ccf.GetTempManageIdx();
|
|
//插入临时调度任务T_Manage_Task(监控下的调度任务):
|
|
string Sql = "insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL," +
|
|
"FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME) " +
|
|
"values(" + AutoManageIdx + ",'" + "PP" + dcode.ToString() + "','4',2,'1','" + iEndStation + "','-','1','"
|
|
+ dcode + "','-', '-' ,'','-','" + dtime + "')";//20101028
|
|
if (dbo.ExecuteSql(Sql) > 0)
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "按钮申请空盘", devidx.ToString(), "生成到" + dcode.ToString() + " 任务成功!");
|
|
|
|
}
|
|
else
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "按钮申请空盘", devidx.ToString(), "生成到" + dcode.ToString() + "任务操作数据库失败!");
|
|
}
|
|
}
|
|
|
|
}
|
|
break;
|
|
case 31052://存在31048-31050的设备指令,改道到31052,存在31038-31050的设备指令,改道到31052,存在31037-31050的设备指令,改道到31052,否则生成31065送出到31052任务
|
|
iDevice = 31048;
|
|
iEndDevice = 31050;
|
|
dvbc = dbo.ExceSQL(string.Format("select F_ManageTaskIndex from T_Monitor_Task where F_DeviceIndex = '{0}' and F_NumParam4 = '{1}' and F_DeviceCommandIndex = 6", iDevice, iEndDevice)).Tables[0].DefaultView;
|
|
if (dvbc.Count > 0)
|
|
{
|
|
int iFid = Convert.ToInt16(dvbc[0][0]);
|
|
dbo.ExecuteSql(string.Format("update T_Monitor_Task set F_NumParam4 = {0} where F_ManageTaskIndex = {1} and F_DeviceIndex = '{2}' and F_DeviceCommandIndex = 6 ", dcode, iFid, iEndDevice));
|
|
//dbo.ExecuteSql(string.Format("delete t_monitor_task where F_ManageTaskIndex = {0} and (F_DeviceIndex <> '{1}' and F_DeviceIndex <> '{2}'", iFid, iDevice, iEndDevice));
|
|
}
|
|
else
|
|
{
|
|
iDevice = 31038;
|
|
iEndDevice = 31050;
|
|
dvbc = dbo.ExceSQL(string.Format("select F_ManageTaskIndex from T_Monitor_Task where F_DeviceIndex = '{0}' and F_NumParam4 = '{1}' and F_DeviceCommandIndex = 6", iDevice, iEndDevice)).Tables[0].DefaultView;
|
|
if (dvbc.Count > 0)
|
|
{
|
|
int iFid = Convert.ToInt16(dvbc[0][0]);
|
|
dbo.ExecuteSql(string.Format("update T_Monitor_Task set F_NumParam4 = {0} where F_ManageTaskIndex = {1} and F_DeviceIndex = '{2}' and F_DeviceCommandIndex = 6 ", dcode, iFid, iEndDevice));
|
|
//dbo.ExecuteSql(string.Format("delete t_monitor_task where F_ManageTaskIndex = {0} and (F_DeviceIndex <> '{1}' and F_DeviceIndex <> '{2}' and F_DeviceIndex <> '{3}'", iFid, iDevice, iEndDevice, 31041));
|
|
}
|
|
else
|
|
{
|
|
|
|
iDevice = 31037;
|
|
iEndDevice = 31050;
|
|
dvbc = dbo.ExceSQL(string.Format("select F_ManageTaskIndex from T_Monitor_Task where F_DeviceIndex = '{0}' and F_NumParam4 = '{1}' and F_DeviceCommandIndex = 6", iDevice, iEndDevice)).Tables[0].DefaultView;
|
|
if (dvbc.Count > 0)
|
|
{
|
|
int iFid = Convert.ToInt16(dvbc[0][0]);
|
|
dbo.ExecuteSql(string.Format("update T_Monitor_Task set F_NumParam4 = {0} where F_ManageTaskIndex = {1} and F_DeviceIndex = '{2}' and F_DeviceCommandIndex = 6 ", dcode, iFid, iEndDevice));
|
|
//dbo.ExecuteSql(string.Format("delete t_monitor_task where F_ManageTaskIndex = {0} and (F_DeviceIndex <> '{1}' and F_DeviceIndex <> '{2}' and F_DeviceIndex <> '{3}'", iFid, iDevice, iEndDevice, 31063));
|
|
}
|
|
else
|
|
{
|
|
string dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
int AutoManageIdx = ccf.GetTempManageIdx();
|
|
//插入临时调度任务T_Manage_Task(监控下的调度任务):
|
|
string Sql = "insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL," +
|
|
"FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME) " +
|
|
"values(" + AutoManageIdx + ",'" + "PP" + dcode.ToString() + "','4',2,'1','" + iEndStation + "','-','1','"
|
|
+ dcode + "','-', '-' ,'','-','" + dtime + "')";//20101028
|
|
if (dbo.ExecuteSql(Sql) > 0)
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "按钮申请空盘", devidx.ToString(), "生成到" + dcode.ToString() + " 任务成功!");
|
|
|
|
}
|
|
else
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "按钮申请空盘", devidx.ToString(), "生成到" + dcode.ToString() + "任务操作数据库失败!");
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
break;
|
|
}
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.按钮申请时" + ex.StackTrace + ex.Message);
|
|
OnRefreshMonitor(rmea);
|
|
errtext = "SControlMonitor.按钮申请时" + ex.StackTrace;
|
|
witemnames[0].Clear();
|
|
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("2");
|
|
sdo.WriteDBData(witemnames, wv, devinfo.S7Connection);
|
|
continue;
|
|
}
|
|
}
|
|
witemnames[0].Clear();
|
|
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("2");
|
|
//sdo.WriteDBData(witemnames, wv);
|
|
sdo.WriteDBData(witemnames, wv, devinfo.S7Connection);
|
|
}
|
|
}
|
|
break;
|
|
#endregion
|
|
|
|
#region 43按钮申请叠盘//YXCP
|
|
case 43:
|
|
//
|
|
if (states[0] == 1)
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT F_Remark,F_WareHouse,F_ManageAskkind,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)
|
|
{
|
|
StringBuilder warehouse = new StringBuilder(dvsp[0]["F_WareHouse"].ToString());
|
|
int apptype = Convert.ToInt32(dvsp[0]["F_ManageAskkind"]);//20130510
|
|
int dcode = Convert.ToInt32(dvsp[0]["F_BindingDevice"]);
|
|
//int BoxQuality = states[2];// 0标记,1类型,2数量
|
|
// int type = states[1];
|
|
int iAskkind = Convert.ToInt32(dvsp[0]["F_Askkind"]);
|
|
int iEndStation = Convert.ToInt32(dvsp[0]["F_Remark"]);
|
|
bool IfExit = false;
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到按钮申请", devidx.ToString(), "站台:" + dcode);
|
|
|
|
dvbc = dboMan.ExceSQL(string.Format("select CONTROL_ID from IO_CONTROL where (START_DEVICE_CODE = '{0}' ) AND CONTROL_STATUS =0", dcode)).Tables[0].DefaultView;
|
|
if (dvbc.Count > 0)
|
|
{
|
|
IfExit = true;
|
|
}
|
|
dvbc = dbo.ExceSQL(string.Format("select fid from T_Manage_Task where FSTARTDEVICE = '{0}' AND FSTATUS = 0", dcode)).Tables[0].DefaultView;
|
|
if (dvbc.Count > 0)
|
|
{
|
|
IfExit = true;
|
|
}
|
|
if (IfExit == false)
|
|
{
|
|
try
|
|
{
|
|
|
|
string dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
int AutoManageIdx = ccf.GetTempManageIdx();
|
|
//插入临时调度任务T_Manage_Task(监控下的调度任务):
|
|
string Sql = "insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL," +
|
|
"FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME) " +
|
|
"values(" + AutoManageIdx + ",'" + "PP" + dcode.ToString() + "','4',2,'1','" + dcode + "','-','1','"
|
|
+ iEndStation + "','-', '-' ,'','-','" + dtime + "')";//20101028
|
|
if (dbo.ExecuteSql(Sql) > 0)
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "按钮申请叠盘", devidx.ToString(), "生成到" + iEndStation + " 任务成功!");
|
|
|
|
}
|
|
else
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "按钮申请叠盘", devidx.ToString(), "生成到" + iEndStation + "任务操作数据库失败!");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.按钮申请叠盘时" + ex.StackTrace + ex.Message);
|
|
OnRefreshMonitor(rmea);
|
|
errtext = "SControlMonitor.按钮申请叠盘时" + ex.StackTrace;
|
|
witemnames[0].Clear();
|
|
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("2");
|
|
sdo.WriteDBData(witemnames, wv, devinfo.S7Connection);
|
|
continue;
|
|
}
|
|
}
|
|
witemnames[0].Clear();
|
|
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("2");
|
|
//sdo.WriteDBData(witemnames, wv);
|
|
sdo.WriteDBData(witemnames, wv, devinfo.S7Connection);
|
|
}
|
|
}
|
|
break;
|
|
#endregion
|
|
|
|
#region 51 码垛区空托盘垛申请//YXCP
|
|
case 51:
|
|
//
|
|
if (states[0] == 1)
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT F_WareHouse,F_ManageAskkind,F_DeviceIndex, F_Askkind, F_BindingDevice FROM T_Base_PLC_Ask WHERE (F_DeviceIndex = ").Append(devidx).Append(")");
|
|
dvsp = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dvsp.Count > 0)
|
|
{
|
|
StringBuilder warehouse = new StringBuilder(dvsp[0]["F_WareHouse"].ToString());
|
|
int apptype = Convert.ToInt32(dvsp[0]["F_ManageAskkind"]);//20130510
|
|
int dcode = Convert.ToInt32(dvsp[0]["F_BindingDevice"]);
|
|
bool IfExit = false;
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到空垛申请", devidx.ToString(), "站台:" + dcode.ToString ());
|
|
dvbc = dboMan.ExceSQL(string.Format("SELECT DEVICE_CODE FROM IO_CONTROL_APPLY WHERE APPLY_TASK_STATUS<2 and DEVICE_CODE='{0}' ", dcode.ToString())).Tables[0].DefaultView;
|
|
if (dvbc.Count > 0)
|
|
{
|
|
IfExit = true;
|
|
}
|
|
dvbc = dboMan.ExceSQL(string.Format("select CONTROL_ID from IO_CONTROL where START_DEVICE_CODE = '{0}' AND CONTROL_STATUS =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}' AND FSTATUS=0 ", dcode)).Tables[0].DefaultView;
|
|
if (dvbc.Count > 0)
|
|
{
|
|
IfExit = true;
|
|
}
|
|
|
|
|
|
|
|
if (IfExit == false)
|
|
{
|
|
try
|
|
{
|
|
|
|
string dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
#region --如果31060缓存位不空,或者有到31060的执行中任务,则从31060,如果31065缓存位空,没有到31065的任务,则分到31065,否则申请入库
|
|
switch (dcode)
|
|
{
|
|
case 31065:
|
|
int iDevice = 31060;
|
|
Model.MDevice mDevice = Model.CGetInfo.GetDeviceInfo(iDevice);
|
|
dvbc = dbo.ExceSQL(string.Format("select fid from T_Manage_Task where FENDDEVICE = '{0}' and FSTATUS >0", iDevice)).Tables[0].DefaultView;
|
|
if (mDevice.SplitByte_0 == 1 || dvbc.Count > 0)
|
|
{
|
|
int AutoManageIdx = ccf.GetTempManageIdx();
|
|
//插入临时调度任务T_Manage_Task(监控下的调度任务):
|
|
string Sql = "insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL," +
|
|
"FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME) " +
|
|
"values(" + AutoManageIdx + ",'" + "PP" + dcode.ToString() + "','4',2,'1','" + iDevice + "','-','1','"
|
|
+ dcode + "','-', '-' ,'','-','" + dtime + "')";
|
|
if (dbo.ExecuteSql(Sql) > 0)
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "空垛申请", devidx.ToString(), "生成到"+dcode +" 任务成功!");
|
|
|
|
}
|
|
else
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "空垛申请", devidx.ToString(), "生成到" + dcode + " 任务操作数据库失败!");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_TYPE, WAREHOUSE_CODE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,CONTROL_APPLY_PARAMETER)VALUES ").Append(
|
|
"(").Append(apptype).Append(",'").Append(warehouse.ToString()).Append("','").Append(dcode).Append("','',0,'").Append(dtime).Append("','',").Append("0").Append(")");
|
|
|
|
dboMan.ExceSQL(sql.ToString());
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "申请空垛出库完成", devidx.ToString(), "站台:" + dcode);
|
|
}
|
|
|
|
break;
|
|
case 31060: //
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("INSERT INTO IO_CONTROL_APPLY(CONTROL_APPLY_TYPE, WAREHOUSE_CODE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,CONTROL_APPLY_PARAMETER)VALUES ").Append(
|
|
"(").Append(apptype).Append(",'").Append(warehouse.ToString()).Append("','").Append(dcode).Append("','',0,'").Append(dtime).Append("','',").Append("0").Append(")");
|
|
|
|
dboMan.ExceSQL(sql.ToString());
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "申请空垛出库完成", devidx.ToString(), "站台:" + dcode);
|
|
|
|
break;
|
|
}
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.申请空托盘垛出库时" + ex.StackTrace + ex.Message);
|
|
OnRefreshMonitor(rmea);
|
|
errtext = "SControlMonitor.申请空托盘垛出库时" + ex.StackTrace;
|
|
witemnames[0].Clear();
|
|
witemnames[0].Append(Model.CGeneralFunction.DBSend_Stack).Append(".").Append(Convert.ToString(devinfo.Dbw1Address + 0)).Append(",b");//20130510
|
|
wv[0].Remove(0, wv[0].Length);
|
|
wv[0].Append("2");
|
|
sdo.WriteDBData(witemnames, wv, devinfo.S7Connection);
|
|
continue;
|
|
}
|
|
}
|
|
witemnames[0].Clear();
|
|
witemnames[0].Append(Model.CGeneralFunction.DBSend_Stack).Append(".").Append(Convert.ToString(devinfo.Dbw1Address + 0)).Append(",b");//20130510
|
|
|
|
wv[0].Remove(0, wv[0].Length);
|
|
wv[0].Append("2");
|
|
sdo.WriteDBData(witemnames, wv, devinfo.S7Connection);
|
|
}
|
|
}
|
|
break;
|
|
#endregion
|
|
|
|
#region 52码垛区入库申请 //LHDF
|
|
case 52:
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码阅读器:", devidx.ToString(), "分组:" + deviceindex.ToString() + "tempdb2addr:" + tempdb2addr.ToString());
|
|
if (devicestates[tempdb2addr + 0] != 1)
|
|
{
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码阅读器:", devidx.ToString(), "分组:" + deviceindex.ToString() + "tempdb2addr:" + tempdb2addr.ToString() + "标志:" + devicestates[tempdb2addr + 0].ToString());
|
|
continue;
|
|
}
|
|
//20140109申请任务(任务不存在)或者条码比对(任务已经存在)
|
|
dvsp = dbo.ExceSQL(string.Format("select * from T_Base_PLC_Ask WHERE (F_DeviceIndex = {0}) ", devidx)).Tables[0].DefaultView; //20130510F_ManageAskkind
|
|
if (dvsp.Count > 0)
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到码垛区组盘入库申请!", deviceindex.ToString(), states.ToString());
|
|
//witemnames[0].Clear();
|
|
//witemnames[0].Append(Model.CGeneralFunction.DBSend_Stack).Append(".").Append(Convert.ToString(devinfo.Dbw1Address + 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());
|
|
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]; //数量,只要是上报条码必须预留数量字节
|
|
// int BoxQuality = devicestates[tempdb2addr + 6]; //数量,只要是上报条码必须预留数量字节
|
|
//int BoxQuality = 1; // 润弘单条码入库;
|
|
//int CheckHigh = devicestates[tempdb2addr + 1];// 检尺,0正常
|
|
//string PalletCount = "";// 子托盘数量或者子托盘条码,杨文志要求默认值空字符
|
|
////int Weight = devicestates[tempdb2addr + 4] * 256 + devicestates[tempdb2addr + 5];//称重重量2、3、4、---5
|
|
//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 初始化接收条码
|
|
|
|
|
|
barcode.Clear();
|
|
if (PalletBarcodeLength > 0)
|
|
{//普通扫描单箱的条码申请\机器人码垛的托盘条码
|
|
incompleteBarcode.Clear();//20150103
|
|
noneBarcode.Clear();//20150103
|
|
for (int j = 4; j <= PalletBarcodeLength; j++)
|
|
{//20150103
|
|
incompleteBarcode.Append("1");//PLC扫到残码,但是有货物,转换为字符'1'
|
|
noneBarcode.Append("0");//PLC没扫描,没货物,保留的空值0,转换为字符'\0'
|
|
}
|
|
// for (int j = 2; j < PalletBarcodeLength + 2; j++)
|
|
|
|
// 新协议第10位开始条码值20190806
|
|
for (int j = 4; j <= PalletBarcodeLength; j++)
|
|
{
|
|
barcode.Append(Convert.ToChar(devicestates[tempdb2addr + j]).ToString().ToUpper());
|
|
}
|
|
|
|
}
|
|
|
|
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());
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "读PLC条码", devidx.ToString(), "读标志1**条码:" + barcode.ToString().ToUpper());
|
|
|
|
}
|
|
else
|
|
{
|
|
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()) && Convert.ToInt32(dvsp[0]["F_Controltype"]) != 4)
|
|
{
|
|
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.ToString("u").Substring(0, 19)));
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "PLC重复上报条码:", devidx.ToString(), ",站台:" + dcode + ",条码:" + barcode.ToString().ToUpper());
|
|
break;
|
|
}
|
|
|
|
}//20130831richard
|
|
StringBuilder goodsModel = new StringBuilder();
|
|
|
|
for (int j = 18; j <=27; j++) //16-25 字符串
|
|
{
|
|
|
|
goodsModel.Append(Convert.ToChar(devicestates[tempdb2addr + j]).ToString().ToUpper());
|
|
|
|
}
|
|
|
|
//14-15 数字
|
|
int iGoodsName = (devicestates[tempdb2addr + 14] <<8) + devicestates[tempdb2addr + 15];
|
|
StringBuilder goodsDate = new StringBuilder();
|
|
byte[] bytevalue = new byte[8];
|
|
for (int j = 28; j < 36; j++) //16-25 字符串
|
|
{
|
|
bytevalue[j - 28] = devicestates[tempdb2addr + j];//goodsDate.Append(Convert.ToChar(devicestates[tempdb2addr + j]).ToString().ToUpper());
|
|
}
|
|
int ivar = Convert.ToInt32(devicestates[tempdb2addr + 28]);
|
|
int ivar1 = Convert.ToInt32(ivar.ToString("X4"));
|
|
goodsDate.Append("20").Append(ivar1.ToString());
|
|
ivar = Convert.ToInt32(devicestates[tempdb2addr + 29]);
|
|
int ivar2= Convert.ToInt32(ivar.ToString("X4"));
|
|
if (ivar2 < 10)
|
|
{
|
|
goodsDate.Append("-0").Append(ivar2.ToString ());
|
|
}
|
|
else
|
|
{
|
|
goodsDate.Append ("-").Append(ivar2.ToString());
|
|
}
|
|
|
|
ivar = Convert.ToInt32(devicestates[tempdb2addr + 30]);
|
|
int ivar3 = Convert.ToInt32(ivar.ToString("X4"));
|
|
if (ivar3 < 10)
|
|
{
|
|
goodsDate.Append("-0").Append(ivar3.ToString());
|
|
}
|
|
else
|
|
{
|
|
goodsDate.Append("-").Append(ivar3.ToString());
|
|
}
|
|
ivar = Convert.ToInt32(devicestates[tempdb2addr + 31]);
|
|
int ivar4 = Convert.ToInt32(ivar.ToString("X4"));
|
|
if (ivar4 < 10)
|
|
{
|
|
goodsDate.Append(" 0").Append(ivar4.ToString());
|
|
}
|
|
else
|
|
{
|
|
goodsDate.Append(" ").Append(ivar4.ToString());
|
|
}
|
|
ivar = Convert.ToInt32(devicestates[tempdb2addr + 32]);
|
|
int ivar5 = Convert.ToInt32(ivar.ToString("X4"));
|
|
if (ivar5< 10)
|
|
{
|
|
goodsDate.Append(":0").Append(ivar5.ToString());
|
|
}
|
|
else
|
|
{
|
|
goodsDate.Append(":").Append(ivar5.ToString());
|
|
}
|
|
ivar = Convert.ToInt32(devicestates[tempdb2addr + 33]);
|
|
int ivar6= Convert.ToInt32(ivar.ToString("X4"));
|
|
if (ivar6 < 10)
|
|
{
|
|
goodsDate.Append(":0").Append(ivar6.ToString());
|
|
}
|
|
else
|
|
{
|
|
goodsDate.Append(":").Append(ivar6.ToString());
|
|
}
|
|
|
|
// ivar = Convert.ToInt32(devicestates[tempdb2addr + 34]);
|
|
//int ivar7 = Convert.ToInt32(ivar.ToString("X4"));
|
|
// ivar = Convert.ToInt32(devicestates[tempdb2addr + 35]);
|
|
//int ivar8 = Convert.ToInt32(ivar.ToString("X4"));
|
|
//long longvar = BitConverter.ToInt64(bytevalue , 0);
|
|
//long longv = Convert.ToInt64(longvar.ToString("X2"));
|
|
//DateTime dtVar = new DateTime();// DateTime.FromBinary(longvar);
|
|
//goodsDate.Append(dtVar.ToString());
|
|
|
|
|
|
int iGoodsBath= (devicestates[tempdb2addr + 36] << 8) + devicestates[tempdb2addr + 37];
|
|
int iGoodsDE = (devicestates[tempdb2addr + 38] << 8) + devicestates[tempdb2addr + 39];
|
|
int iGoodsMode = (devicestates[tempdb2addr + 40] << 8) + devicestates[tempdb2addr + 41];
|
|
int iGoodsQty = devicestates[tempdb2addr + 45] + (devicestates[tempdb2addr + 44] << 8) + (devicestates[tempdb2addr + 43] << 16) + (devicestates[tempdb2addr + 42] << 32);
|
|
int iGoodsFK = (devicestates[tempdb2addr + 46] << 8) + devicestates[tempdb2addr + 47];
|
|
int iGoodsMes = (devicestates[tempdb2addr + 48] << 8) + devicestates[tempdb2addr + 49];
|
|
int iGoodsStatus = (devicestates[tempdb2addr + 50] << 8) + devicestates[tempdb2addr + 51];
|
|
int iGoodsOK = (devicestates[tempdb2addr + 52] << 8) + devicestates[tempdb2addr + 53];
|
|
int iGoodsBox = (devicestates[tempdb2addr + 54] << 8) + devicestates[tempdb2addr + 55];
|
|
int iGoodsPR = (devicestates[tempdb2addr + 56] << 8) + devicestates[tempdb2addr + 57];
|
|
int iGoodsFH = (devicestates[tempdb2addr + 58] << 8) + devicestates[tempdb2addr + 59];
|
|
int iGoodsSp = (devicestates[tempdb2addr + 60] << 8) + devicestates[tempdb2addr + 61];
|
|
int iGoodsCo = devicestates[tempdb2addr + 65] + (devicestates[tempdb2addr + 64] << 8) + (devicestates[tempdb2addr + 63] << 16) + (devicestates[tempdb2addr + 62] << 32);
|
|
int iGoodsYL1 = (devicestates[tempdb2addr + 66] << 8) + devicestates[tempdb2addr + 67];
|
|
int iGoodsYL2 = (devicestates[tempdb2addr + 68] << 8) + devicestates[tempdb2addr + 69];
|
|
int iGoodsYL3 = (devicestates[tempdb2addr + 70] << 8) + devicestates[tempdb2addr + 71];
|
|
int iGoodsYL4 = (devicestates[tempdb2addr + 72] << 8) + devicestates[tempdb2addr + 73];
|
|
string strGoodsMes = iGoodsName.ToString() + "|" + goodsModel.ToString() + "|" + goodsDate.ToString() + "|" + iGoodsBath.ToString() + "|"
|
|
+ iGoodsDE.ToString() + "|" + iGoodsMode.ToString() + "|" + iGoodsQty.ToString() + "|" + iGoodsFK.ToString() + "|" +
|
|
iGoodsMes.ToString() + "|" + iGoodsStatus.ToString() + "|" + iGoodsOK.ToString() + "|" + iGoodsBox.ToString() + "|" +
|
|
iGoodsPR.ToString() + "|" + iGoodsFH.ToString() + "|" + iGoodsSp.ToString() + "|" + iGoodsCo.ToString() + "|" +
|
|
iGoodsYL1.ToString() + "|" + iGoodsYL2.ToString() + "|" + iGoodsYL3.ToString() + "|" + iGoodsYL4.ToString();
|
|
int iQuantity = (devicestates[tempdb2addr + 74] << 8) + devicestates[tempdb2addr + 75];
|
|
|
|
|
|
|
|
|
|
switch (dvsp[0]["F_Askkind"].ToString())
|
|
{
|
|
case "4":
|
|
//普通条码申请任务
|
|
#region 普通条码申请任务
|
|
|
|
#region 扫到残码
|
|
//CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "读PLC条码比较残码之前!", devidx.ToString(), "读标志1**条码:" + barcode.ToString().ToUpper() );
|
|
|
|
if (barcode.ToString() == incompleteBarcode.ToString())//LHDF
|
|
{//扫到残码
|
|
//CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理条码申请任务时1:", devidx.ToString(), ",站台:" + dcode + ",扫到残缺条码!" + barcode.ToString().ToUpper() + ",Remark:" + dvsp[0]["F_Remark"].ToString());
|
|
|
|
#region 是否具备申请任务扫码条件
|
|
// int[] statess;
|
|
// statess = CStaticClass.GetDeviceState(Convert.ToInt32(dvsp[0]["F_BindingDevice"]));
|
|
// if (statess != null)
|
|
// {
|
|
// if (statess[1] != 0)
|
|
// {
|
|
|
|
|
|
// }
|
|
|
|
// }
|
|
// else
|
|
// {
|
|
// break;
|
|
// }
|
|
// RefreshMonitorEventArgs rmea;
|
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 向管理申请任务
|
|
Model.MDevice mDevice = Model.CGetInfo.GetDeviceInfo(dcode);
|
|
//if (mDevice.RunState != 0 || (mDevice.SplitByte_0 == 0 && mDevice.SplitByte_1 == 0 && mDevice.SplitByte_2 == 0))
|
|
//{
|
|
// 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)
|
|
//{
|
|
//dvbc = dboMan.ExceSQL(string.Format("select CONTROL_ID from IO_CONTROL where STOCK_BARCODE like '%{0}%' and CONTROL_STATUS = 0", barcode)).Tables[0].DefaultView;
|
|
//if (dvbc.Count <= 0)// 20201026 不是入库起点,中间段的申请,前段任务完成,管理可能没有处理中间表
|
|
//{
|
|
// dvbc = dbo.ExceSQL(string.Format("select fid from T_Manage_Task where FPALLETBARCODE like '%{0}%' and FSTARTDEVICE = {1}", barcode, dcode)).Tables[0].DefaultView;// 20210419 大现场入库口太多,任务判断增加申请点
|
|
// if (dvbc.Count <= 0) //20200920 长输送多个申请
|
|
// {
|
|
|
|
|
|
StringBuilder dtime = new StringBuilder(DateTime.Now.ToString("u"));
|
|
dtime.Remove(dtime.Length - 1, 1);
|
|
|
|
bool ifSQLServer = true;
|
|
if (CStaticClass.ManDBFactory == "OracleDBFactory")
|
|
{
|
|
ifSQLServer = false;
|
|
}
|
|
//int appid = dboMan.GetManageTableIndex("IO_CONTROL_APPLY", ifSQLServer);//CONTROL_APPLY_ID,oracle false
|
|
|
|
|
|
#region 20200810 双鹿电池,字母托盘合盘申请入库,条码包括两条码
|
|
string BarcodeToManage = barcode.ToString().Trim();
|
|
|
|
#endregion
|
|
|
|
|
|
object[] ob = new object[9] { apptype, dcode, BarcodeToManage, 0, dtime, "", warehouse.ToString(), strGoodsMes, iQuantity };
|
|
try
|
|
{
|
|
|
|
dboMan.ExecuteSql(string.Format("INSERT INTO IO_CONTROL_APPLY( CONTROL_APPLY_TYPE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_PARAMETER,WAREHOUSE_CODE,CONTROL_APPLY_PARA02,CONTROL_APPLY_QTY)VALUES ({0},'{1}','{2}',{3},'{4}','{5}','{6}','{7}','{8}')", ob));
|
|
|
|
//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,CONTROL_APPLY_ID,CONTROL_APPLY_PARA01,CONTROL_APPLY_PARA02)VALUES ({0},'{1}','{2}',{3},'{4}','{5}','{6}',{7},'{8}','{9}')", ob));
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "向管理申请组盘入库任务:", devidx.ToString(), " 站台:" + dcode + "**条码:" + BarcodeToManage.ToUpper() + ",组盘信息:" +strGoodsMes + ",码垛数量:" +iQuantity .ToString ());//20140218
|
|
}
|
|
|
|
catch (Exception ex)
|
|
{
|
|
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "向管理申请入库任务时发生错误:" + ex.StackTrace + ex.Message);
|
|
OnRefreshMonitor(rmea);
|
|
continue;//20140218
|
|
}
|
|
|
|
|
|
//}
|
|
#region 20200513 增加入库申请异常日志
|
|
// else
|
|
// {
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "码垛区申请组盘入库异常:", devidx.ToString(), " **站台:" + dcode + "**条码:" + barcode.ToString().ToUpper() + "** Mamage_Task 有任务");//20140218
|
|
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "码垛区申请组盘入库异常:", devidx.ToString(), " **站台:" + dcode + "**条码:" + barcode.ToString().ToUpper() + "** IO_Control 有任务");//20140218
|
|
|
|
// }
|
|
//}
|
|
//else
|
|
//{
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "码垛区申请组盘入库异常:", devidx.ToString(), " **站台:" + dcode + "**条码:" + barcode.ToString().ToUpper() + "** IO_Control_Apply 有未处理");//20140218
|
|
|
|
//}
|
|
//}
|
|
//else
|
|
//{
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "码垛区申请组盘入库异常:", devidx.ToString(), " **站台:" + dcode + "**条码:" + barcode.ToString().ToUpper() + "** 输送线不空闲或有物开关未遮挡!");//20140218
|
|
//}
|
|
#endregion
|
|
#endregion
|
|
|
|
#endregion
|
|
break;
|
|
|
|
default:
|
|
//无类型,条码比对或者记录条码
|
|
|
|
break;
|
|
}
|
|
|
|
witemnames[0].Clear();
|
|
witemnames[0].Append(Model.CGeneralFunction.DBSend_Stack ).Append(".").Append(Convert.ToString(devinfo.Dbw1Address + 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());
|
|
// 20200713 更新时间按照统一格式,否则5秒重复条码部分有问题
|
|
dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_Time='{2}', F_BarCode = '{1}' WHERE (F_DeviceIndex = {0}) and F_BarCode<>'{1}'", devidx, barcode.ToString(), DateTime.Now.ToString("u").Substring(0, 19)));
|
|
sql.Clear();
|
|
sql.Append(string.Format("select * from T_Base_RGV_Gate where F_RGVGateDeviceIndex={0}", dcode));
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
dbo.ExecuteSql(string.Format("UPDATE T_Base_RGV_Gate SET F_RGVGateBarcode = '{0}' WHERE (F_RGVGateDeviceIndex = {1})", barcode, dcode));//20220525在T_Base_RGV_Gate中保留条码
|
|
}
|
|
|
|
sql.Clear();
|
|
sql.Append(string.Format("select * from T_Base_Lane_Gate where F_LaneGateDeviceIndex={0}", dcode));
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
dbo.ExecuteSql(string.Format("UPDATE T_Base_Lane_Gate SET F_LaneGateBarcode = '{0}' WHERE (F_LaneGateDeviceIndex = {1})", barcode, dcode));//20220525在T_Base_Lane_Gate中保留条码 堆垛机在此站台取货时校验条码
|
|
}
|
|
|
|
|
|
}
|
|
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_TYPE, WAREHOUSE_CODE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK)VALUES ").Append(
|
|
"(").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 (devicestates[tempdb2addr + 0] != 1) continue;
|
|
//F_BoxBarcode
|
|
StringBuilder weight = new StringBuilder("");
|
|
weight.Append(Convert.ToChar(devicestates[tempdb2addr + 4]));
|
|
weight.Append(Convert.ToChar(devicestates[tempdb2addr + 3]));
|
|
weight.Append(Convert.ToChar(devicestates[tempdb2addr + 2]));
|
|
weight.Append(Convert.ToChar(devicestates[tempdb2addr + 1]));
|
|
weight.Append(".");
|
|
weight.Append(Convert.ToChar(devicestates[tempdb2addr + 5]));//小数部分
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "接收称重信息", devidx.ToString(), "重量:" + weight.ToString());
|
|
//向管理写入重量
|
|
int mpindex = ccf.GetMonitorTaskIndexFromSendedDevice(devidx);
|
|
int manfid = ccf.GetManageTaskIndexfromMonitor(mpindex);
|
|
int manKind = ccf.GetManageTaskKindIndexFromMonitor(mpindex);
|
|
if (manKind == 1)
|
|
{
|
|
dboMan.ExecuteSql(string.Format("UPDATE IO_CONTROL SET CONTROL_REMARK ={0} WHERE CONTROL_ID={1}", weight.ToString(), manfid));
|
|
}
|
|
if (weight.ToString() != "0000.0")
|
|
{
|
|
cgs.ActionComplete(devidx, mpindex, 0);
|
|
//dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_BoxBarcode = '{1}' WHERE (F_DeviceIndex = {0}) and F_BoxBarcode<>'{1}'", devidx, weight.ToString()));
|
|
witemnames[0].Clear();
|
|
witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 0)).Append(",b");//20130510
|
|
wv[0].Clear();
|
|
wv[0].Append("2");
|
|
sdo = CommModeCreate.CreateSendDeviceOrder(devidx);
|
|
sdo.WriteDBData(witemnames, wv, devinfo.S7Connection);
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "写称重应答", devidx.ToString(), "写标志2**称重信息:" + weight.ToString().ToUpper());
|
|
}
|
|
break;
|
|
#endregion
|
|
|
|
#region 37检尺申请入库任务
|
|
|
|
case 37:
|
|
if (devicestates[tempdb2addr + 0] != 1) 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 from T_Base_PLC_Ask WHERE (F_DeviceIndex = {0}) ", devidx)).Tables[0].DefaultView;
|
|
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
|
|
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_TYPE, WAREHOUSE_CODE,DEVICE_CODE, STOCK_BARCODE, APPLY_TASK_STATUS, CREATE_TIME,CONTROL_APPLY_REMARK,CONTROL_APPLY_PARAMETER)VALUES ").Append(
|
|
"(").Append(apptype).Append(",'").Append(warehouse.ToString()).Append("','").Append(dcode).Append("','',0,'").Append(dtime).Append("','',").Append(devicestates[tempdb2addr + 1]).Append(")");
|
|
try
|
|
{
|
|
dboMan.ExceSQL(sql.ToString());
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "检尺申请入库", devidx.ToString(), ";站台:"+dcode.ToString().ToUpper() + "检尺高度:" + devicestates[tempdb2addr + 1].ToString());
|
|
witemnames[0].Clear();
|
|
witemnames[0].Append(Model.CGeneralFunction.DBGet).Append(".").Append(Convert.ToString(devinfo.Dbw2Address + 0)).Append(",b");//20130510
|
|
wv[0].Clear();
|
|
wv[0].Append("2");
|
|
sdo = CommModeCreate.CreateSendDeviceOrder(devidx);
|
|
sdo.WriteDBData(witemnames, wv, devinfo.S7Connection);
|
|
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "写检尺应答", devidx.ToString(), "写标志2**检尺高度:" + devicestates[tempdb2addr + 1].ToString() +";"+ witemnames[0].ToString());
|
|
|
|
dbo.ExecuteSql(string.Format("UPDATE T_Base_PLC_Ask SET F_Time='{2}', F_BarCode = '{1}' WHERE (F_DeviceIndex = {0}) and F_BarCode<>'{1}'", devidx, barcode.ToString(), DateTime.Now));
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.申请托盘出库时" + ex.StackTrace + ex.Message);
|
|
OnRefreshMonitor(rmea);
|
|
errtext = "SControlMonitor.检尺申请入库时" + ex.StackTrace;
|
|
wv[0].Remove(0, wv[0].Length);
|
|
wv[0].Append("2");
|
|
sdo.WriteDBData(witemnames, wv, devinfo.S7Connection);
|
|
continue;
|
|
}
|
|
}
|
|
break;
|
|
|
|
#endregion
|
|
|
|
|
|
#region Rfid与实体标签
|
|
case 45:
|
|
|
|
break;
|
|
case 46:
|
|
if (devicestates[tempdb2addr + 0] != 1)
|
|
{
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码阅读器:", devidx.ToString(), "分组:" + deviceindex.ToString() + "tempdb2addr:" + tempdb2addr.ToString() + "标志:" + devicestates[tempdb2addr + 0].ToString());
|
|
continue;
|
|
}
|
|
var barcodes = devicestates[tempdb2addr + 10];
|
|
|
|
var dvspsd = dbo.ExceSQL(string.Format($"select * from T_Monitor_Task where f_txtparam='{barcodes.ToString()}' ")).Tables[0].DefaultView; //20130510F_ManageAskkind
|
|
|
|
var dvsps = dbo.ExceSQL(string.Format($"select * from t_base_device_st where F_DeviceIndex='{devidx}' ")).Tables[0].DefaultView;
|
|
if (devidx == 46011)
|
|
{
|
|
//string sNr = string.Empty;
|
|
//for (int i = 20; i <= 30; i++)
|
|
//{
|
|
// sNr += devicestates[tempdb2addr + i];
|
|
//}
|
|
string errtexts = string.Empty;
|
|
WriteDBData(46011,"DB2", dvsps[0]["F_Content"].ToString(), out errtexts);
|
|
if (dvspsd[0]["f_txtparam"].ToString() == barcodes.ToString())
|
|
{
|
|
//cgs.ActionComplete(22216, Convert.ToInt32(dvspsd[0]["F_MonitorIndex"]), 1);
|
|
}
|
|
}
|
|
else {
|
|
//20130510F_ManageAskkind
|
|
if (dvsps.Count > 0)
|
|
{
|
|
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "有数据666!", deviceindex.ToString(), "日志记录!");
|
|
if (devidx == 46013 || devidx == 46014)
|
|
{
|
|
//var dvsps = dbo.ExceSQL(string.Format($"select * from t_base_device_st where F_DeviceIndex='{devidx}' ")).Tables[0].DefaultView; //20130510F_ManageAskkind
|
|
if (dvsps.Count > 0)
|
|
{
|
|
string dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
string sNr = string.Empty;
|
|
for (int i = 20; i <= 30; i++)
|
|
{
|
|
sNr += devicestates[tempdb2addr + i];
|
|
}
|
|
if (dbo.ExecuteSql(string.Format($"update t_base_device_st set F_BarCode='{barcodes.ToString().ToUpper()}',D_Up_Time='{dtime}',F_Content='{sNr}' where F_DeviceIndex='{devidx}'"))>0)
|
|
{
|
|
|
|
int AutoManageIdx = ccf.GetTempManageIdx();
|
|
var dcodes = devidx==46014?22203:22202;
|
|
|
|
var iDevice = "22220";
|
|
dvbc = dbo.ExceSQL(string.Format("select fid from T_Manage_Task where FENDDEVICE = '{0}' AND FCONTROLTASKTYPE = 4 and FPALLETBARCODE='{1}' ", iDevice, barcodes)).Tables[0].DefaultView;
|
|
if (dvbc.Count <= 0)
|
|
{
|
|
//插入临时调度任务T_Manage_Task(监控下的调度任务):
|
|
string Sql = "insert into T_Manage_Task(FID,FPALLETBARCODE,FCONTROLTASKTYPE,F_ManageTaskKindIndex,FSTARTWAREHOUSE,FSTARTDEVICE,FSTARTCELL," +
|
|
"FENDWAREHOUSE,FENDDEVICE,FENDCELL,FLANEWAY,FSTACK,FUseAwayFork,FBEGTIME) " +
|
|
"values(" + AutoManageIdx + ",'" + barcodes.ToString() + "','4',2,'1','" + dcodes + "','-','1','"
|
|
+ iDevice + "','-', '-' ,'','-','" + dtime + "')";//20101028
|
|
if (dbo.ExecuteSql(Sql) > 0)
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "生成自动任务成功", devidx.ToString(), $"生成{dcodes}到{iDevice} 任务成功!");
|
|
|
|
string errtexts = string.Empty;
|
|
WriteDBData(devidx, "DB2", "", out errtexts);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (devidx == 46012)
|
|
{
|
|
|
|
if (dbo.ExecuteSql(string.Format($"update t_base_device_st set F_BarCode='{barcodes.ToString().ToUpper()}' where F_DeviceIndex='{devidx}'")) > 0)
|
|
{
|
|
var Qualified = devicestates[tempdb2addr + 1];
|
|
string dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
if (dbo.ExecuteSql(string.Format($"update t_base_device_st set Qualified='{Qualified.ToString().ToUpper()}',D_Up_Time='{dtime}' where F_DeviceIndex='{devidx}'"))>0)
|
|
{
|
|
string errtexts = string.Empty;
|
|
WriteDBData(devidx, "DB2", dvsps[0]["F_Content"].ToString(), out errtexts);
|
|
}
|
|
|
|
if (dvspsd[0]["f_txtparam"].ToString() == barcodes.ToString())
|
|
{
|
|
cgs.ActionComplete(22217, Convert.ToInt32(dvspsd[0]["F_MonitorIndex"]), 1);
|
|
}
|
|
|
|
//var dvsps = dbo.ExceSQL(string.Format($"select * from t_base_device_st where F_DeviceIndex='{devidx}' ")).Tables[0].DefaultView; //20130510F_ManageAskkind
|
|
|
|
//var Qualified = devicestates[tempdb2addr + 1];
|
|
//string dtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
//dbo.ExecuteSql(string.Format($"update t_base_device_st set Qualified='{Qualified.ToString().ToUpper()}',D_Up_Time='{dtime}' where F_DeviceIndex='{devidx}'"));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
break;
|
|
#endregion
|
|
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
RefreshMonitorEventArgs rmea = new RefreshMonitorEventArgs("tsStatus", "SControlMonitor.DealWithDeviceState时" + ex.Message + ex.StackTrace+"-"+deviceindex +"-"+devinfo.DeviceIndex);
|
|
OnRefreshMonitor(rmea);
|
|
errtext = ex.Message + ex.StackTrace;
|
|
return false;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
dvbc.Dispose();
|
|
dvsp.Dispose();
|
|
dvmt.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;
|
|
}
|
|
|
|
}
|
|
/// <summary>
|
|
/// 直接向DB区写数据
|
|
/// </summary>
|
|
/// <param name="deviceIndex"></param>
|
|
/// <param name="DBBlock">DB1,DB2</param>
|
|
/// <param name="Wdata">要写入的数据内容</param>
|
|
/// <returns></returns>
|
|
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")
|
|
{
|
|
|
|
if (md.DeviceKind == 46)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(Wdata))
|
|
{
|
|
wn = new StringBuilder[1];//(int)md.Dbw2Getlength
|
|
wv = new StringBuilder[1];//(int)md.Dbw2Getlength
|
|
wn[0] = new StringBuilder(DBBlock + "." + Convert.ToInt32(md.Dbw2Address).ToString()).Append(",b");
|
|
wv[0] = new StringBuilder("2");
|
|
}
|
|
else {
|
|
|
|
wn = new StringBuilder[1];//(int)md.Dbw2Getlength
|
|
wv = new StringBuilder[1];//(int)md.Dbw2Getlength
|
|
wn[0] = new StringBuilder(DBBlock + "." + Convert.ToInt32(md.Dbw2Address).ToString()).Append(",b");
|
|
wv[0] = new StringBuilder("2");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
wn = new StringBuilder[(int)md.Dbw2Getlength];//(int)md.Dbw2Getlength
|
|
wv = new StringBuilder[(int)md.Dbw2Getlength];//(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;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 20120616相应CListenAGV线程的数据库更新事件
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
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);
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 根据条码,报告输送机的送出任务完成
|
|
/// </summary>
|
|
/// <param name="Bardevice">条码设备</param>
|
|
/// <param name="BindDevice">条码设备的绑定输送机</param>
|
|
/// <param name="barcode">条码</param>
|
|
/// <param name="AbendDevice">异常处理口设备</param>
|
|
void BarcodeComplete(int Bardevice, int BindDevice, string barcode, string AbendDevice)
|
|
{
|
|
DataView dv=new DataView();
|
|
try
|
|
{
|
|
if (CStaticClass.DBFactory == "OracleDBFactory")
|
|
{//20151120调度系统oracle的特殊语句
|
|
dv = dbo.ExceSQL(string.Format("SELECT F_MonitorIndex, F_DeviceIndex, F_DeviceCommandIndex,F_ManageTaskIndex, F_ManageTASKKINDINDEX,F_NumParam4 FROM T_Monitor_Task WHERE rownum=1 and (F_TxtParam like '%{0}%')", barcode)).Tables[0].DefaultView;
|
|
|
|
}
|
|
else
|
|
{
|
|
dv = dbo.ExceSQL(string.Format("SELECT TOP 1 F_MonitorIndex, F_DeviceIndex, F_DeviceCommandIndex,F_ManageTaskIndex, F_ManageTASKKINDINDEX,F_NumParam4 FROM T_Monitor_Task WHERE (F_TxtParam like '%{0}%')", barcode)).Tables[0].DefaultView;
|
|
}
|
|
if (dv.Count > 0)
|
|
{
|
|
int mankind = Convert.ToInt32(dv[0]["F_ManageTASKKINDINDEX"]);
|
|
int FID = Convert.ToInt32(dv[0]["F_ManageTaskIndex"]);
|
|
if ((ccf.GetDeviceKindIdx(Convert.ToInt32(dv[0]["F_DeviceIndex"])) == 2) && ((dv[0]["F_DeviceCommandIndex"].ToString() == "6") || (dv[0]["F_DeviceCommandIndex"].ToString() == "11")) || (ccf.GetDeviceKindIdx(Convert.ToInt32(dv[0]["F_DeviceIndex"])) == 7))
|
|
{
|
|
int ctype = ccf.GetFCONTROLTASKTYPEFromManageTask(mankind, FID);
|
|
if ((dv[0]["F_NumParam4"].ToString() == BindDevice.ToString()))
|
|
{//正确
|
|
cgs.ActionComplete(BindDevice, Convert.ToInt32(dv[0]["F_MonitorIndex"]), 0);
|
|
}
|
|
else
|
|
{//可能经过上一个扫描器没扫到,下一条任务是否为此扫描任务,是:两个任务都报完成
|
|
dv = dbo.ExceSQL(string.Format("SELECT F_MonitorIndex FROM T_Monitor_Task WHERE (F_ManageTASKKINDINDEX = {0}) AND (F_ManageTaskIndex = {1}) AND (F_NumParam4 = {2})",mankind,FID,BindDevice)).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "条码报完成", Bardevice.ToString(), "上一个扫描器没扫到码,条码:" + barcode.ToString().ToUpper());
|
|
|
|
dv = dbo.ExceSQL(string.Format("SELECT F_MonitorIndex,F_DeviceIndex,F_NumParam4 FROM T_Monitor_Task WHERE (F_ManageTASKKINDINDEX = {0}) AND (F_ManageTaskIndex = {1}) AND (F_MonitorIndex <= {2})", mankind, FID, Convert.ToInt32(dv[0]["F_MonitorIndex"]))).Tables[0].DefaultView;
|
|
for (int i = 0; i < dv.Count; i++)
|
|
{
|
|
cgs.ActionComplete(Convert.ToInt32(dv[0]["F_NumParam4"]), Convert.ToInt32(dv[0]["F_MonitorIndex"]), 1);
|
|
}
|
|
}
|
|
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
|
|
{
|
|
|
|
}
|
|
}
|
|
public bool ReConnectAGVPC(out string errtext)//20161107
|
|
{
|
|
errtext = string.Empty;
|
|
try
|
|
{
|
|
if (CStaticClass.Order == true)
|
|
{
|
|
SocketsTCPIP.CClientTCPIP.InitAllClientTCPIP();//20161107
|
|
|
|
}
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
errtext = ex.Message + ex.StackTrace;
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
/// <summary>
|
|
/// 20200620_NBSL,获取环形穿梭车任务状态
|
|
/// </summary>
|
|
/// <param name="errtext"></param>
|
|
/// <returns></returns>
|
|
public bool GetARGVState(out string errtext)
|
|
{
|
|
try
|
|
{
|
|
errtext = string.Empty;
|
|
if (CStaticClass.Order == true)
|
|
{
|
|
if (!GetARGVDeviceState(out errtext))
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
errtext = ex.StackTrace + ex.Message;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 20200927_NBSL,处理点灯函数
|
|
/// </summary>
|
|
/// <param name="errtext"></param>
|
|
/// <returns></returns>
|
|
public bool DealwithLight(out string errtext)
|
|
{
|
|
try
|
|
{
|
|
errtext = string.Empty;
|
|
if (CStaticClass.Order == true)
|
|
{
|
|
if (!DealwithLightOK(out errtext))
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
errtext = ex.StackTrace + ex.Message;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 点亮手动拣选库位指示灯,根据管理视图写DB区
|
|
/// </summary>
|
|
/// <param name="errText"></param>
|
|
/// <returns></returns>
|
|
private bool DealwithLightOK(out string errText)
|
|
{
|
|
errText = string.Empty;
|
|
bool bReturnState = true;
|
|
|
|
StringBuilder[] wvLight = { new StringBuilder("2") };
|
|
StringBuilder[] witemnamesLight = { new StringBuilder("") };
|
|
|
|
DataView dvm = new DataView();
|
|
try
|
|
{
|
|
//15001-15300 DB2.600-DB2.899 300 个指示灯
|
|
|
|
// 从管理视图V_Light_status得到对应CELL_CODE 的状态
|
|
dvm = dboMan.ExceSQL("select CELL_CODE,LIGHT_STATUS from V_Light_status ").Tables[0].DefaultView;
|
|
if (dvm.Count > 0)
|
|
{
|
|
char[] cc = new char[1];
|
|
cc[0] = '-';
|
|
Model.MDevice md = Model.CGetInfo.GetDeviceInfo(21001);
|
|
//witemnames = new StringBuilder[dvm.Count];
|
|
//wv = new StringBuilder[dvm.Count];
|
|
|
|
// 20210224 此处应该新建变量,使用witemnames、wv 全局调用变量,会造成其他条码应答时候,系统负担
|
|
witemnamesLight = new StringBuilder[dvm.Count];
|
|
wvLight = new StringBuilder[dvm.Count];
|
|
|
|
|
|
for (int i = 0; i < dvm.Count; i++)
|
|
{
|
|
witemnamesLight[i] = new StringBuilder("");
|
|
wvLight[i] = new StringBuilder("");
|
|
}
|
|
|
|
for (int i = 0; i < dvm.Count; i++)
|
|
{
|
|
// 货架1排 1-50列db600~649, 2排 3-50列db650~699, 3~6 排 2-51 列700~749,750~799,
|
|
string[] Cordinate = dvm[i]["CELL_CODE"].ToString().Split(cc);
|
|
int Z = Convert.ToInt32(Cordinate[0]);
|
|
int X = Convert.ToInt32(Cordinate[1]);
|
|
|
|
int iDB = Z > 2 ? 599 + (Z - 1) * 50 + X-1 : 599 + (Z - 1) * 50 + X;
|
|
|
|
witemnamesLight[i].Clear();
|
|
witemnamesLight[i].Append(Model.CGeneralFunction.DBGet).Append(".").Append(iDB).Append(",b");
|
|
wvLight[i].Clear();
|
|
wvLight[i].Append(dvm[i]["LIGHT_STATUS"]);
|
|
}
|
|
sdo = CommModeCreate.CreateSendDeviceOrder(21001);
|
|
sdo.WriteDBData(witemnamesLight, wvLight, md.S7Connection);
|
|
|
|
}
|
|
#region 测试代码
|
|
//Model.MDevice md = Model.CGetInfo.GetDeviceInfo(21001);
|
|
//witemnames = new StringBuilder[50];
|
|
//wv = new StringBuilder[50];
|
|
//for (int i = 0; i < 50; i++)
|
|
//{
|
|
// witemnames[i] = new StringBuilder("");
|
|
// wv[i] = new StringBuilder("");
|
|
//}
|
|
|
|
//for (int i = 0; i < 50; i++)
|
|
//{
|
|
// witemnames[i].Clear();
|
|
// witemnames[i].Append(Model.CGeneralFunction.DBGet).Append(".").Append(600 + i).Append(",b");//20130510
|
|
// wv[i].Clear();
|
|
// wv[i].Append("0");
|
|
// sdo = CommModeCreate.CreateSendDeviceOrder(21001);
|
|
// sdo.WriteDBData(witemnames, wv, md.S7Connection);
|
|
|
|
//}
|
|
|
|
//Thread.Sleep(2000);
|
|
|
|
|
|
//for (int i = 0; i < 50; i++)
|
|
//{
|
|
// witemnames[i].Clear();
|
|
// witemnames[i].Append(Model.CGeneralFunction.DBGet).Append(".").Append(650 + i).Append(",b");//20130510
|
|
// wv[i].Clear();
|
|
// wv[i].Append("0");
|
|
// sdo = CommModeCreate.CreateSendDeviceOrder(21001);
|
|
// sdo.WriteDBData(witemnames, wv, md.S7Connection);
|
|
|
|
//}
|
|
//Thread.Sleep(2000);
|
|
|
|
//for (int i = 0; i < 50; i++)
|
|
//{
|
|
// witemnames[i].Clear();
|
|
// witemnames[i].Append(Model.CGeneralFunction.DBGet).Append(".").Append(700 + i).Append(",b");//20130510
|
|
// wv[i].Clear();
|
|
// wv[i].Append("0");
|
|
// sdo = CommModeCreate.CreateSendDeviceOrder(21001);
|
|
// sdo.WriteDBData(witemnames, wv, md.S7Connection);
|
|
|
|
//}
|
|
//Thread.Sleep(2000);
|
|
|
|
//for (int i = 0; i < 50; i++)
|
|
//{
|
|
// witemnames[i].Clear();
|
|
// witemnames[i].Append(Model.CGeneralFunction.DBGet).Append(".").Append(750 + i).Append(",b");//20130510
|
|
// wv[i].Clear();
|
|
// wv[i].Append("0");
|
|
// sdo = CommModeCreate.CreateSendDeviceOrder(21001);
|
|
// sdo.WriteDBData(witemnames, wv, md.S7Connection);
|
|
|
|
//}
|
|
//Thread.Sleep(2000);
|
|
|
|
//for (int i = 0; i < 50; i++)
|
|
//{
|
|
// witemnames[i].Clear();
|
|
// witemnames[i].Append(Model.CGeneralFunction.DBGet).Append(".").Append(800 + i).Append(",b");//20130510
|
|
// wv[i].Clear();
|
|
// wv[i].Append("0");
|
|
// sdo = CommModeCreate.CreateSendDeviceOrder(21001);
|
|
// sdo.WriteDBData(witemnames, wv, md.S7Connection);
|
|
|
|
//}
|
|
// Thread.Sleep(2000);
|
|
|
|
//for (int i = 0; i < 50; i++)
|
|
//{
|
|
// witemnames[i].Clear();
|
|
// witemnames[i].Append(Model.CGeneralFunction.DBGet).Append(".").Append(850 + i).Append(",b");//20130510
|
|
// wv[i].Clear();
|
|
// wv[i].Append("0");
|
|
// sdo = CommModeCreate.CreateSendDeviceOrder(21001);
|
|
// sdo.WriteDBData(witemnames, wv, md.S7Connection);
|
|
|
|
//}
|
|
|
|
//sdo = CommModeCreate.CreateSendDeviceOrder(21001);
|
|
//sdo.WriteDBData(witemnames, wv, md.S7Connection);
|
|
|
|
//CommonClassLib.CCarryConvert.WriteDarkCasket("DealwithLightOK", "发送指令", "21001", "点灯50!");
|
|
#endregion
|
|
|
|
return bReturnState;
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
|
|
bReturnState = false;
|
|
errText = ex.StackTrace + ex.Message;
|
|
return bReturnState;
|
|
// throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dvm.Dispose();
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 得到环穿任务状态
|
|
/// </summary>
|
|
/// <param name="errText"></param>
|
|
/// <returns></returns>
|
|
private bool GetARGVDeviceState(out string errText)
|
|
{
|
|
StringBuilder sql = new StringBuilder();
|
|
DataView dv = new DataView();
|
|
DataView dvM = new DataView();
|
|
// MidDataTable.CGetDeviceState gds = new CGetDeviceState();// 为了自动生成到debug文件夹下
|
|
bool bReturnState = true;
|
|
errText = string.Empty;
|
|
|
|
#region 处理环穿状态
|
|
//sql.Remove(0, sql.Length);
|
|
//sql.Append("SELECT * FROM RGV_TASK");
|
|
//dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
//if (dv.Count > 0)
|
|
//{
|
|
// for (int i = 0; i < dv.Count; i++)
|
|
// {
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("SELECT * FROM T_Monitor_Task WHERE F_ManageTaskIndex = ")
|
|
// .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
// .Append(dv[i]["RGV_TASK_ID"].ToString());
|
|
// dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
// if (dvM.Count > 0)
|
|
// {
|
|
// int iARGVStatus = Convert.ToInt32(dv[i]["RGV_TASK_STATUS"]);
|
|
// switch (iARGVStatus)
|
|
// {
|
|
// case 7: //已接收
|
|
// if (dvM[0]["F_Status"].ToString() != "7")
|
|
// {
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("UPDATE T_Monitor_Task SET F_Status = 7 WHERE F_ManageTaskIndex = ")
|
|
// .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
// .Append(dv[i]["RGV_TASK_ID"].ToString());
|
|
// dbo.ExecuteSql(sql.ToString());
|
|
// }
|
|
// break;
|
|
// case 10: //执行中
|
|
// if (dvM[0]["F_Status"].ToString() != "10")
|
|
// {
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("UPDATE T_Monitor_Task SET F_Status = 10 WHERE F_ManageTaskIndex = ")
|
|
// .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
// .Append(dv[i]["RGV_TASK_ID"].ToString());
|
|
// dbo.ExecuteSql(sql.ToString());
|
|
|
|
// int fid = ccf.GetManageTaskIndexfromMonitor(Convert.ToInt32(dv[i]["RGV_TASK_ID"]));
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("update IO_CONTROL set CONTROL_STATUS=10 where CONTROL_ID=").Append(fid);
|
|
// dboMan.ExecuteSql(sql.ToString());
|
|
// }
|
|
// break;
|
|
// case 999: //已完成
|
|
// #region 20200922 双鹿电池,环穿出库任务完成,更新下一条MonitorTask中任务的设备号,终点设备号,检测条件
|
|
// if (Convert.ToInt32(dv[i]["RGV_TASK_TYPE"]) == 2)
|
|
// {
|
|
// int iFihishDevice = Convert.ToInt32(dv[i]["FINISH_DEVICE_CODE"]);
|
|
// int routeIDsub = GetRouteIDsub(iFihishDevice);
|
|
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("UPDATE T_Monitor_Task SET F_DeviceIndex = ").Append(iFihishDevice)
|
|
// .Append(",F_NumParam1 = ").Append(iFihishDevice)
|
|
// .Append(",F_AheadDetect = 'I").Append(iFihishDevice).Append(";D-").Append(iFihishDevice).Append(".0'")
|
|
// .Append(",F_RouteID = ").Append(routeIDsub)
|
|
// .Append("WHERE F_ManageTaskIndex = ").Append(dv[i]["FID"].ToString()).Append(" AND F_DeviceIndex = 12999");
|
|
// dbo.ExecuteSql(sql.ToString());
|
|
// }
|
|
// #endregion
|
|
// cgs.ActionComplete(Convert.ToInt32(dvM[0]["F_DeviceIndex"]), Convert.ToInt32(dvM[0]["F_MonitorIndex"]), 0);
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("DELETE FROM RGV_TASK WHERE FID = ")
|
|
// .Append(dv[i]["FID"].ToString()).Append(" AND RGV_TASK_ID = ")
|
|
// .Append(dv[i]["RGV_TASK_ID"].ToString());
|
|
// dbo.ExecuteSql(sql.ToString());
|
|
// break;
|
|
// case 900: //申请删除
|
|
// if (dvM[0]["F_Status"].ToString() != "900")
|
|
// {
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("UPDATE T_Monitor_Task SET F_Status = 900 WHERE F_ManageTaskIndex = ")
|
|
// .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
// .Append(dv[i]["RGV_TASK_ID"].ToString());
|
|
// dbo.ExecuteSql(sql.ToString());
|
|
// }
|
|
// break;
|
|
// case 0: //已发送
|
|
// if (dvM[0]["F_Status"].ToString() != "1")
|
|
// {
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("UPDATE T_Monitor_Task SET F_Status = 1 WHERE F_ManageTaskIndex = ")
|
|
// .Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
// .Append(dv[i]["RGV_TASK_ID"].ToString());
|
|
// dbo.ExecuteSql(sql.ToString());
|
|
// }
|
|
// break;
|
|
// default:
|
|
// break;
|
|
// }
|
|
// }
|
|
// else
|
|
// {
|
|
// bReturnState = false;
|
|
// errText += "环形穿梭车系统任务:任务号:" + dv[i]["FID"].ToString() + ",指令号:" +
|
|
// dv[i]["RGV_TASK_ID"].ToString() + "在调度系统中不存在,请通知管理人员处理";
|
|
|
|
// #region 20201222 删除残留任务
|
|
// sql.Remove(0, sql.Length);
|
|
// sql.Append("DELETE FROM RGV_TASK WHERE FID = ")
|
|
// .Append(dv[i]["FID"].ToString()).Append(" AND RGV_TASK_ID = ")
|
|
// .Append(dv[i]["RGV_TASK_ID"].ToString());
|
|
// int j = dbo.ExecuteSql(sql.ToString());
|
|
// if (j > 0)
|
|
// {
|
|
// errText += "环形穿梭车系统任务:任务号:" + dv[i]["FID"].ToString() + ",指令号:" +
|
|
// dv[i]["RGV_TASK_ID"].ToString() + "在调度系统中不存在,被删除!";
|
|
// }
|
|
|
|
// #endregion
|
|
|
|
// continue;
|
|
// }
|
|
|
|
// }
|
|
//}
|
|
#endregion
|
|
|
|
#region 处理AGV任务表
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT * FROM AGV_TASK");
|
|
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
for (int i = 0; i < dv.Count; i++)
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("SELECT * FROM T_Monitor_Task WHERE F_ManageTaskIndex = ")
|
|
.Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
.Append(dv[i]["AGV_TASK_ID"].ToString());
|
|
dvM = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
|
|
if (dvM.Count > 0)
|
|
{
|
|
int iARGVStatus = Convert.ToInt32(dv[i]["AGV_TASK_STATUS"]);
|
|
switch (iARGVStatus)
|
|
{
|
|
case 7: //状态为已接收
|
|
if (dvM[0]["F_Status"].ToString() != "2")
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE T_Monitor_Task SET F_Status = 2 WHERE F_ManageTaskIndex = ")
|
|
.Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
.Append(dv[i]["AGV_TASK_ID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
}
|
|
break;
|
|
case 10: //状态为执行中
|
|
if (dvM[0]["F_Status"].ToString() != "3")
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE T_Monitor_Task SET F_Status = 3 WHERE F_ManageTaskIndex = ")
|
|
.Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
.Append(dv[i]["AGV_TASK_ID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
|
|
int fid = ccf.GetManageTaskIndexfromMonitor(Convert.ToInt32(dv[i]["AGV_TASK_ID"]));
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("update IO_CONTROL set CONTROL_STATUS=10 where CONTROL_ID=").Append(fid);
|
|
dboMan.ExecuteSql(sql.ToString());
|
|
}
|
|
break;
|
|
case 999: //状态为已完成
|
|
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("DELETE FROM AGV_TASK WHERE FID = ")
|
|
.Append(dv[i]["FID"].ToString()).Append(" AND AGV_TASK_ID = ")
|
|
.Append(dv[i]["AGV_TASK_ID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
|
|
cgs.ActionComplete(Convert.ToInt32(dvM[0]["F_DeviceIndex"]), Convert.ToInt32(dvM[0]["F_MonitorIndex"]), 0);
|
|
|
|
break;
|
|
case 900: //状态为申请删除
|
|
if (dvM[0]["F_Status"].ToString() != "-1")
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE T_Monitor_Task SET F_Status = -1 WHERE F_ManageTaskIndex = ")
|
|
.Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
.Append(dv[i]["AGV_TASK_ID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
}
|
|
break;
|
|
case 0: //状态为已发送
|
|
if (dvM[0]["F_Status"].ToString() != "1")
|
|
{
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("UPDATE T_Monitor_Task SET F_Status = 1 WHERE F_ManageTaskIndex = ")
|
|
.Append(dv[i]["FID"].ToString()).Append(" AND F_MonitorIndex = ")
|
|
.Append(dv[i]["AGV_TASK_ID"].ToString());
|
|
dbo.ExecuteSql(sql.ToString());
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
bReturnState = false;
|
|
errText += "AGV系统任务:任务号:" + dv[i]["FID"].ToString() + ",指令号:" +
|
|
dv[i]["AGV_TASK_ID"].ToString() + "在调度系统中不存在,请通知管理人员处理";
|
|
|
|
#region 20201222 删除残留任务
|
|
sql.Remove(0, sql.Length);
|
|
sql.Append("DELETE FROM AGV_TASK WHERE FID = ")
|
|
.Append(dv[i]["FID"].ToString()).Append(" AND AGV_TASK_ID = ")
|
|
.Append(dv[i]["AGV_TASK_ID"].ToString());
|
|
int j = dbo.ExecuteSql(sql.ToString());
|
|
if (j > 0)
|
|
{
|
|
errText += "AGV系统任务:任务号:" + dv[i]["FID"].ToString() + ",指令号:" +
|
|
dv[i]["AGV_TASK_ID"].ToString() + "在调度系统中不存在,被删除!";
|
|
}
|
|
|
|
#endregion
|
|
|
|
continue;
|
|
}
|
|
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
return bReturnState;
|
|
|
|
}
|
|
|
|
|
|
|
|
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();
|
|
}
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 计算输送线是否可以申请空托盘出库
|
|
/// </summary>
|
|
/// <param name="iMaxCount">输送线最大可以缓存空托盘数量</param>
|
|
/// <param name="istation">输送线申请位置</param>
|
|
/// <param name="ConveyorToCheck">需要检查载物的输送线组</param>
|
|
/// <param name="iMaxTask">可以同时存在的空托盘最大任务数量</param>
|
|
/// <returns></returns>
|
|
|
|
public bool CheckEmptyOutOK(int iMaxCount, int station, string ConveyorToCheck, int iMaxTask)
|
|
{
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
//dv = dbo.ExceSQL(string.Format(" select * from T_Monitor_Task where F_DeviceCommandIndex = 6 and f_NumParam4 = {0}", station)).Tables[0].DefaultView;
|
|
//if (dv.Count > iMaxTask)
|
|
//{
|
|
// return false;// 现有出库任务大于设定值,可能有人工的任务
|
|
//}
|
|
//else
|
|
//{
|
|
// iMaxCount = iMaxCount - dv.Count;
|
|
//}
|
|
dv = dbo.ExceSQL(string.Format(" select * from T_Manage_Task where FENDDEVICE = {0}", station)).Tables[0].DefaultView;
|
|
if (dv.Count > iMaxTask)
|
|
{
|
|
return false;// 现有出库任务大于设定值,可能有人工出库的任务
|
|
}
|
|
else
|
|
{
|
|
iMaxCount = iMaxCount - dv.Count;
|
|
}
|
|
#region 检查输送线有货状态
|
|
char[] cc = new char[1];
|
|
cc[0] = ';';
|
|
string[] Conveyor = ConveyorToCheck.Split(cc);
|
|
for (int i = Conveyor.GetLowerBound(0); i <= Conveyor.GetUpperBound(0); i++)
|
|
{
|
|
if (Conveyor[i].Trim().Length <= 0) continue;
|
|
Model.MDevice devNext = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(Conveyor[i])); // 检测下一个输送机开关和设备状态
|
|
if (devNext.RunState > 0 || devNext.SplitByte_0 != 0)
|
|
{
|
|
// 运行,故障,离线,报警状态认为有货,防止出库任务多
|
|
iMaxCount--;
|
|
}
|
|
}
|
|
#endregion
|
|
// 检查任务申请表是否有未处理的申请
|
|
dv = dboMan.ExceSQL(string.Format(" select * from io_control_apply where device_code = {0} and apply_task_status = 0", station)).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
iMaxCount -= dv.Count;
|
|
// return false;
|
|
}
|
|
|
|
// 检查io_control 是否有没有获取的任务
|
|
dv = dboMan.ExceSQL(string.Format("select * from io_control where control_status = 0 and end_device_code = '{0}'", station)).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
iMaxCount -= dv.Count;
|
|
// return false;
|
|
}
|
|
// 还可以加入时间间隔校验
|
|
|
|
if (iMaxCount <= 0)
|
|
{
|
|
return false; //20150719 没有缓存位,返回
|
|
}
|
|
return true;
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 计算输送线是否可以申请空托盘出库
|
|
/// </summary>
|
|
/// <param name="iMaxCount">输送线最大可以缓存空托盘数量</param>
|
|
/// <param name="istation">输送线申请位置</param>
|
|
/// <param name="ConveyorToCheck">需要检查载物的输送线组</param>
|
|
/// <param name="iMaxTask">可以同时存在的空托盘最大任务数量</param>
|
|
/// <returns></returns>
|
|
|
|
public bool CheckEmptyOutOKs(int iMaxCount, int station, string ConveyorToCheck, int iMaxTask,string outStation)
|
|
{
|
|
int tmp = iMaxCount;
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
//dv = dbo.ExceSQL(string.Format(" select * from T_Monitor_Task where F_DeviceCommandIndex = 6 and f_NumParam4 = {0}", station)).Tables[0].DefaultView;
|
|
//if (dv.Count > iMaxTask)
|
|
//{
|
|
// return false;// 现有出库任务大于设定值,可能有人工的任务
|
|
//}
|
|
//else
|
|
//{
|
|
// iMaxCount = iMaxCount - dv.Count;
|
|
//}
|
|
|
|
#region 检查输送线有货状态
|
|
int counts = 0;
|
|
char[] cc = new char[1];
|
|
cc[0] = ';';
|
|
string[] Conveyor = ConveyorToCheck.Split(cc);
|
|
for (int i = Conveyor.GetLowerBound(0); i <= Conveyor.GetUpperBound(0); i++)
|
|
{
|
|
if (Conveyor[i].Trim().Length <= 0) continue;
|
|
Model.MDevice devNext = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(Conveyor[i])); // 检测下一个输送机开关和设备状态
|
|
if (devNext.RunState > 0 || devNext.SplitByte_0 != 0)
|
|
{
|
|
// 运行,故障,离线,报警状态认为有货,防止出库任务多
|
|
iMaxCount--;
|
|
counts++;
|
|
}
|
|
}
|
|
tmp = iMaxTask;
|
|
#endregion
|
|
dv = dbo.ExceSQL(string.Format(" select * from T_Manage_Task where FENDDEVICE = '{0}'", station)).Tables[0].DefaultView;
|
|
if (dv.Count > iMaxTask)
|
|
{
|
|
return false;// 现有出库任务大于设定值,可能有人工出库的任务
|
|
}
|
|
else
|
|
{
|
|
iMaxCount = iMaxCount - ((dv.Count - counts) > 0 ? dv.Count - counts : dv.Count);
|
|
//iMaxTask = iMaxTask - dv.Count;
|
|
}
|
|
tmp = iMaxTask;
|
|
dv = dboMan.ExceSQL(string.Format("select * from io_control where control_status != 0 and end_device_code = '{0}' and RFID_INFO ='100000' ", outStation)).Tables[0].DefaultView;
|
|
if (dv.Count > iMaxTask)
|
|
{
|
|
return false;// 现有出库任务大于设定值,可能有人工出库的任务
|
|
}
|
|
else
|
|
{
|
|
iMaxCount = iMaxCount - dv.Count;
|
|
//iMaxTask = iMaxTask - dv.Count;
|
|
}
|
|
tmp = iMaxTask;
|
|
// 检查任务申请表是否有未处理的申请
|
|
dv = dboMan.ExceSQL(string.Format(" select * from io_control_apply where device_code = {0} and apply_task_status = 0", station)).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
iMaxCount -= dv.Count;
|
|
//iMaxTask -= dv.Count;
|
|
// return false;
|
|
}
|
|
tmp = iMaxTask;
|
|
// 检查io_control 是否有没有获取的任务
|
|
dv = dboMan.ExceSQL(string.Format("select * from io_control where control_status = 0 and end_device_code = '{0}' and RFID_INFO ='100000' ", station)).Tables[0].DefaultView;
|
|
if (dv.Count > 0)
|
|
{
|
|
iMaxCount -= dv.Count;
|
|
//iMaxTask -= dv.Count;
|
|
// return false;
|
|
}
|
|
tmp = iMaxTask;
|
|
// 还可以加入时间间隔校验
|
|
|
|
if (iMaxTask <= 0)
|
|
{
|
|
return false; //20150719 没有缓存位,返回
|
|
}
|
|
return true;
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
dv.Dispose();
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 计算输送线是否可以申请空托盘出库
|
|
/// </summary>
|
|
/// <param name="station">12202</param>
|
|
/// <param name="outStation">12232</param>
|
|
/// <returns>返回的集合list[0]是终点是12202的任务数量,list[1]是终点是12202任务数量加上出库是空托盘的任务数量</returns>
|
|
|
|
public List<int> CheckEmptyOutOKs(int station, string outStation)
|
|
{
|
|
List<int> ints = new List<int>(2);
|
|
int tmp = 0;
|
|
DataView dv = new DataView();
|
|
try
|
|
{
|
|
#region 检查输送线有货状态
|
|
#endregion
|
|
//终点是12232已拆分的空托盘任务或者终点是12202任务的数量
|
|
dv = dbo.ExceSQL(string.Format(" select * from T_Manage_Task where (FENDDEVICE = '{0}' and GOODS_BARCODE = '空托盘') or FENDDEVICE = '{1}'", outStation, station)).Tables[0].DefaultView;
|
|
ints.Add(dv.Count);
|
|
//终点是12232已拆分的非空托盘任务或者终点是12202任务的数量
|
|
//dv = dbo.ExceSQL(string.Format(" select * from T_Manage_Task where FENDDEVICE = '{0}' and GOODS_BARCODE != '空托盘' and FIntoStepOK = '1' or FENDDEVICE = '{1}'", outStation, station)).Tables[0].DefaultView;
|
|
//ints.Add(dv.Count);
|
|
tmp += dv.Count;
|
|
dv = dboMan.ExceSQL(string.Format("select * from io_control where control_status != 0 and end_device_code = '{0}' and RFID_INFO ='空托盘' ", outStation)).Tables[0].DefaultView;
|
|
tmp += dv.Count;
|
|
// 检查任务申请表是否有未处理的申请
|
|
dv = dboMan.ExceSQL(string.Format(" select * from io_control_apply where device_code = {0} and apply_task_status = 0", station)).Tables[0].DefaultView;
|
|
tmp += dv.Count;
|
|
// 检查io_control 是否有没有获取的任务
|
|
dv = dboMan.ExceSQL(string.Format("select * from io_control where control_status = 0 and end_device_code = '{0}' ", station)).Tables[0].DefaultView;
|
|
tmp += dv.Count;
|
|
ints.Add(tmp);
|
|
//开发语言c# c/c++ java
|
|
//工具visual studio
|
|
return ints;
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return new List<int>(2);
|
|
}
|
|
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
|
|
|
|
|
|
}
|
|
|
|
}
|