using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using DBFactory;
using System.Threading;
namespace ControlSystem
{
///
/// Creator:Richard.liu
/// 解析PLC返回的数据
///
public static class CParseStack
{
static string _CParsePLCError = "";//监控调度类错误说明
static private object LockData = new object();
static private object LockStack = new object();
static StringBuilder sql = new StringBuilder();
public static string CParsePLCError
{
get { return _CParsePLCError; }
set { _CParsePLCError = value; }
}
static DBOperator dbo = new DBOperator();
static DBOperator dboRoute = new DBOperator();
static DBOperator dboMan = new DBOperator("ManConnString", "ManDBFactory");
static Model.MDevice devinfo28 = Model.CGetInfo.GetDeviceInfo(65534);
//static Model.MDevice devinfo;
static Model.MDevice devinfoRoute;
//static Thread mythreadRoute;
static Thread mystackthread;
static bool exitThread = false;//20091107
// static Thread stackthread;
private static void BeginListen()
{//20091107
while (!exitThread)
{
try
{
SetDeviceState();
}
catch (Exception ex)
{
_CParsePLCError = ex.Message;
}
Thread.Sleep(200);//20100710
}
}
//private static void BeginListenStack()
//{
// while (!exitThread)
// {
// try
// {
// SetStackState();
// }
// catch (Exception ex)
// {
// _CParsePLCError = ex.Message;
// }
// Thread.Sleep(500);
// }
//}
private static void BeginListenRoute()
{//20091107
while (!exitThread)
{
try
{
SetRouteStatus();
}
catch (Exception ex)
{
_CParsePLCError = ex.Message;
}
}
}
public static void EndListen()
{//20091107
exitThread = true;
if (mystackthread != null)
{
mystackthread.Abort();
mystackthread = null;
}
//if (mystackthread != null)
//{
// mystackthread.Abort();
// mystackthread = null;
//}
//if (mythreadRoute != null)
//{
// mythreadRoute.Abort();
// mythreadRoute = null;
//}
}
public static void StartListen()
{
//20091107
exitThread = false;
mystackthread = new Thread(new ThreadStart(BeginListen));
mystackthread.IsBackground = true;
mystackthread.Start();
//stackthread = new Thread(new ThreadStart(BeginListenStack));
//stackthread.IsBackground = true;
//stackthread.Start();
//mythreadRoute = new Thread(new ThreadStart(BeginListenRoute));
//mythreadRoute.IsBackground = true;
//mythreadRoute.Start();
}
///
/// 取得指定光电开关(确认按钮)设备索引的信号(0,1)
///
/// 设备索引
/// 0,1
public static int GetDevicePhotoelectric(int deviceIdx)
{
try
{
if (devinfo28.DeviceKind == 28)
{
if (CStaticClass.AllReturns != null)
{
#region 获取开关量的值
DataView dvle = dbo.ExceSQL("SELECT F_DeviceIndex, F_DeviceKindIndex,F_DBWGetLength," +
" F_DBW2Address FROM T_Base_Device WHERE ((F_DeviceKindIndex = 14)" +
" OR (F_DeviceKindIndex = 18)) and (F_DBW2Address is not NULL) and F_DeviceIndex=" + deviceIdx + "").Tables[0].DefaultView;
//devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx);
int glen = 0;
int IfVis = 0;
if (dvle.Count > 0)//(devinfo.DeviceKind == 14) || (devinfo.DeviceKind == 18)
{
int temp = Convert.ToInt32(dvle[0]["F_DBW2Address"]) - devinfo28.Dbw2Address;
if (Convert.ToInt32((Convert.ToDecimal(dvle[0]["F_DBWGetLength"]) * 8 - 1)) > 7)//devinfo.Dbw2Getlength
{
glen = Convert.ToInt32((Convert.ToDecimal(dvle[0]["F_DBWGetLength"]) * 8 - 1)) - 8;
temp = temp + 1;
}
else
{
glen = Convert.ToInt32((Convert.ToDecimal(dvle[0]["F_DBWGetLength"]) * 8 - 1));
}
if (temp >= 0)
{
IfVis = CommonClassLib.CCarryConvert.GetBitFromInteger(CStaticClass.AllReturns[temp], glen);
//if (dvle[0]["F_DeviceKindIndex"].ToString() == "18")
//{//配合孙宇光电开关0有探物,1无探物,在这里取反符合正常逻辑
// if (IfVis == 1)
// {
// IfVis = 0;
// }
// else
// {
// IfVis = 1;
// }
//}
return IfVis;
}
else
{
return -1;
}
}
else
{
return -1;
}
#endregion
}
else
{
return -1;
}
}
else
{
return -1;
}
}
catch //(Exception ex)
{
//if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得指定光电开关的信号时:" + ex.Message) < 0)
//{
// FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得指定光电开关的信号时:" + ex.Message, true);
//}
return -1;
}
}
///
/// 20101118根据设备号和bit位,取得F_SplitByte里的光电bit值:0,1
///
///
///
///
public static int GetDevicePhotoelectric(int deviceIdx, int abit)
{
try
{
if (devinfo28.DeviceKind == 28)
{
if (CStaticClass.AllReturns != null)
{
#region 获取开关量的值
DataView dvle = dbo.ExceSQL("SELECT F_SplitByte FROM T_Base_Device WHERE F_DeviceIndex=" + deviceIdx + " and F_SplitByte>=0").Tables[0].DefaultView;
int glen = 0;
int IfVis = 0;
if (dvle.Count > 0)
{
int temp = Convert.ToInt32(dvle[0]["F_SplitByte"]) - devinfo28.Dbw2Address;
if (abit > 7)
{
glen = abit - 8;
temp = temp + 1;
}
else
{
glen = abit;
}
if (temp >= 0)
{
IfVis = CommonClassLib.CCarryConvert.GetBitFromInteger(CStaticClass.AllReturns[temp], glen);
//if (dvle[0]["F_DeviceKindIndex"].ToString() == "18")
//{//配合孙宇光电开关0有探物,1无探物,在这里取反符合正常逻辑
// if (IfVis == 1)
// {
// IfVis = 0;
// }
// else
// {
// IfVis = 1;
// }
//}
return IfVis;
}
else
{
return -1;
}
}
else
{
return -1;
}
#endregion
}
else
{
return -1;
}
}
else
{
return -1;
}
}
catch (Exception ex)
{
return -1;
}
}
///
/// 取得指定设备索引的设备状态:[0]读写标志;[1]状态;[2]任务号;[3]X坐标;[4]Y坐标;[5]设备索引
///
/// 设备索引
///
public static int[] GetDeviceState(int deviceIdx)
{
try
{
if (devinfo28.DeviceKind == 28)
{
if (CStaticClass.AllReturns != null)
{
#region 获取设备状态
DataView dvle = dbo.ExceSQL("SELECT F_DeviceIndex, F_DeviceKindIndex,F_DBWGetLength," +
" F_DBW2Address FROM T_Base_Device WHERE (F_DBW2Address is not NULL) and F_DeviceIndex=" + deviceIdx + "").Tables[0].DefaultView;
//devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx);
if (dvle.Count > 0)//devinfo.Dbw2Address != -1
{
int temp = Convert.ToInt32(dvle[0]["F_DBW2Address"]) - devinfo28.Dbw2Address;//devinfo.Dbw2Address
decimal glen = Convert.ToDecimal(dvle[0]["F_DBWGetLength"]);//devinfo.Dbw2Getlength
int[] states = new int[6];
switch (dvle[0]["F_DeviceKindIndex"].ToString())//devinfo.DeviceKind.ToString()
{
#region 其他设备
case "1"://堆垛机
states[0] = CStaticClass.AllReturns[temp];//读写标志
states[1] = CStaticClass.AllReturns[temp + 1];//状态
states[2] = (CStaticClass.AllReturns[temp + 2] << 8) + CStaticClass.AllReturns[temp + 3];//任务号
states[3] = CStaticClass.AllReturns[temp + 7] + (CStaticClass.AllReturns[temp + 6] << 8) + (CStaticClass.AllReturns[temp + 5] << 16) + (CStaticClass.AllReturns[temp + 4] << 32);//X坐标
states[4] = CStaticClass.AllReturns[temp + 11] + (CStaticClass.AllReturns[temp + 10] << 8) + (CStaticClass.AllReturns[temp + 9] << 16) + (CStaticClass.AllReturns[temp + 8] << 32);//Y坐标
states[5] = deviceIdx;//设备号索引
break;
case "3":
case "2"://输送机
states[0] = CStaticClass.AllReturns[temp];//读写标志
states[1] = CStaticClass.AllReturns[temp + 1];//状态
states[2] = (CStaticClass.AllReturns[temp + 2] << 8) + CStaticClass.AllReturns[temp + 3];//任务号
states[3] = 0;
states[4] = 0;
states[5] = deviceIdx;//设备号索引
break;
case "4"://RGV
states[0] = CStaticClass.AllReturns[temp];//读写标志
states[1] = CStaticClass.AllReturns[temp + 1];//状态
states[2] = (CStaticClass.AllReturns[temp + 2] << 8) + CStaticClass.AllReturns[temp + 3];//任务号
states[3] = CStaticClass.AllReturns[temp + 7] + (CStaticClass.AllReturns[temp + 6] << 8) + (CStaticClass.AllReturns[temp + 5] << 16) + (CStaticClass.AllReturns[temp + 4] << 32);//X坐标
states[4] = 0;
states[5] = deviceIdx;//设备号索引
break;
case "5"://拆盘机和叠盘机
states[0] = CStaticClass.AllReturns[temp];//读写标志
states[1] = CStaticClass.AllReturns[temp + 1];//状态
states[2] = 0;
states[3] = 0;
states[4] = 0;
states[5] = deviceIdx;//设备号索引
break;
#endregion
}
return states;
}
else
{
return null;
}
#endregion
}
else
{
return null;
}
}
else
{
return null;
}
}
catch //(Exception ex)
{
//if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得指定光电开关的信号时:" + ex.Message) < 0)
//{
// FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得指定光电开关的信号时:" + ex.Message, true);
//}
return null;
}
}
///
/// 取得指定光电开关(确认按钮)设备索引的信号(0,1)
///
/// 设备索引
/// 0,1
public static int GetDevicePhotoelectricRoute(int deviceIdx)
{
try
{
if (devinfo28.DeviceKind == 28)
{
if (CStaticClass.AllReturns != null)
{
#region 获取开关量的值
//DataView dvle = dbo.ExceSQL("SELECT F_DeviceIndex, F_DeviceKindIndex,F_DBWGetLength," +
// " F_DBW2Address FROM T_Base_Device WHERE ((F_DeviceKindIndex = 14)" +
// " OR (F_DeviceKindIndex = 18)) and (F_DBW2Address is not NULL) and F_DeviceIndex=" + deviceIdx + "").Tables[0].DefaultView;
devinfoRoute = Model.CGetInfo.GetDeviceInfo(deviceIdx);
int glen = 0;
int IfVis = 0;
if ((devinfoRoute.DeviceKind == 14) || (devinfoRoute.DeviceKind == 18))
{
int temp = devinfoRoute.Dbw2Address - devinfo28.Dbw2Address;
if (Convert.ToInt32((devinfoRoute.Dbw2Getlength * 8 - 1)) > 7)
{
glen = Convert.ToInt32((devinfoRoute.Dbw2Getlength * 8 - 1)) - 8;
temp = temp + 1;
}
else
{
glen = Convert.ToInt32((devinfoRoute.Dbw2Getlength * 8 - 1));
}
if (temp >= 0)
{
IfVis = CommonClassLib.CCarryConvert.GetBitFromInteger(CStaticClass.AllReturns[temp], glen);
//if (dvle[0]["F_DeviceKindIndex"].ToString() == "18")
//{//配合孙宇光电开关0有探物,1无探物,在这里取反符合正常逻辑
// if (IfVis == 1)
// {
// IfVis = 0;
// }
// else
// {
// IfVis = 1;
// }
//}
return IfVis;
}
else
{
return -1;
}
}
else
{
return -1;
}
#endregion
}
else
{
return -1;
}
}
else
{
return -1;
}
}
catch //(Exception ex)
{
//if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得指定光电开关的信号时:" + ex.Message) < 0)
//{
// FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得指定光电开关的信号时:" + ex.Message, true);
//}
return -1;
}
}
///
/// 取得指定设备索引的设备状态:[0]读写标志;[1]状态;[2]任务号;[3]X坐标;[4]Y坐标;[5]设备索引
///
/// 设备索引
///
public static int[] GetDeviceStateRoute(int deviceIdx)
{
try
{
if (devinfo28.DeviceKind == 28)
{
if (CStaticClass.AllReturns != null)
{
#region 获取设备状态
devinfoRoute = Model.CGetInfo.GetDeviceInfo(deviceIdx);
if (devinfoRoute.Dbw2Address != -1)
{
int temp = devinfoRoute.Dbw2Address - devinfo28.Dbw2Address;
decimal glen = devinfoRoute.Dbw2Getlength;
int[] states = new int[6];
switch (devinfoRoute.DeviceKind.ToString())
{
#region 其他设备
case "1"://堆垛机
states[0] = CStaticClass.AllReturns[temp];//读写标志
states[1] = CStaticClass.AllReturns[temp + 1];//状态
states[2] = (CStaticClass.AllReturns[temp + 2] << 8) + CStaticClass.AllReturns[temp + 3];//任务号
states[3] = CStaticClass.AllReturns[temp + 7] + (CStaticClass.AllReturns[temp + 6] << 8) + (CStaticClass.AllReturns[temp + 5] << 16) + (CStaticClass.AllReturns[temp + 4] << 32);//X坐标
states[4] = CStaticClass.AllReturns[temp + 11] + (CStaticClass.AllReturns[temp + 10] << 8) + (CStaticClass.AllReturns[temp + 9] << 16) + (CStaticClass.AllReturns[temp + 8] << 32);//Y坐标
states[5] = deviceIdx;//设备号索引
break;
case "2"://输送机
states[0] = CStaticClass.AllReturns[temp];//读写标志
states[1] = CStaticClass.AllReturns[temp + 1];//状态
states[2] = (CStaticClass.AllReturns[temp + 2] << 8) + CStaticClass.AllReturns[temp + 3];//任务号
states[3] = 0;
states[4] = 0;
states[5] = deviceIdx;//设备号索引
break;
case "4"://RGV
states[0] = CStaticClass.AllReturns[temp];//读写标志
states[1] = CStaticClass.AllReturns[temp + 1];//状态
states[2] = (CStaticClass.AllReturns[temp + 2] << 8) + CStaticClass.AllReturns[temp + 3];//任务号
states[3] = CStaticClass.AllReturns[temp + 7] + (CStaticClass.AllReturns[temp + 6] << 8) + (CStaticClass.AllReturns[temp + 5] << 16) + (CStaticClass.AllReturns[temp + 4] << 32);//X坐标
states[4] = 0;
states[5] = deviceIdx;//设备号索引
break;
#endregion
}
return states;
}
else
{
return null;
}
#endregion
}
else
{
return null;
}
}
else
{
return null;
}
}
catch //(Exception ex)
{
//if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得指定光电开关的信号时:" + ex.Message) < 0)
//{
// FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得指定光电开关的信号时:" + ex.Message, true);
//}
return null;
}
}
///
///设置所有堆垛机的当前动态属性
///
public static void SetStackState()
{
lock (LockStack)
{
try
{
DateTime dt1 = DateTime.Now;
bool updateroute = false;
bool reportstatus = true;
if (CStaticClass.routetime.AddSeconds(30) <= DateTime.Now)
{
updateroute = false;
CStaticClass.routetime = DateTime.Now;
}
//if (CStaticClass.reporttime.AddSeconds(3) <= DateTime.Now)
//{
// //DateTime dt2 = DateTime.Now;
// //System.Diagnostics.Trace.WriteLine("更新设备状态周期:" + Convert.ToString(dt2));
// reportstatus = true;
// CStaticClass.reporttime = DateTime.Now;
//}
//else
//{
// reportstatus = false;
//}
//string ss3 = "";
//string ss = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
//bool updateroute = false;
//if (CStaticClass.routetime.AddSeconds(10) <= DateTime.Now)
//{
// updateroute = true;
// CStaticClass.routetime = DateTime.Now;
//}
int[] States;
foreach (Model.MDevice devinfo1 in Model.CGetInfo.DeviceInfo.Values)
{
DateTime dt3 = DateTime.Now;
//ss = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
if (devinfo1.DeviceKind != 1)
{
continue;
}
//DataView dvv = dbo.ExceSQL("SELECT F_DeviceIndex FROM T_Base_Device WHERE (F_LockedState = - 1) and F_DeviceIndex=" + devinfo1.DeviceIndex + "").Tables[0].DefaultView;
//if (dvv.Count > 0)
//{
// if (updateroute == true)
// {//20100131
// UpdateErrorCode(devinfo1.DeviceIndex, 98);
// AlterRoute(devinfo1.DeviceIndex, 98);
// }
// //20090926
// if (devinfo1.ErrorCode != 98)
// {
// UpdateErrorCode(devinfo1.DeviceIndex, 98);
// AlterRoute(devinfo1.DeviceIndex, 98);
// devinfo1.RunState = 4;
// }
// devinfo1.ErrorCode = 98;
//}
//else
//{
if (devinfo1.DeviceIndex == 11003)
{
devinfo1.DeviceIndex = 11003;
}
if ((devinfo1.DeviceKind == 14) || (devinfo1.DeviceKind == 18))
{
//devinfo1.DeviceVisual = GetDevicePhotoelectric(devinfo1.DeviceIndex);
//continue;
}
if ((devinfo1.DeviceKind == 2) || (devinfo1.DeviceKind == 3) || (devinfo1.DeviceKind == 5) || (devinfo1.DeviceKind == 17))
{
////有些输送机、提升机在调度路径中存在,但是不需要调度来下指令,电器自己控制,只考察是否运行和故障位就可以了
//if (devinfo1.OnlyDetectIO == "1")
//{
// #region 运行位(设备索引+7)
// devinfo1.RunState = GetDevicePhotoelectric(Convert.ToInt32(devinfo1.DeviceIndex.ToString() + "7"));
// if (updateroute == true)
// {//20100131
// UpdateErrorCode(devinfo1.DeviceIndex, 0);
// AlterRoute(devinfo1.DeviceIndex, 0);
// }
// if (devinfo1.ErrorCode != 0)
// {
// AlterRoute(devinfo1.DeviceIndex, 0);
// }
// //20090926
// int err = 0;
// //devinfo1.ErrorCode = 0;
// #endregion
// #region 故障位(设备索引+6)
// if (GetDevicePhotoelectric(Convert.ToInt32(devinfo1.DeviceIndex.ToString() + "6")) == 1)
// {
// if (updateroute == true)
// {//20100131
// UpdateErrorCode(devinfo1.DeviceIndex, 97);
// AlterRoute(devinfo1.DeviceIndex, 97);
// }
// devinfo1.RunState = 2;
// if (devinfo1.ErrorCode != 97)
// {
// UpdateErrorCode(devinfo1.DeviceIndex, 97);
// AlterRoute(devinfo1.DeviceIndex, 97);
// }
// err = 97;
// //devinfo1.ErrorCode = 97;
// }
// //20100131
// if (updateroute == true)
// {//20100131
// UpdateErrorCode(devinfo1.DeviceIndex, err);
// AlterRoute(devinfo1.DeviceIndex, err);
// }
// if (devinfo1.ErrorCode != err)
// {
// UpdateErrorCode(devinfo1.DeviceIndex, err);
// AlterRoute(devinfo1.DeviceIndex, err);
// }
// //20100131
// devinfo1.ErrorCode = err;
// //20090926
// #endregion
//}
//else
//{
// States = GetDeviceState(devinfo1.DeviceIndex);
// if (States == null) continue;
// if (States[1] >= 30)
// {
// if (updateroute == true)
// {//20100131
// UpdateErrorCode(devinfo1.DeviceIndex, States[1]);
// AlterRoute(devinfo1.DeviceIndex, States[1]);
// }
// //20100131
// //修改路径表
// if (States[1] != devinfo1.ErrorCode)
// {
// UpdateErrorCode(devinfo1.DeviceIndex, States[1]);
// AlterRoute(devinfo1.DeviceIndex, States[1]);
// }
// devinfo1.ErrorCode = States[1];
// devinfo1.RunState = 2;
// }
// else if ((States[1] == 0) || (States[1] == 1) || (States[1] == 2))
// {
// if (updateroute == true)
// {//20100131
// UpdateErrorCode(devinfo1.DeviceIndex, 0);
// AlterRoute(devinfo1.DeviceIndex, States[1]);
// }
// //20100131
// //修改路径表
// if (States[1] != devinfo1.ErrorCode)
// {
// //UpdateErrorCode(devinfo1.DeviceIndex, 0);
// //AlterRoute(devinfo1.DeviceIndex, States[1]);
// }
// //20090926
// if (States[1] == 2)
// {
// //20090920
// devinfo1.RunState = 5;
// }
// else
// {
// devinfo1.RunState = States[1];
// }
// //20100131
// //20091006
// devinfo1.ErrorCode = States[1];
// //20090926
// }
// devinfo1.TaskNo = States[2];
// //20101118
// if (devinfo1.SplitByte != -1)
// {
// devinfo1.SplitByte_0 = GetDevicePhotoelectric(devinfo1.DeviceIndex, 0);
// devinfo1.SplitByte_1 = GetDevicePhotoelectric(devinfo1.DeviceIndex, 1);
// devinfo1.SplitByte_2 = GetDevicePhotoelectric(devinfo1.DeviceIndex, 2);
// devinfo1.SplitByte_3 = GetDevicePhotoelectric(devinfo1.DeviceIndex, 3);
// }
//}
}
if ((devinfo1.DeviceKind == 1) || (devinfo1.DeviceKind == 4))
{
States = GetDeviceState(devinfo1.DeviceIndex);
if (States == null) continue;
if (States[1] >= 30)
{
if (updateroute == true)
{//20100131
UpdateErrorCode(devinfo1.DeviceIndex, States[1]);
AlterRoute(devinfo1.DeviceIndex, States[1]);
}
//修改路径表
if (States[1] != devinfo1.ErrorCode)
{
//20100131
UpdateErrorCode(devinfo1.DeviceIndex, States[1]);
AlterRoute(devinfo1.DeviceIndex, States[1]);
}
devinfo1.ErrorCode = States[1];
devinfo1.RunState = 2;
}
else if ((States[1] == 0) || (States[1] == 1) || (States[1] == 2))
{
if (updateroute == true)
{//20100131
UpdateErrorCode(devinfo1.DeviceIndex, 0);
AlterRoute(devinfo1.DeviceIndex, States[1]);
}
//修改路径表
if (States[1] != devinfo1.ErrorCode)
{
//20100131
UpdateErrorCode(devinfo1.DeviceIndex, 0);
AlterRoute(devinfo1.DeviceIndex, States[1]);
}
//20090926
if (States[1] == 2)
{
//20090920
devinfo1.RunState = 5;
}
else
{
devinfo1.RunState = States[1];
}
//20100131
devinfo1.ErrorCode = States[1];
}
devinfo1.TaskNo = States[2];
devinfo1.XCoor = States[3];
devinfo1.YCoor = States[4];
}
int bdv = 0, bdov = 0;
//20101118
string[] DS; char[] dd = new char[1] { '.' };
int devicebyte = 0; int devbit = 0;
if (devinfo1.BindingDevice != null)
{
DS = devinfo1.BindingDevice.Split(dd);
int.TryParse(DS[0], out devicebyte);
int.TryParse(DS[1], out devbit);
bdv = GetDevicePhotoelectric(devicebyte, devbit);
}
if (devinfo1.BindingDeviceOut != null)
{
DS = devinfo1.BindingDeviceOut.Split(dd);
int.TryParse(DS[0], out devicebyte);
int.TryParse(DS[1], out devbit);
bdov = GetDevicePhotoelectric(devicebyte, devbit);
}
//20101118
if ((bdv + bdov) >= 1)
{
devinfo1.HaveGoods = true;
}
else
{
devinfo1.HaveGoods = false;
}
DataView dvb = dbo.ExceSQL("SELECT F_MonitorIndex,F_NumParam1,F_NumParam2,F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6, F_TxtParam FROM T_Monitor_Task WHERE (F_MonitorIndex = " + devinfo1.TaskNo + ")").Tables[0].DefaultView;
if (dvb.Count > 0)
{
if (devinfo1.DeviceKind == 1)
{
devinfo1.ArrowLocation = dvb[0]["F_NumParam4"].ToString() + "排" + dvb[0]["F_NumParam5"].ToString() + "列" + dvb[0]["F_NumParam6"].ToString() + "层";
}
if (devinfo1.DeviceKind == 4)
{
devinfo1.ArrowLocation = dvb[0]["F_NumParam1"].ToString();
}
if (devinfo1.DeviceKind == 2)
{
devinfo1.ArrowLocation = dvb[0]["F_NumParam4"].ToString();
}
devinfo1.Barcode = dvb[0]["F_TxtParam"].ToString();
}
else
{
devinfo1.Barcode = "";
devinfo1.ArrowLocation = "";
}
//20091107
dvb = null;
//}
//ss3 = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
Model.CGetInfo.SetDeviceInfo(devinfo1);
//20091107
//dvv = null;
//20110427 上报管理系统设备状态
if (reportstatus == true)
{
if (devinfo1.DeviceKind == 1 || devinfo1.DeviceKind == 2 || devinfo1.DeviceKind == 3 || devinfo1.DeviceKind == 5)
{
int CurRunState = 0;
if (devinfo1.RunState == 0 || devinfo1.RunState == 5)
{
CurRunState = 0;
}
else
if (devinfo1.RunState == 4)
{
CurRunState = 3;
}
else
{
CurRunState = devinfo1.RunState;
}
if (devinfo1.LastRunState != CurRunState)
{
try
{
//上报设备状态和当前时间
string dtime = DateTime.Now.ToString("u");
dtime = dtime.Substring(0, dtime.Length - 1);
// int CurRunState= devinfo.RunState==
//string sql = string.Format("Update DEVICE_MONITOR set DEVICE_CUR_STATUS={0}, DEVICE_PRE_STATUS={1},UPDATE_TIME='{2}' where DEVICE_CODE ={3}", CurRunState,devinfo.LastRunState,dtime, devinfo.DeviceIndex);
// string sql = string.Format("Update DEVICE_MONITOR set DEVICE_CUR_STATUS={0},UPDATE_TIME='{1}' where DEVICE_CODE ={2}", CurRunState, dtime, devinfo1.DeviceIndex);
devinfo1.LastRunState = CurRunState;
Model.CGetInfo.SetDeviceLastRunState(devinfo1);
// dboMan.ExceSQL(sql);
//更新LastRunState
}
catch (Exception ex)
{
_CParsePLCError = string.Format("上报设备{0}的设备状态时发生错误:{1}", devinfo1.DeviceIndex, ex.Message);
}
}
}
}
DateTime dt4 = DateTime.Now;
System.Diagnostics.Trace.WriteLine(devinfo1.DeviceName + "*****" + (dt4 - dt3).ToString());
}
//string ss2 = ss;
//string ss1 = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
DateTime dt2 = DateTime.Now;
System.Diagnostics.Trace.WriteLine("SetStackState" + (dt2 - dt1).ToString());
}
catch (Exception exa)
{
_CParsePLCError = "解析PLC反馈数据的记录设备状态时发生错误:" + exa.Message;
}
}
}
///
/// 设置所有设备的当前动态属性
///
public static void SetDeviceState()
{
lock (LockData)
{
try
{
DateTime dt1 = DateTime.Now;
bool updateroute = false;
bool reportstatus = true;
if (CStaticClass.routetime.AddSeconds(30) <= DateTime.Now)
{
updateroute = true;
CStaticClass.routetime = DateTime.Now;
}
//if (CStaticClass.reporttime.AddSeconds(3) <= DateTime.Now)
//{
// //DateTime dt2 = DateTime.Now;
// //System.Diagnostics.Trace.WriteLine("更新设备状态周期:" + Convert.ToString(dt2));
// reportstatus = true;
// CStaticClass.reporttime = DateTime.Now;
//}
//else
//{
// reportstatus = false;
//}
//string ss3 = "";
//string ss = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
//bool updateroute = false;
//if (CStaticClass.routetime.AddSeconds(10) <= DateTime.Now)
//{
// updateroute = true;
// CStaticClass.routetime = DateTime.Now;
//}
int[] States;
foreach (Model.MDevice devinfo1 in Model.CGetInfo.DeviceInfo.Values)
{
DateTime dt3 = DateTime.Now;
//ss = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
if (devinfo1.DeviceKind != 1)
{
continue;
}
DataView dvv = dbo.ExceSQL("SELECT F_DeviceIndex FROM T_Base_Device WHERE (F_LockedState = - 1) and F_DeviceIndex=" + devinfo1.DeviceIndex + "").Tables[0].DefaultView;
if (dvv.Count > 0)
{
if (updateroute == true)
{//20100131
UpdateErrorCode(devinfo1.DeviceIndex, 98);
AlterRoute(devinfo1.DeviceIndex, 98);
}
//20090926
if (devinfo1.ErrorCode != 98)
{
UpdateErrorCode(devinfo1.DeviceIndex, 98);
AlterRoute(devinfo1.DeviceIndex, 98);
devinfo1.RunState = 4;
}
devinfo1.ErrorCode = 98;
}
else
{
if (devinfo1.DeviceIndex == 11003)
{
devinfo1.DeviceIndex = 11003;
}
if ((devinfo1.DeviceKind == 14) || (devinfo1.DeviceKind == 18))
{
//devinfo1.DeviceVisual = GetDevicePhotoelectric(devinfo1.DeviceIndex);
//continue;
}
if ((devinfo1.DeviceKind == 2) || (devinfo1.DeviceKind == 3) || (devinfo1.DeviceKind == 5) || (devinfo1.DeviceKind == 17))
{
//有些输送机、提升机在调度路径中存在,但是不需要调度来下指令,电器自己控制,只考察是否运行和故障位就可以了
if (devinfo1.OnlyDetectIO == "1")
{
#region 运行位(设备索引+7)
devinfo1.RunState = GetDevicePhotoelectric(Convert.ToInt32(devinfo1.DeviceIndex.ToString() + "7"));
if (updateroute == true)
{//20100131
UpdateErrorCode(devinfo1.DeviceIndex, 0);
AlterRoute(devinfo1.DeviceIndex, 0);
}
if (devinfo1.ErrorCode != 0)
{
AlterRoute(devinfo1.DeviceIndex, 0);
}
//20090926
int err = 0;
//devinfo1.ErrorCode = 0;
#endregion
#region 故障位(设备索引+6)
if (GetDevicePhotoelectric(Convert.ToInt32(devinfo1.DeviceIndex.ToString() + "6")) == 1)
{
if (updateroute == true)
{//20100131
UpdateErrorCode(devinfo1.DeviceIndex, 97);
AlterRoute(devinfo1.DeviceIndex, 97);
}
devinfo1.RunState = 2;
if (devinfo1.ErrorCode != 97)
{
UpdateErrorCode(devinfo1.DeviceIndex, 97);
AlterRoute(devinfo1.DeviceIndex, 97);
}
err = 97;
//devinfo1.ErrorCode = 97;
}
//20100131
if (updateroute == true)
{//20100131
UpdateErrorCode(devinfo1.DeviceIndex, err);
AlterRoute(devinfo1.DeviceIndex, err);
}
if (devinfo1.ErrorCode != err)
{
UpdateErrorCode(devinfo1.DeviceIndex, err);
AlterRoute(devinfo1.DeviceIndex, err);
}
//20100131
devinfo1.ErrorCode = err;
//20090926
#endregion
}
else
{
States = GetDeviceState(devinfo1.DeviceIndex);
if (States == null) continue;
if (States[1] >= 30)
{
if (updateroute == true)
{//20100131
UpdateErrorCode(devinfo1.DeviceIndex, States[1]);
AlterRoute(devinfo1.DeviceIndex, States[1]);
}
//20100131
//修改路径表
if (States[1] != devinfo1.ErrorCode)
{
UpdateErrorCode(devinfo1.DeviceIndex, States[1]);
AlterRoute(devinfo1.DeviceIndex, States[1]);
}
devinfo1.ErrorCode = States[1];
devinfo1.RunState = 2;
}
else if ((States[1] == 0) || (States[1] == 1) || (States[1] == 2))
{
if (updateroute == true)
{//20100131
UpdateErrorCode(devinfo1.DeviceIndex, 0);
AlterRoute(devinfo1.DeviceIndex, States[1]);
}
//20100131
//修改路径表
if (States[1] != devinfo1.ErrorCode)
{
//UpdateErrorCode(devinfo1.DeviceIndex, 0);
//AlterRoute(devinfo1.DeviceIndex, States[1]);
}
//20090926
if (States[1] == 2)
{
//20090920
devinfo1.RunState = 5;
}
else
{
devinfo1.RunState = States[1];
}
//20100131
//20091006
devinfo1.ErrorCode = States[1];
//20090926
}
devinfo1.TaskNo = States[2];
//20101118
if (devinfo1.SplitByte != -1)
{
devinfo1.SplitByte_0 = GetDevicePhotoelectric(devinfo1.DeviceIndex, 0);
devinfo1.SplitByte_1 = GetDevicePhotoelectric(devinfo1.DeviceIndex, 1);
devinfo1.SplitByte_2 = GetDevicePhotoelectric(devinfo1.DeviceIndex, 2);
devinfo1.SplitByte_3 = GetDevicePhotoelectric(devinfo1.DeviceIndex, 3);
}
}
}
if ((devinfo1.DeviceKind == 1) || (devinfo1.DeviceKind == 4))
{
States = GetDeviceState(devinfo1.DeviceIndex);
if (States == null) continue;
if (States[1] >= 30)
{
if (updateroute == true)
{//20100131
UpdateErrorCode(devinfo1.DeviceIndex, States[1]);
AlterRoute(devinfo1.DeviceIndex, States[1]);
}
//修改路径表
if (States[1] != devinfo1.ErrorCode)
{
//20100131
UpdateErrorCode(devinfo1.DeviceIndex, States[1]);
AlterRoute(devinfo1.DeviceIndex, States[1]);
}
devinfo1.ErrorCode = States[1];
devinfo1.RunState = 2;
}
else if ((States[1] == 0) || (States[1] == 1) || (States[1] == 2))
{
if (updateroute == true)
{//20100131
UpdateErrorCode(devinfo1.DeviceIndex, 0);
AlterRoute(devinfo1.DeviceIndex, States[1]);
}
//修改路径表
if (States[1] != devinfo1.ErrorCode)
{
//20100131
UpdateErrorCode(devinfo1.DeviceIndex, 0);
AlterRoute(devinfo1.DeviceIndex, States[1]);
}
//20090926
if (States[1] == 2)
{
//20090920
devinfo1.RunState = 5;
}
else
{
devinfo1.RunState = States[1];
}
//20100131
devinfo1.ErrorCode = States[1];
}
devinfo1.TaskNo = States[2];
devinfo1.XCoor = States[3];
devinfo1.YCoor = States[4];
}
int bdv = 0, bdov = 0;
//20101118
string[] DS; char[] dd = new char[1] { '.' };
int devicebyte = 0; int devbit = 0;
if (devinfo1.BindingDevice != null)
{
DS = devinfo1.BindingDevice.Split(dd);
int.TryParse(DS[0], out devicebyte);
int.TryParse(DS[1], out devbit);
bdv = GetDevicePhotoelectric(devicebyte, devbit);
}
if (devinfo1.BindingDeviceOut != null)
{
DS = devinfo1.BindingDeviceOut.Split(dd);
int.TryParse(DS[0], out devicebyte);
int.TryParse(DS[1], out devbit);
bdov = GetDevicePhotoelectric(devicebyte, devbit);
}
//20101118
if ((bdv + bdov) >= 1)
{
devinfo1.HaveGoods = true;
}
else
{
devinfo1.HaveGoods = false;
}
DataView dvb = dbo.ExceSQL("SELECT F_MonitorIndex,F_NumParam1,F_NumParam2,F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6, F_TxtParam FROM T_Monitor_Task WHERE (F_MonitorIndex = " + devinfo1.TaskNo + ")").Tables[0].DefaultView;
if (dvb.Count > 0)
{
if (devinfo1.DeviceKind == 1)
{
devinfo1.ArrowLocation = dvb[0]["F_NumParam4"].ToString() + "排" + dvb[0]["F_NumParam5"].ToString() + "列" + dvb[0]["F_NumParam6"].ToString() + "层";
}
if (devinfo1.DeviceKind == 4)
{
devinfo1.ArrowLocation = dvb[0]["F_NumParam1"].ToString();
}
if (devinfo1.DeviceKind == 2)
{
devinfo1.ArrowLocation = dvb[0]["F_NumParam4"].ToString();
}
devinfo1.Barcode = dvb[0]["F_TxtParam"].ToString();
}
else
{
devinfo1.Barcode = "";
devinfo1.ArrowLocation = "";
}
//20091107
dvb = null;
}
//ss3 = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
Model.CGetInfo.SetDeviceInfo(devinfo1);
//20091107
dvv = null;
//20110427 上报管理系统设备状态
if (reportstatus == true)
{
if (devinfo1.DeviceKind == 1 || devinfo1.DeviceKind == 2 || devinfo1.DeviceKind == 3 || devinfo1.DeviceKind == 5)
{
int CurRunState = 0;
if (devinfo1.RunState == 0 || devinfo1.RunState == 5)
{
CurRunState = 0;
}
else
if (devinfo1.RunState == 4)
{
CurRunState = 3;
}
else
{
CurRunState = devinfo1.RunState;
}
if (devinfo1.LastRunState != CurRunState)
{
try
{
//上报设备状态和当前时间
string dtime = DateTime.Now.ToString("u");
dtime = dtime.Substring(0, dtime.Length - 1);
// int CurRunState= devinfo.RunState==
//string sql = string.Format("Update DEVICE_MONITOR set DEVICE_CUR_STATUS={0}, DEVICE_PRE_STATUS={1},UPDATE_TIME='{2}' where DEVICE_CODE ={3}", CurRunState,devinfo.LastRunState,dtime, devinfo.DeviceIndex);
// string sql = string.Format("Update DEVICE_MONITOR set DEVICE_CUR_STATUS={0},UPDATE_TIME='{1}' where DEVICE_CODE ={2}", CurRunState, dtime, devinfo1.DeviceIndex);
devinfo1.LastRunState = CurRunState;
Model.CGetInfo.SetDeviceLastRunState(devinfo1);
// dboMan.ExceSQL(sql);
//更新LastRunState
}
catch (Exception ex)
{
_CParsePLCError = string.Format("上报设备{0}的设备状态时发生错误:{1}", devinfo1.DeviceIndex, ex.Message);
}
}
}
}
DateTime dt4 = DateTime.Now;
// System.Diagnostics.Trace.WriteLine(devinfo1.DeviceName + "*****" + (dt4 - dt3).ToString());
}
//string ss2 = ss;
//string ss1 = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
DateTime dt2 = DateTime.Now;
System.Diagnostics.Trace.WriteLine("CPARSEStack" + (dt2 - dt1).ToString());
}
catch (Exception exa)
{
_CParsePLCError = "解析PLC反馈数据的记录设备状态时发生错误:" + exa.Message;
}
}
}
///
/// 设置所有路径状态
///
public static void SetRouteStatus()
{
try
{
bool updateroute = false;
if (CStaticClass.routetime.AddSeconds(60) <= DateTime.Now)
{
updateroute = true;
CStaticClass.routetime = DateTime.Now;
}
int[] States;
foreach (Model.MDevice devinfo1 in Model.CGetInfo.DeviceInfo.Values)
{
DataView dvv = dboRoute.ExceSQL("SELECT F_DeviceIndex FROM T_Base_Device WHERE (F_LockedState = - 1) and F_DeviceIndex=" + devinfo1.DeviceIndex + "").Tables[0].DefaultView;
if (dvv.Count > 0)
{
if (updateroute == true) AlterRoute(devinfo1.DeviceIndex, 98);
devinfo1.RunState = 4;
if (devinfo1.ErrorCode != 98)
{
AlterRoute(devinfo1.DeviceIndex, 98);
}
//UpdateErrorCode(devinfo1.DeviceIndex, 98);
}
else
{
if ((devinfo1.DeviceKind == 14) || (devinfo1.DeviceKind == 18))
{
devinfo1.DeviceVisual = GetDevicePhotoelectricRoute(devinfo1.DeviceIndex);
continue;
}
if ((devinfo1.DeviceKind == 2) || (devinfo1.DeviceKind == 3))
{
//有些输送机、提升机在调度路径中存在,但是不需要调度来下指令,电器自己控制,只考察是否运行和故障位就可以了
if (devinfo1.OnlyDetectIO == "1")
{
#region 运行位(设备索引+4)
devinfo1.RunState = GetDevicePhotoelectricRoute(Convert.ToInt32(devinfo1.DeviceIndex.ToString() + "4"));
if (devinfo1.ErrorCode != 0)
{
AlterRoute(devinfo1.DeviceIndex, 0);
}
devinfo1.ErrorCode = 0;
#endregion
#region 故障位(设备索引+10)
if (GetDevicePhotoelectricRoute(Convert.ToInt32(devinfo1.DeviceIndex.ToString() + "10")) == 1)
{
//20091006
if (updateroute == true) AlterRoute(devinfo1.DeviceIndex, 97);
devinfo1.RunState = 2;
if (devinfo1.ErrorCode != 97)
{
AlterRoute(devinfo1.DeviceIndex, 97);
}
//devinfo1.ErrorCode = 97;
}
else
{
//20091006
if (updateroute == true) AlterRoute(devinfo1.DeviceIndex, 0);
}
//UpdateErrorCode(devinfo1.DeviceIndex, devinfo1.ErrorCode);
#endregion
}
else
{
States = GetDeviceStateRoute(devinfo1.DeviceIndex);
if (States == null) continue;
if (updateroute == true) AlterRoute(devinfo1.DeviceIndex, States[1]);
if (States[1] >= 30)
{
//修改路径表
if (States[1] != devinfo1.ErrorCode)
{
AlterRoute(devinfo1.DeviceIndex, States[1]);
}
//devinfo1.ErrorCode = States[1];
//devinfo1.RunState = 2;
//UpdateErrorCode(devinfo1.DeviceIndex, States[1]);
}
else if ((States[1] == 0) || (States[1] == 1) || (States[1] == 2))
{
//修改路径表
if (States[1] != devinfo1.ErrorCode)
{
AlterRoute(devinfo1.DeviceIndex, States[1]);
}
//devinfo1.ErrorCode = 0;
//if (States[1] == 2)
//{
// devinfo1.RunState = 0;
//}
//else
//{
// devinfo1.RunState = States[1];
//}
//UpdateErrorCode(devinfo1.DeviceIndex, 0);
}
//devinfo1.TaskNo = States[2];
}
}
if ((devinfo1.DeviceKind == 1) || (devinfo1.DeviceKind == 4))
{
States = GetDeviceStateRoute(devinfo1.DeviceIndex);
if (States == null) continue;
if (updateroute == true) AlterRoute(devinfo1.DeviceIndex, States[1]);
//修改路径表
if (States[1] != devinfo1.ErrorCode)
{
AlterRoute(devinfo1.DeviceIndex, States[1]);
}
//if (States[1] >= 30)
//{
// devinfo1.ErrorCode = States[1];
// devinfo1.RunState = 2;
// UpdateErrorCode(devinfo1.DeviceIndex, States[1]);
//}
else if ((States[1] == 0) || (States[1] == 1) || (States[1] == 2))
{
//修改路径表
if (States[1] != devinfo1.ErrorCode)
{
AlterRoute(devinfo1.DeviceIndex, States[1]);
}
//devinfo1.ErrorCode = 0;
//if (States[1] == 2)
//{
// devinfo1.RunState = 0;
//}
//else
//{
// devinfo1.RunState = States[1];
//}
//UpdateErrorCode(devinfo1.DeviceIndex, 0);
}
//devinfo1.TaskNo = States[2];
//devinfo1.XCoor = States[3];
//devinfo1.YCoor = States[4];
}
//int bdv = 0, bdov = 0;
//if (devinfo1.BindingDevice != null)
//{
// bdv = GetDevicePhotoelectric(Convert.ToInt32(devinfo1.BindingDevice));
//}
//if (devinfo1.BindingDeviceOut != null)
//{
// bdov = GetDevicePhotoelectric(Convert.ToInt32(devinfo1.BindingDeviceOut));
//}
//if ((bdv + bdov) >= 1)
//{
// devinfo1.HaveGoods = true;
//}
//else
//{
// devinfo1.HaveGoods = false;
//}
//DataView dvb = dbo.ExceSQL("SELECT F_MonitorIndex,F_NumParam1,F_NumParam2,F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6, F_TxtParam FROM T_Monitor_Task WHERE (F_MonitorIndex = " + devinfo1.TaskNo + ")").Tables[0].DefaultView;
//if (dvb.Count > 0)
//{
// if (devinfo1.DeviceKind == 1)
// {
// devinfo1.ArrowLocation = dvb[0]["F_NumParam4"].ToString() + "排" + dvb[0]["F_NumParam5"].ToString() + "列" + dvb[0]["F_NumParam6"].ToString() + "层";
// }
// if (devinfo1.DeviceKind == 4)
// {
// devinfo1.ArrowLocation = dvb[0]["F_NumParam1"].ToString();
// }
// if (devinfo1.DeviceKind == 2)
// {
// devinfo1.ArrowLocation = dvb[0]["F_NumParam4"].ToString();
// }
// devinfo1.Barcode = dvb[0]["F_TxtParam"].ToString();
//}
//else
//{
// devinfo1.Barcode = "";
// devinfo1.ArrowLocation = "";
//}
}
//Model.CGetInfo.SetDeviceInfo(devinfo1);
}
//string ss2 = ss;
//string ss1 = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
}
catch (Exception exa)
{
_CParsePLCError = "解析PLC反馈数据,修改路径时发生错误:" + exa.Message;
}
}
///
/// 修改本地路径表、反馈给管理的路径表以及提出修改申请
///
/// 发生故障的设备索引
///
//public static bool AlterRoute(int devInx, int state)
//{
// //string ss1 = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
// try
// {
// DataView dv = dboRoute.ExceSQL("select distinct F_RouteID from T_Base_Route_Device where F_DeviceIndex=" + devInx).Tables[0].DefaultView;
// for (int i = 0; i < dv.Count; i++)
// {
// if (state >= 30)
// {
// //所有子路径都不可用时,方才设定此路径真的不可用
// string sql = " SELECT T_Base_Route_Device.F_RouteIDSub, SUM(T_Base_Device.F_ErrorCode) AS ErrorCodes " +
// " FROM T_Base_Route_Device,T_Base_Device where T_Base_Route_Device.F_DeviceIndex = T_Base_Device.F_DeviceIndex" +
// " and T_Base_Route_Device.F_RouteID=" + dv[i]["F_RouteID"] + " GROUP BY T_Base_Route_Device.F_RouteIDSub ";
// DataView dvr = dboRoute.ExceSQL(sql).Tables[0].DefaultView;
// bool ifUsable = false;
// for (int kk = 0; kk < dvr.Count; kk++)
// {
// if (Convert.ToInt32(dvr[kk]["ErrorCodes"]) <= 0)
// {
// ifUsable = true;
// break;
// }
// }
// if (ifUsable == false)
// {
// //20101011
// int ups = dboRoute.ExecuteSql("update t_base_route set F_Status=0 where f_routeid=" + dv[i]["F_RouteID"] + " and F_Status=1 and F_AutoUpdate=1 ");
// if (ups > 0)
// dboMan.ExceSQL("update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=0 where CONTROL_ROUTE_ID='" + dv[i]["F_RouteID"] + "' and CONTROL_ROUTE_STATUS=1");
// }
// }
// else
// {
// DataView dv1 = dboRoute.ExceSQL("SELECT SUM(T_Base_Device.F_ErrorCode) as errcode FROM T_Base_Device ,T_Base_Route_Device" +
// " where T_Base_Device.F_DeviceIndex = T_Base_Route_Device.F_DeviceIndex and T_Base_Route_Device.F_RouteID=" + dv[i]["F_RouteID"]).Tables[0].DefaultView;
// if (dv1.Count > 0)
// {
// int errcode = 0;
// if (Microsoft.VisualBasic.Information.IsNumeric(dv1[0]["errcode"]) == true)
// {
// errcode = Convert.ToInt32(dv1[0]["errcode"]);
// }
// if (errcode <= 0)
// {
// //20101011
// int ups = dboRoute.ExecuteSql("update t_base_route set F_Status=1 where f_routeid=" + dv[i]["F_RouteID"] + " and F_Status=0 and F_AutoUpdate=1 ");
// if (ups > 0)
// dboMan.ExceSQL("update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=1 where CONTROL_ROUTE_ID='" + dv[i]["F_RouteID"] + "' and CONTROL_ROUTE_STATUS=0");
// }
// }
// }
// }
// //string ss11 = DateTime.Now.Second.ToString() + "-" + DateTime.Now.Millisecond.ToString();
// return true;
// }
// catch (Exception ex)
// {
// _CParsePLCError = "解析PLC反馈数据的修改路径时发生错误:" + ex.Message;
// return false;
// }
//}
public static bool AlterRoute(int devInx, int state)
{
try
{
//SELECT T_Base_Route_Device.F_RouteIDSub, T_Base_Route_Device.F_RouteID, T_Base_Route_Device.F_DeviceIndex FROM T_Base_Route_Device,T_Base_Device where T_Base_Route_Device.F_DeviceIndex = T_Base_Device.F_DeviceIndex GROUP BY T_Base_Route_Device.F_RouteIDSub, T_Base_Route_Device.F_RouteID, T_Base_Route_Device.F_DeviceIndex HAVING (SUM(T_Base_Device.F_ErrorCode) <= 0) AND (T_Base_Route_Device.F_DeviceIndex = 12030)
sql.Remove(0, sql.Length);
sql.Append("select distinct F_RouteID from T_Base_Route_Device where F_DeviceIndex=").Append(devInx);
DataView dv = dboRoute.ExceSQL(sql.ToString()).Tables[0].DefaultView;
for (int i = 0; i < dv.Count; i++)
{
if (state >= 30)
{
//所有子路径都不可用时,方才设定此路径真的不可用
sql.Remove(0, sql.Length);
sql.Append(" SELECT T_Base_Route_Device.F_RouteIDSub, SUM(T_Base_Device.F_ErrorCode) AS ErrorCodes ").Append(
" FROM T_Base_Route_Device,T_Base_Device where T_Base_Route_Device.F_DeviceIndex = T_Base_Device.F_DeviceIndex").Append(
" and T_Base_Route_Device.F_RouteID=").Append(dv[i]["F_RouteID"]).Append(" GROUP BY T_Base_Route_Device.F_RouteIDSub ");
DataView dvr = dboRoute.ExceSQL(sql.ToString()).Tables[0].DefaultView;
bool ifUsable = false;
for (int kk = 0; kk < dvr.Count; kk++)
{
if (Convert.ToInt32(dvr[kk]["ErrorCodes"]) <= 0)
{
ifUsable = true;
break;
}
}
if (ifUsable == false)
{
//20101011
sql.Remove(0, sql.Length);
sql.Append("update t_base_route set F_Status=0 where f_routeid=").Append(dv[i]["F_RouteID"]).Append(" and F_Status=1 and F_AutoUpdate=1 ");
int ups = dboRoute.ExecuteSql(sql.ToString());
sql.Remove(0, sql.Length);
sql.Append("update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=0 where CONTROL_ROUTE_ID='").Append(dv[i]["F_RouteID"]).Append("' and CONTROL_ROUTE_STATUS=1");
if (ups > 0) dboMan.ExceSQL(sql.ToString());
}
}
else
{
sql.Remove(0, sql.Length);
sql.Append("SELECT SUM(T_Base_Device.F_ErrorCode) as errcode FROM T_Base_Device ,T_Base_Route_Device").Append(
" where T_Base_Device.F_DeviceIndex = T_Base_Route_Device.F_DeviceIndex and T_Base_Route_Device.F_RouteID=").Append(dv[i]["F_RouteID"]);
DataView dv1 = dboRoute.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dv1.Count > 0)
{
int errcode = 0;
if (Microsoft.VisualBasic.Information.IsNumeric(dv1[0]["errcode"]) == true)
{
errcode = Convert.ToInt32(dv1[0]["errcode"]);
}
if (errcode <= 0)
{
//20101011
sql.Remove(0, sql.Length);
sql.Append("update t_base_route set F_Status=1 where f_routeid=").Append(dv[i]["F_RouteID"]).Append(" and F_Status=0 and F_AutoUpdate=1 ");
int ups = dboRoute.ExecuteSql(sql.ToString());
sql.Remove(0, sql.Length);
sql.Append("update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS=1 where CONTROL_ROUTE_ID='").Append(dv[i]["F_RouteID"]).Append("' and CONTROL_ROUTE_STATUS=0");
if (ups > 0) dboMan.ExceSQL(sql.ToString());
}
}
}
}
return true;
}
catch (Exception ex)
{
_CParsePLCError = "解析PLC反馈数据的修改路径时发生错误:" + ex.Message;
return false;
}
}
static void UpdateErrorCode(int devInx, int errorCode)
{// and (F_ErrorCode <> " + errorCode + ")
dbo.ExceSQL("UPDATE T_Base_Device SET F_ErrorCode = " + errorCode + " WHERE (F_DeviceIndex = " + devInx + ")and (F_ErrorCode <> " + errorCode + ")");
}
}
}