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.

1626 lines
75 KiB

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