SCLS/SSWCS_JXDL(2019)/SimensProdave6/CGetDeviceState.cs
2025-05-19 09:45:29 +08:00

668 lines
33 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Text;
using DBFactory;
using ICommLayer;
using System.Data;
using Microsoft.VisualBasic;
namespace SimensProdave6
{
public class CGetDeviceState:IGetDeviceState
{
string _commLayerError;
public string CommLayerError
{
get { return _commLayerError; }
set { _commLayerError = value; }
}
DBOperator dbo = CSimensProdave6_S7.dbo;
public CGetDeviceState()
{
dbo.Open();
}
/// <summary>
///1、下位机给上位机发送设备任务状态信息
///检测开关: 0-无货1-有货
///确认按钮:
///第1字节
///一个变化的值,每确认一次,该值变化一次,以标志一个
///新的确认消息。例如可以是0、1交替变化也可以是递
///增变化。
///第2字节
///1-无货确认
///2-有货确认
///其他设备:
///第1字 节:设备状态
///堆垛机0-空闲
///1-正在运行
///2-任务完成
///3-要求调度重发命令
///4-通知调度取消当前任务
///其它值表示错误
/// 穿梭车:
/// 0-空闲
/// 1-正在运行
/// 2-完成
/// 3-要求调度重发命令
/// 4-通知调度取消当前任务
/// 其它值表示错误
/// 输送机:
/// 0-空闲
/// 1-正在运行
/// 2-完成只有PC下发的目标设备才允许汇报完成
/// 组合机构需要单独定义状态
/// 其它值表示错误
/// 第2、3字节 任务号,即上位机下达任务时的任务号
/// 第4、5、6、7字节
/// 堆垛机、穿梭车:
/// 终点X坐标沿轨道方向
/// 第8字节以后部分只对堆垛机有意义
/// 第8、9、10、11字节
/// 终点Y坐标沿高度方向
///
/// 2.下位机给上位机发送条码信息
/// 托盘条码:
/// 第1-10字节由左到右依次存放托盘上的10位条形码信息
/// 烟箱一号工程码:
/// 第1-9字节 由左到右依次存放烟箱上的后9位一号工程码信息
/// 一号工程码是32位相同品牌烟箱的一号工程码的前23位相同
/// 所以只存放后9位条码。每个码垛位进烟口有两个烟箱一号工程码存放区
/// 共18个字节上位机一次将两个烟箱一号工程码的信息同时读取。
/// 上位机成功读取18个字节后把这18个字节全部写入零
/// 下位机只有检测到18个字节全都是零时才可以写入新的一号工程码信息。
///
/// 3.下位机给上位机发送现场控制触摸屏申请信号
/// 第1字节 申请指令
/// 1- 重发当前设备指令
/// 2- 申请修改当前设备所执行任务的目标位置
/// 第2、3字节 设备索引(当前申请设备的索引)
/// 第4、5字节 任务号(需要修改目标位置的任务号)
/// 第6、15字节 托盘条码(当前申请设备上的托盘的条码)
/// 下位机可能因开关误动作等情况而引起任务记忆丢失,
/// 此时根据设备上停放托盘的条码可以重新申请获得任务。
/// 上位机收到此申请后重新发送当前设备的指令。
/// 有设备发生故障时,下位机可以申请修改任务的目标位置。
/// 上位机收到此申请后,如果可以找到新的路径,则修改此任务号的目标位置。
/// 当申请指令为1时任务号可以是任意值当申请指令为2时托盘条码可以是任意值。
/// </summary>
/// <param name="DeviceIndex">设备编号</param>
/// <returns>获得上行消息成功后发送应答消息后返回22个字的状态</returns>
public int[] GetDeviceState(int DeviceIndex, int TaskIndex)
{
try
{
int[] _Rword = new int[20];
byte[] _RRword;
int add = 0;
int Bit = 0;
//int isn=0;
Model.MDevice devinfo = Model.CGetInfo.GetDeviceInfo(DeviceIndex);
//DataView dv = dbo.ExceSQL("SELECT F_DBW2Address,F_DBWGetLength,F_DeviceIndex,F_DeviceKindIndex,F_OPCProgID, F_RemoteIP FROM T_Base_Device where F_DeviceIndex=" + DeviceIndex).Tables[0].DefaultView;
if (devinfo.DeviceIndex== 0)
{
_commLayerError = "SimensProdave6.CGetDeviceState.GetDeviceState发生错误在设备表中没找到设备所引";
return null;
}
else
{
switch (devinfo.DeviceKind.ToString())
{
#region
case "28":
_RRword = CSimensProdave6_S7.DB_Read_Prodave(0, 2, Convert.ToUInt16( devinfo.Dbw2Address), Convert.ToUInt32( devinfo.Dbw2Getlength));
if (_RRword == null)
{
_commLayerError = "SimensProdave6.CGetDeviceState.GetDeviceState发生错误" + CSimensProdave6_S7.ErrorsText;
return null;
}
else
{
int[] rrr=new int[Convert.ToInt32( devinfo.Dbw2Getlength)];
Array.Copy(_RRword, rrr,Convert.ToInt32( devinfo.Dbw2Getlength));
return rrr;
}
#endregion
#region
case "18":
Bit = Convert.ToInt16(Convert.ToDecimal(devinfo.Dbw2Getlength) * 8) - 1;//转换成bit0--bit7
if (Bit > 7)
{
add = 1;
Bit = Bit - 8;
}
else
{
add = 0;
}
_RRword = CSimensProdave6_S7.DB_Read_Prodave(0, 2, Convert.ToUInt16(devinfo.Dbw2Address + add), 1, Bit);
if (_RRword == null)
{
_commLayerError = "SimensProdave6.CGetDeviceState.GetDeviceState发生错误" + CSimensProdave6_S7.ErrorsText;
return null;
}
_Rword[0] = _RRword[0];
_Rword[1] = 3;//3-检测开关状态
_Rword[2] = TaskIndex;//任务号
_Rword[3] = 0;
_Rword[4] = 0;
_Rword[5] = DeviceIndex;//设备号索引
break;
#endregion
#region
case "14":
Bit = Convert.ToInt16(devinfo.Dbw2Getlength * 8) - 1;//转换成bit0--bit7
if (Bit > 7)
{
add = 1;
Bit = Bit - 8;
}
else
{
add = 0;
}
_RRword = CSimensProdave6_S7.DB_Read_Prodave(0, 2, Convert.ToUInt16(devinfo.Dbw2Address + add), 1, Bit);
if (_RRword == null)
{
_commLayerError = "SimensProdave6.CGetDeviceState.GetDeviceState发生错误" + CSimensProdave6_S7.ErrorsText;
return null;
}
_Rword[0] = _RRword[0];
_Rword[1] = 3;//3-检测开关状态
_Rword[2] = TaskIndex;//任务号
_Rword[3] = 0;
_Rword[4] = 0;
_Rword[5] = DeviceIndex;//设备号索引
break;
#endregion
#region 16
case "22":
_RRword = CSimensProdave6_S7.DB_Read_Prodave(0, 2, Convert.ToUInt16(devinfo.Dbw2Address), Convert.ToUInt32(devinfo.Dbw2Getlength));
if (_RRword == null)
{
_commLayerError = "SimensProdave6.CGetDeviceState.GetDeviceState发生错误" + CSimensProdave6_S7.ErrorsText;
return null;
}
else
{
_Rword[0] = TaskIndex;
_Rword[1] = DeviceIndex;
_Rword[2] = _RRword[1];
_Rword[3]=(_RRword[2] << 8) + _RRword[3];
_Rword[4] = (_RRword[4] << 8) + _RRword[5];
}
//_Rword[2];//命令字
//_Rword[3];//设备索引(当前申请设备的索引)
//_Rword[4];//任务号(需要修改目标位置的任务号)
int bcz = 0;
byte[] www = new byte[1];
string barcode = string.Empty;
for (int j = 6; j <= 15; j++)
{
bcz = bcz + _RRword[j];
barcode = barcode += Convert.ToChar(_RRword[j]);
}
#region (1)
if (_Rword[2] == 1)//命令字
{
if (_Rword[4] == 0)//无任务号
{
if (bcz == 0)//无条码号
{
//32申请的任务号和条形码都不存在
www[0]=32;
CSimensProdave6_S7.DB_Write_Prodave(0, 2, Convert.ToUInt16(devinfo.Dbw2Address), 1, www);
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
// {
DataView dvbc = dbo.ExceSQL("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2," +
"F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_TxtParam = '" +
barcode + "' and F_DeviceIndex="+_Rword[3]+" order by F_MonitorIndex asc").Tables[0].DefaultView;
if (dvbc.Count > 0)
{
www[0]=4;
CSimensProdave6_S7.DB_Write_Prodave(0, 2, Convert.ToUInt16(devinfo.Dbw2Address), 1, www);
return _Rword;
}
else
{
//35申请的设备号和条形码不匹配
www[0]=35 ;
CSimensProdave6_S7.DB_Write_Prodave(0, 2, Convert.ToUInt16(devinfo.Dbw2Address), 1, www);
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 (_Rword[4] == dv[i]["F_TaskIndex"].ToString())
// {
// return null;
// }
// else
// {
DataView dvbc = dbo.ExceSQL("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2," +
"F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_MonitorIndex = '" +
_Rword[4] + "' and F_DeviceIndex=" + _Rword[3] + " order by F_MonitorIndex asc").Tables[0].DefaultView;
if (dvbc.Count > 0)
{
//RestoreDevice(Convert.ToInt32(dvbc[0]["F_MonitorIndex"]));
www[0]= 4 ;
CSimensProdave6_S7.DB_Write_Prodave(0, 2, Convert.ToUInt16(devinfo.Dbw2Address), 1, www);
////记录任务号
//dbo.ExceSQL("update T_Base_PLC_Ask set F_TaskIndex='" + _Rword[4]
// + "' where F_DeviceIndex=" + DeviceIndex);
return _Rword;
}
else
{
//36申请的设备号和任务号不匹配
www[0]= 36;
CSimensProdave6_S7.DB_Write_Prodave(0, 2, Convert.ToUInt16(devinfo.Dbw2Address), 1, www);
return null;
}
// }
//}
#endregion
}
}
#endregion
#region (2)
else if (_Rword[2] == 2)//命令字
{
//申请修改当前设备所执行任务目标位置的F_TaskIndex重复时不允许相应申请
}
#endregion
#region (3)
else if (_Rword[2] == 3)//命令字
{
#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 (_Rword[4] == dv[i]["F_TaskIndex"].ToString())
// {
// return null;
// }
// else
// {
DataView dvbc = dbo.ExceSQL("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2," +
"F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_MonitorIndex = '" +
_Rword[4] + "' and F_DeviceIndex=" + _Rword[3] + " order by F_MonitorIndex asc").Tables[0].DefaultView;
if (dvbc.Count > 0)
{
www[0]=2;
CSimensProdave6_S7.DB_Write_Prodave(0, 2, Convert.ToUInt16(devinfo.Dbw2Address), 1, www);
////记录任务号
//dbo.ExceSQL("update T_Base_PLC_Ask set F_TaskIndex='" + _Rword[4]
// + "' where F_DeviceIndex=" + DeviceIndex);
return _Rword;
}
else
{
//36申请的设备号和任务号不匹配
www[0]=36;
CSimensProdave6_S7.DB_Write_Prodave(0, 2, Convert.ToUInt16(devinfo.Dbw2Address), 1, www);
return null;
}
// }
//}
#endregion
}
#endregion
#region (4)
else if (_Rword[2] == 4)//命令字
{
DataView dvbc = dbo.ExceSQL("SELECT F_MonitorIndex,F_DeviceCommandIndex,F_NumParam1,F_NumParam2," +
"F_NumParam3,F_NumParam4,F_NumParam5,F_NumParam6 FROM T_Monitor_Task WHERE F_MonitorIndex = '" +
_Rword[4] + "' and F_DeviceIndex=" + _Rword[3] + " order by F_MonitorIndex asc").Tables[0].DefaultView;
if (dvbc.Count > 0)
{
www[0] = 3;
CSimensProdave6_S7.DB_Write_Prodave(0, 2, Convert.ToUInt16(devinfo.Dbw2Address), 1, www);
////记录任务号
//dbo.ExceSQL("update T_Base_PLC_Ask set F_TaskIndex='" + _Rword[4]
// + "' where F_DeviceIndex=" + DeviceIndex);
return _Rword;
}
else
{
//36申请的设备号和任务号不匹配
www[0]= 36 ;
CSimensProdave6_S7.DB_Write_Prodave(0, 2, Convert.ToUInt16(devinfo.Dbw2Address), 1, www);
return null;
}
}
#endregion
break;
#endregion
#region
case "1"://堆垛机
_RRword = CSimensProdave6_S7.DB_Read_Prodave(0, 2, Convert.ToUInt16(devinfo.Dbw2Address), Convert.ToUInt32(devinfo.Dbw2Getlength));
if (_RRword == null)
{
_commLayerError = "SimensProdave6.CGetDeviceState.GetDeviceState发生错误" + CSimensProdave6_S7.ErrorsText;
return null;
}
else
{
_Rword[0] = Convert.ToInt32(_RRword[0]);//读写标志
_Rword[1] = Convert.ToInt32(_RRword[1]);//状态
_Rword[2] = Convert.ToInt32((_RRword[2] << 8) + _RRword[3]);//任务号
_Rword[3] = Convert.ToInt32(_RRword[7] + (_RRword[6] << 8) + (_RRword[5] << 16) + (_RRword[4] << 32));//X坐标
_Rword[4] = Convert.ToInt32(_RRword[11] + (_RRword[10] << 8) + (_RRword[9] << 16) + (_RRword[8] << 32));//Y坐标
_Rword[5] = DeviceIndex;//设备号索引
}
break;
case "2"://输送机
_RRword = CSimensProdave6_S7.DB_Read_Prodave(0, 2, Convert.ToUInt16(devinfo.Dbw2Address), Convert.ToUInt32(devinfo.Dbw2Getlength));
if (_RRword == null)
{
_commLayerError = "SimensProdave6.CGetDeviceState.GetDeviceState发生错误" + CSimensProdave6_S7.ErrorsText;
return null;
}
else
{
www = new byte[4];
Array.Copy(_RRword, www, 4);
CommonClassLib.CCarryConvert.WriteDarkCasket("ReadTcpIp", "CGetDeviceState", DeviceIndex.ToString(), www);
_Rword[0] = Convert.ToInt32(_RRword[0]);//读写标志
_Rword[1] = Convert.ToInt32(_RRword[1]);//状态
_Rword[2] = Convert.ToInt32((_RRword[2] << 8) + _RRword[3]);//任务号
_Rword[3] = 0;
_Rword[4] = 0;
_Rword[5] = DeviceIndex;//设备号索引
}
break;
case "4"://RGV
_RRword = CSimensProdave6_S7.DB_Read_Prodave(0, 2, Convert.ToUInt16(devinfo.Dbw2Address), Convert.ToUInt32(devinfo.Dbw2Getlength));
if (_RRword == null)
{
_commLayerError = "SimensProdave6.CGetDeviceState.GetDeviceState发生错误" + CSimensProdave6_S7.ErrorsText;
return null;
}
else
{
www=new byte[8];
Array.Copy(_RRword, www, 8);
CommonClassLib.CCarryConvert.WriteDarkCasket("ReadTcpIp", "CGetDeviceState", DeviceIndex.ToString(), www);
_Rword[0] = Convert.ToInt32(_RRword[0]);//读写标志
_Rword[1] = Convert.ToInt32(_RRword[1]);//状态
_Rword[2] = Convert.ToInt32((_RRword[2] <<8) + _RRword[3]);//任务号
_Rword[3] = Convert.ToInt32(_RRword[7] + (_RRword[6]<<8) + (_RRword[5] << 16) + (_RRword[4] <<32));//X坐标
_Rword[4] = 0;
_Rword[5] = DeviceIndex;//设备号索引
}
break;
#endregion
default:
break;
}
}
return _Rword;
}
catch (Exception ex)
{
_commLayerError = "SimensProdave6.CGetDeviceState.GetDeviceState发生错误" + ex.Message;
return null;
}
}
public string GetStringData(int DeviceIndex, int TaskIndex)
{
try
{
byte[] _RRword;
string headstr = "";
string retdata = "";
Model.MDevice devinfo = Model.CGetInfo.GetDeviceInfo(DeviceIndex);
//DataView dv = dbo.ExceSQL("SELECT F_DBW2Address,F_DBWGetLength,F_DeviceIndex,F_DeviceKindIndex,F_OPCProgID, F_RemoteIP FROM T_Base_Device where F_DeviceIndex=" + DeviceIndex).Tables[0].DefaultView;
if (devinfo.DeviceIndex == 0)
{
_commLayerError = "SimensProdave6.CGetDeviceState.GetStringData发生错误在设备表中没找到设备所引";
return null;
}
else
{
_RRword = CSimensProdave6_S7.DB_Read_Prodave(0, 2, Convert.ToUInt16(devinfo.Dbw2Address), Convert.ToUInt32(devinfo.Dbw2Getlength));
if (_RRword == null)
{
_commLayerError = "SimensProdave6.CGetDeviceState.GetDeviceState发生错误" + CSimensProdave6_S7.ErrorsText;
return null;
}
else
{
switch (devinfo.DeviceKind.ToString())
{
#region (10)
case "7":
headstr = _RRword[0].ToString();
for (int i = 1; i <= 10;i++ )
{
retdata += Convert.ToChar(_RRword[i]);
}
break;
#endregion
#region 18
case "21":
headstr = _RRword[0].ToString();
for (int i = 1; i <= 18; i++)
{
retdata += Convert.ToChar(_RRword[i]);
}
break;
#endregion
default:
break;
}
}
}
if (headstr == "1")
{
byte[] ww=new byte[1]{2};
if (CSimensProdave6_S7.DB_Write_Prodave(0, 2, Convert.ToUInt16(devinfo.Dbw2Address), 1, ww) == false)
{
_commLayerError = "SimensProdave6.CGetDeviceState.GetDeviceState" + CSimensProdave6_S7.ErrorsText;
return null;
}
else
{
return retdata;
}
}
else
{
return null;
}
}
catch (Exception ex)
{
_commLayerError = "SimensProdave6.CGetDeviceState.GetStringData发生错误" + ex.Message;
return null;
}
}
void RestoreDevice(int mindex)
{
SimensProdave6.CSendDeviceOrder sdo=new CSendDeviceOrder();
int DeviceIdx, devKind;
DataView dv = dbo.ExceSQL("select F_MonitorIndex,F_DeviceIndex from T_Monitor_Task where F_MonitorIndex=" + mindex).Tables[0].DefaultView;
if (dv.Count > 0)
{
//检查关联命令一起复位
//如果mindex是主动任务f_associatemonitor有数据先复位被动的任务如果mindex是被动任务先复位自己再复位主动任务
DataView 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)
{
DataView 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 = GetDeviceKindIdx(DeviceIdx);
if ((devKind == 2) || (devKind == 4))
{//输送机清零
sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0);
}
if ((devKind == 1)) //堆垛机、RGV
{
sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0, 0, 0, 0, 0, 0);
}
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_Status=0 where F_MonitorIndex=" + Convert.ToInt32(dv2[0]["F_MonitorIndex"]));
}
//再复位自己
DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]);
devKind = GetDeviceKindIdx(DeviceIdx);
if ((devKind == 2) || (devKind == 4))
{//输送机、RGV清零
sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0);
}
if ((devKind == 1)) //堆垛机
{
sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0, 0, 0, 0, 0, 0);
}
dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert.ToInt32(dv[0]["F_DeviceIndex"]));
dbo.ExceSQL("update T_Monitor_Task set F_Status=0 where F_MonitorIndex=" + Convert.ToInt32(dv[0]["F_MonitorIndex"]));
}
else
{
//自己是否被关联,先复位自己,再复位主任务
DataView 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 = GetDeviceKindIdx(DeviceIdx);
if ((devKind == 2) || (devKind == 4))
{//输送机、RGV清零
sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0);
}
if ((devKind == 1)) //堆垛机
{
sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0, 0, 0, 0, 0, 0);
}
dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert.ToInt32(dv[0]["F_DeviceIndex"]));
dbo.ExceSQL("update T_Monitor_Task set F_Status=0 where F_MonitorIndex=" + mindex);
//再复位主任务
DeviceIdx = Convert.ToInt32(dv3[0]["F_DeviceIndex"]);
devKind = GetDeviceKindIdx(DeviceIdx);
if ((devKind == 2) || (devKind == 4))
{//输送机、RGV清零
sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0);
}
if ((devKind == 1)) //堆垛机
{
sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0, 0, 0, 0, 0, 0);
}
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_Status=0 where F_MonitorIndex=" + Convert.ToInt32(dv3[0]["F_MonitorIndex"]));
}
else
{
//无关联任务,只复位自己
DeviceIdx = Convert.ToInt32(dv[0]["F_DeviceIndex"]);
devKind = GetDeviceKindIdx(DeviceIdx);
if ((devKind == 2) || (devKind == 4))
{//输送机、RGV清零
sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0);
}
if ((devKind == 1)) //堆垛机
{
sdo.SendDeviceOrder(2, 0, 0, DeviceIdx, 0, 0, 0, 0, 0, 0);
}
dbo.ExceSQL("update T_Base_Device set F_LockedState=0 where F_DeviceIndex=" + Convert.ToInt32(dv[0]["F_DeviceIndex"]));
dbo.ExceSQL("update T_Monitor_Task set F_Status=0 where F_MonitorIndex=" + mindex);
}
}
}
}
int GetDeviceKindIdx(int devIdx)
{
try
{
string strSql = "SELECT F_DeviceIndex, F_DeviceKindIndex FROM T_Base_Device WHERE F_DeviceIndex=" + devIdx;
DataSet ds = dbo.ExceSQL(strSql);
DataView dv = ds.Tables[0].DefaultView;
if (dv.Count > 0)
{
return Convert.ToInt32(dv[0]["F_DeviceKindIndex"]);
}
else
return 0;
}
catch (Exception ex)
{
throw ex;
}
}
}
}