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

1954 lines
81 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 System.Data;
using ICommLayer;
using CommLayerFactory;
using DBFactory;
using System.Threading;
namespace ControlSystem
{
/// <summary>
/// Creator:Richard.liu
///
/// 命令开关等全局变量的定义
/// </summary>
public static class CStaticClass
{
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>
/// 任务日志和设备故障记录的保存时间默认为30天
/// </summary>
public static string SaveDays = "30";//20110603
/// <summary>
/// 用户编号
/// </summary>
public static bool isDisassembleTask = false;
public static string UserID
{
get { return CStaticClass._userID; }
set { CStaticClass._userID = value; }
}
static int _MessageIndex;
static bool _Order;//
static bool _InvStatus;//
static bool _ObtainManageTask;//
static bool _autoOrder;
static bool _handOrder;
static bool _tempOrder;
// 20120619 南昌添加暂停获取任务开关
static bool _tempStopObtainTask;
static ISendDeviceOrder sdo;
//20100108
static IGetDeviceState gds;
//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
{
if (Microsoft.VisualBasic.Information.IsNumeric(_doubleForkWaitTime)==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
{
if (Microsoft.VisualBasic.Information.IsNumeric(_transportTimeout) == true)
{
CStaticClass._transportTimeout = value;
}
else
{
CStaticClass._transportTimeout = "5";
}
}
}
static string _stackTimeout = "5";
/// <summary>
/// 输送超时最大允许时间单位默认5分钟//20110608
/// </summary>
public static string StackTimeout
{
get { return CStaticClass._stackTimeout; }
set
{
if (Microsoft.VisualBasic.Information.IsNumeric(_stackTimeout) == true)
{
CStaticClass._stackTimeout = value;
}
else
{
CStaticClass._stackTimeout = "5";
}
}
}
static string _agvAllowSingleFork = "0";
/// <summary>
/// AGV是否允许单叉动作默认双叉一起动作 0
/// </summary>
public static string AGVAllowSingleFork
{
get { return CStaticClass._agvAllowSingleFork; }
set
{
if ((value == "0") || (value == "1"))
{
CStaticClass._agvAllowSingleFork = value;
}
else
{
CStaticClass._agvAllowSingleFork = "0";
}
}
}
//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 =new DBOperator();
public static DBOperator dbo1 = new DBOperator();
public static DBOperator dboM = new DBOperator("ManConnString", "ManDBFactory");
public static System.Windows.Forms.Form FormMonitor = null;
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;
//20120519 nanchang 添加测试程序用的标志变量
public static bool StopTestLane = true;
public static bool LIKUSTATUS = true;
static int _stackSafeDistance = 12; // 可以修改 货位数 == 6个大货格
public static string BarcodeNull = "11111111111"; //表示未读到条码
/// <summary>
/// 堆垛机安全距离
/// </summary>
public static int StackSafeDistance
{
get { return CStaticClass._stackSafeDistance; }
set
{
CStaticClass._stackSafeDistance = value;
}
}
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>
/// 管理系统的数据库工厂SQLServerDBFactoryOracleDBFactoryOleDBFactory
/// </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 _manstatus = " F_Status<>-1 ";//默认,显示调度任务全部队列
static string _monstatus = " F_Status<>-1 ";//默认,显示设备指令全部队列
/// <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 InvStatus
{
get { return CStaticClass._InvStatus; }
set { CStaticClass._InvStatus = value; }
}
/// <summary>
/// 是否获取调度任务
/// </summary>
public static bool ObtainManageTask
{
get { return _ObtainManageTask; }
set { _ObtainManageTask = value; }
}
/// <summary>
/// 20120619 是否暂停获取部分调度任务
/// </summary>
public static bool TempStopObtainTask
{
get { return _tempStopObtainTask; }
set { _tempStopObtainTask = 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 = 0;
OPCClient.CCommonOPCClient.ConnectCount = 0;
// 20120427 南昌 添加每个S7连接的计数清理
OPCClient.CCommonOPCClient.ErrorCount = new int[11] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
}
public static int LambDB2Add = 2016;
static StringBuilder sql = new StringBuilder();
public static int[] AllReturns;
static string GetDeviceS7Connection(int deviceindex)
{//20110216
DataView dv = dbo.ExceSQL("SELECT F_S7Connection FROM T_Base_Device WHERE (F_DeviceIndex = " + deviceindex + ")").Tables[0].DefaultView;
if (dv.Count > 0)
{
return dv[0]["F_S7Connection"].ToString();
}
else
{
return null;
}
}
/// <summary>
/// 20110216支持多个S7Connnection组态OPC
/// </summary>
public static Dictionary <string,int[]> MutiS7ConnReturns=new Dictionary<string,int[]>();
/// <summary>
/// 取得所有光电开关的信号
/// </summary>
public static void GetAllReturns()
{//20110216
try
{
// 20120420 调试时候增加F_LockedState字段没有上电的设备不读取。
DataView dv = dbo.ExceSQL("SELECT F_DeviceIndex,F_S7Connection, F_LockedState FROM T_Base_Device WHERE (F_DeviceKindIndex = 28)").Tables[0].DefaultView;
if (dv.Count > 0)
{
for (int i = 0; i < dv.Count; i++)
{
// 20120425 nanchang 调试时候把没有上电或调试好的S7链接设置成-1
if (Convert.ToInt32(dv[i]["F_LockedState"]) != -1)
{
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)
{
//if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得所有光电开关的信号时:" + gds.CommLayerError) < 0)
//{
// FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得所有光电开关的信号时:" + gds.CommLayerError, true);
//}
}
}
}
}
else
{
MutiS7ConnReturns = null;
}
}
catch (Exception ex)
{
if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得所有光电开关的信号时:" + ex.Message) < 0)
{
FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得所有光电开关的信号时:" + ex.Message, true);
}
return;
}
}
/// <summary>
/// 取得指定光电开关确认按钮设备索引的信号01
/// </summary>
/// <param name="deviceIdx">设备索引</param>
/// <returns>01</returns>
public static int GetDevicePhotoelectric(int deviceIdx)
{
try
{
//20110216
if (CStaticClass.MutiS7ConnReturns.Count > 0)
{
AllReturns = CStaticClass.MutiS7ConnReturns[GetDeviceS7Connection(deviceIdx)];
}
if (deviceIdx == 22001)
{
deviceIdx = 22001;
}
if (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 ((devinfo.DeviceKind == 14) || (devinfo.DeviceKind == 18))
{
//20110216
devinfo28 = Model.CGeneralFunction.GetDevice28AllDB1Data(new StringBuilder(devinfo.S7Connection));
int temp = devinfo.Dbw2Address - devinfo28.Dbw2Address;
if (Convert.ToInt32((devinfo.Dbw2Getlength * 8 - 1)) > 7)
{
glen = Convert.ToInt32((devinfo.Dbw2Getlength * 8 - 1)) - 8;
temp = temp + 1;
}
else
{
glen = Convert.ToInt32((devinfo.Dbw2Getlength * 8 - 1));
}
if (temp >= 0)
{
IfVis = CommonClassLib.CCarryConvert.GetBitFromInteger(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;
}
}
catch (Exception ex)
{
if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得指定光电开关的信号时:" + ex.Message) < 0)
{
FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得指定光电开关的信号时:" + ex.Message, true);
}
return -1;
}
}
/// <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
{
//20110216
if (MutiS7ConnReturns.Count > 0)
{
AllReturns = CStaticClass.MutiS7ConnReturns[GetDeviceS7Connection(deviceIdx)];
}
if (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 (devinfo.SplitByte!=-1)
{
//20110216
devinfo28 = Model.CGeneralFunction.GetDevice28AllDB1Data(new StringBuilder(devinfo.S7Connection));
int temp = devinfo.SplitByte - devinfo28.Dbw2Address;
if (abit > 7)
{
glen = abit - 8;
temp = temp + 1;
}
else
{
glen = abit;
}
if (temp >= 0)
{
IfVis = CommonClassLib.CCarryConvert.GetBitFromInteger(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;
}
}
catch (Exception ex)
{
if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得指定光电开关的信号时:" + ex.Message) < 0)
{
FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得指定光电开关的信号时:" + ex.Message, true);
}
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
{
//20110216
if (CStaticClass.MutiS7ConnReturns.Count > 0)
{
AllReturns = CStaticClass.MutiS7ConnReturns[GetDeviceS7Connection(deviceIdx)];
}
if (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 (devinfo.SplitByte != -1)
{
//20110216
devinfo28 = Model.CGeneralFunction.GetDevice28AllDB1Data(new StringBuilder(devinfo.S7Connection));
int temp = devinfo.SplitByte - devinfo28.Dbw2Address;
if (abit > 7)
{
glen = abit - 8;
temp = temp + 1;
}
else
{
glen = abit;
}
if (temp >= 0)
{
IfVis = CommonClassLib.CCarryConvert.GetBitFromInteger(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;
}
}
catch (Exception ex)
{
if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得指定光电开关的信号时:" + ex.Message) < 0)
{
FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得指定光电开关的信号时:" + ex.Message, true);
}
return -2;
}
}
/// <summary>
/// 取得指定设备索引的设备状态:[0]读写标志;[1]状态;[2]任务号;[3]X坐标;[4]Y坐标;[5]设备索引
/// </summary>
/// <param name="deviceIdx">设备索引</param>
/// <returns></returns>
public static int[] GetDeviceState(int deviceIdx)
{
//20100108
//DataView dv;
//DataView dvM;
Model.MDevice askdev;
int[] states = new int[6];
//string headstr;
DataView dvbc;
try
{
//20110216
if (CStaticClass.MutiS7ConnReturns.Count > 0)
{
AllReturns = CStaticClass.MutiS7ConnReturns[GetDeviceS7Connection(deviceIdx)];
}
if (deviceIdx == 22001)
{
deviceIdx = 22001;
}
if (AllReturns != null)
{
#region
devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx);
if (devinfo.Dbw2Address != -1)
{
//20100108
//DataView dv;
//DataView dvM;
//Model.MDevice askdev;
//20110216
devinfo28 = Model.CGeneralFunction.GetDevice28AllDB1Data(new StringBuilder(devinfo.S7Connection));
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 (AllReturns[temp] != 1) return null;
states = new int[16];
states[0] = 0;
states[1] = deviceIdx;
states[2] = AllReturns[temp + 1];//命令字
states[3] = (AllReturns[temp + 2] << 8) + AllReturns[temp + 3];//设备索引
states[4] = (AllReturns[temp + 4] << 8) + AllReturns[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, devinfo.DeviceIndex);//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 + AllReturns[temp + j];
barcode.Append(Convert.ToChar(AllReturns[temp + j]).ToString().ToUpper());
states[j - 1] = AllReturns[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, devinfo.DeviceIndex );//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,devinfo.DeviceIndex );//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,devinfo.DeviceIndex);//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,devinfo.DeviceIndex);//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,devinfo .DeviceIndex);//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,devinfo.DeviceIndex);//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,devinfo .DeviceIndex);//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,devinfo.DeviceIndex);//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,devinfo .DeviceIndex );//20091013
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "发送现场控制触摸屏申请的反馈信息", deviceIdx.ToString(), "31申请的任务号不存在");
return null;
}
#endregion
}
}
#endregion
break;
#endregion
#region
case "24":
if (AllReturns[temp] != 1) return null;
states[0] = 0;
states[1] = deviceIdx;
states[2] = AllReturns[temp + 1];//机器人动作:1-取货完成;2-放货完成;3-托盘码垛完成
states[3] = AllReturns[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] = AllReturns[temp];//读写标志
states[1] = AllReturns[temp + 1];//状态
states[2] = (AllReturns[temp + 2] << 8) + AllReturns[temp + 3];//任务号
states[3] = AllReturns[temp + 7] + (AllReturns[temp + 6] << 8) + (AllReturns[temp + 5] << 16) + (AllReturns[temp + 4] << 32);//X坐标
//states[4] = AllReturns[temp + 11] + (AllReturns[temp + 10] << 8) + (AllReturns[temp + 9] << 16) + (AllReturns[temp + 8] << 32);//Y坐标
states[4] = AllReturns[temp + 8] + AllReturns[temp + 9] + AllReturns[temp + 10] + AllReturns[temp + 11];//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] = AllReturns[temp];//读写标志
states[1] = AllReturns[temp + 1];//状态
states[2] = (AllReturns[temp + 2] << 8) + AllReturns[temp + 3];//任务号
states[3] = AllReturns[temp + 4];//20120506 南昌 检尺状态;
states[4] = AllReturns[temp + 5];//20120506 南昌 有货开关量检测;
states[5] = deviceIdx;//设备号索引
if (IsEquals(devinfo.ReturnMessage, states, 3) == false)
{
devinfo.ReturnMessage = states;
Model.CGetInfo.SetDeviceMessage(devinfo);
//if (states[1] > 1) // 20120815 改成只记录完成和报警的黑匣子
//{
sss.Remove(0, sss.Length);
sss.Append("**读标志" + states[0]).Append("**状态" + states[1]).Append("**任务号" + states[2]);
if (deviceIdx == 14021 || deviceIdx == 14011)
{
int ssss = 0;
}
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "收到输送机状态", deviceIdx.ToString(), sss.ToString());
// }
}
break;
case "4"://RGV
states[0] = AllReturns[temp];//读写标志
states[1] = AllReturns[temp + 1];//状态
states[2] = (AllReturns[temp + 2] << 8) + AllReturns[temp + 3];//任务号
states[3] = AllReturns[temp + 7] + (AllReturns[temp + 6] << 8) + (AllReturns[temp + 5] << 16) + (AllReturns[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;
case "8":// sanyi增加条码扫描仪的关联检尺判断-类型8。2010-4-2
states[0] = CStaticClass.AllReturns[temp];//读写标志,
if (states[0] == 2 || states[0] == 0)// 电气初始化可能是0
{
return null;
}
else// 当电气修改读写标志为:1才读取
{
states[1] = CStaticClass.AllReturns[temp + 1];//状态,PLC 0:无货 1:低货 2高货50检尺错误 51:超重
states[2] = 0;
states[3] = 0;
states[4] = 0;
states[5] = deviceIdx;//设备号索引
string sss = "";
for (int j = 0; j <= 5; j++)
{
sss += "***" + states[j].ToString();
}
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "CGetDeviceState", deviceIdx.ToString(), sss);
// 清理检尺数据区,读写标志改成2
sdo.WriteDBData(witemnames, wv,devinfo.DeviceIndex);
}
break;
#endregion
}
return states;
}
else
{
return null;
}
#endregion
}
else
{
return null;
}
}
catch (Exception ex)
{
if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("CStaticClass取得指定设备状态时" + ex.Message) < 0)
{
FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "CStaticClass取得指定设备状态时" + ex.Message+deviceIdx.ToString (), true);
}
return null;
}
finally
{//20100108
//dv=null;
//dvM = null;
askdev = null;
states = null;
dvbc = null;
}
}
public static string GetStringData(int deviceIdx)
{
try
{
//20110216
if (CStaticClass.MutiS7ConnReturns.Count > 0)
{
AllReturns = CStaticClass.MutiS7ConnReturns[GetDeviceS7Connection(deviceIdx)];
}
if (AllReturns != null)
{
#region
devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx);
if (devinfo.Dbw2Address != -1)
{
int temp = devinfo.Dbw2Address + 4;
//int temp = devinfo.Dbw2Address;
decimal glen = devinfo.Dbw2Getlength;
string headstr = AllReturns[devinfo.Dbw2Address].ToString();
string strdate = string.Empty;
if (headstr != "2") return null;
switch (devinfo.DeviceKind.ToString())
{
#region
case "7"://条形码
sss.Remove(0, sss.Length);
for (int i = 0; i < 6; i++)
{
sss.Append( Convert.ToChar(AllReturns[temp+i]));
}
strdate = sss.ToString().TrimEnd('/');
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "读PLC条码", deviceIdx.ToString(), "读标志1**条码:" + strdate);
break;
case "21"://箱条码群读
sss.Remove(0, sss.Length);
for (int i = 1; i <= 116; i++)
{
sss.Append(Convert.ToChar(AllReturns[temp + i]));
}
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "读PLC群读条码",deviceIdx.ToString(), "读标志1**条码:"+sss.ToString().ToUpper());
break;
#endregion
}
return strdate;
}
else
{
return null;
}
#endregion
#region
//devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx);
//if (devinfo.Dbw2Address != -1)
//{
// //20110216
// devinfo28 = Model.CGeneralFunction.GetDevice28AllDB1Data(new StringBuilder(devinfo.S7Connection));
// int temp = devinfo.Dbw2Address - devinfo28.Dbw2Address;
// decimal glen = devinfo.Dbw2Getlength;
// string headstr = AllReturns[temp].ToString();
// string strdate = string.Empty;
// if (headstr != "1") return null;
// switch (devinfo.DeviceKind.ToString())
// {
// #region 字符串信息
// case "7"://条形码
// sss.Remove(0, sss.Length);
// temp = 253;
// for (int i = 1; i <= 6; i++)
// {
// sss.Append(Convert.ToChar(AllReturns[temp + i]));
// }
// strdate = sss.ToString().TrimEnd('/');
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "读PLC条码", deviceIdx.ToString(), "读标志1**条码:" + strdate);
// break;
// case "21"://箱条码群读
// sss.Remove(0, sss.Length);
// for (int i = 1; i <= 116; i++)
// {
// sss.Append(Convert.ToChar(AllReturns[temp + i]));
// }
// CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "读PLC群读条码", deviceIdx.ToString(), "读标志1**条码:" + sss.ToString().ToUpper());
// break;
// #endregion
// }
// return strdate;
//}
//else
//{
// return null;
//}
#endregion
}
else
{
return null;
}
}
catch (Exception ex)
{
if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("CStaticClass取得设备字符串信息时" + ex.Message) < 0)
{
FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "CStaticClass取得设备字符串信息时" + ex.Message, true);
}
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;
}
private static void BeginListenAllReturns()
{
while (!exitThread)
{
try
{
GetAllReturns();
}
catch (Exception ex)
{
//
}
Thread.Sleep(600);
}
}
public static void StartListenReturn()
{
//exitThread = false;
//mythread = new Thread(new ThreadStart(BeginListenAllReturns));
//mythread.IsBackground = true;
//mythread.Start();
}
public static void EndListenReturn()
{
//exitThread = true;
//if (mythread != null)
//{
// mythread.Abort();
// mythread = null;
//}
}
private static Thread mythread;
private static bool exitThread = false;
public static int GetDeviceRunState(int deviceIdx)
{
int[] status = GetDeviceState(deviceIdx);
if (status == null)
{
return -1;
}
else
{
return status[1];
}
}
/// <summary>
///
/// </summary>
/// <param name="deviceIdx">叠盘完成信号</param>
/// <param name="recordedbarcode">叠盘机记录的条码</param>
/// <returns></returns>
public static int GetOverlapStatus(int deviceIdx)
{
try
{
if (devinfo28.DeviceKind == 28)
{
if (CStaticClass.MutiS7ConnReturns.Count > 0)
{
AllReturns = CStaticClass.MutiS7ConnReturns[GetDeviceS7Connection(deviceIdx)];
}
if (CStaticClass.AllReturns != null)
{
#region
devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx);
devinfo28 = Model.CGeneralFunction.GetDevice28AllDB1Data(new StringBuilder(devinfo.S7Connection));
int temp = devinfo.Dbw2Address - devinfo28.Dbw2Address;
int flag = CStaticClass.AllReturns[temp];//叠盘完成标志
int boxnumber = CStaticClass.AllReturns[temp + 1];//叠盘数量
if (flag !=1)
{
return flag;
}
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "读叠盘完成", deviceIdx.ToString(), "读标志1**叠盘数量:" + boxnumber);
return flag;
#endregion
}
else
{
return 0;
}
}
else
{
return 0;
}
}
catch (Exception ex)
{
if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得叠盘完成信号时:" + ex.Message) < 0)
{
FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得叠盘完成信号时:" + ex.Message, true);
}
return 0;
}
}
/// <summary>
/// 码垛完成信号
/// </summary>
/// <param name="deviceIdx"></param>
/// <returns></returns>
public static int GetRobotStatus(int deviceIdx ,out int boxsum)
{
boxsum = 0;
try
{
if (devinfo28.DeviceKind == 28)
{
AllReturns = CStaticClass.MutiS7ConnReturns[GetDeviceS7Connection(deviceIdx)];
if (CStaticClass.AllReturns != null)
{
#region
devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx);
devinfo28 = Model.CGeneralFunction.GetDevice28AllDB1Data(new StringBuilder(devinfo.S7Connection));
int temp = devinfo.Dbw2Address - devinfo28.Dbw2Address;
int flag = CStaticClass.AllReturns[temp];//码垛完成
boxsum = CStaticClass.AllReturns[temp + 1];//数量
if (flag != 1)
{
return flag;
}
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "码垛完成", deviceIdx.ToString(), "读标志1**箱数" + boxsum);
return flag;
#endregion
}
else
{
return 0;
}
}
else
{
return 0;
}
}
catch (Exception ex)
{
if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得码垛完成信号时:" + ex.Message) < 0)
{
FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得码垛完成信号时:" + ex.Message, true);
}
return 0;
}
}
/// <summary>
/// 码箱完成信号
/// </summary>
/// <returns></returns>
public static int GetPackBoxBarcodes(int deviceIdx, out string packbarcodes)
{
packbarcodes = string.Empty;
try
{
if (devinfo28.DeviceKind == 28)
{
AllReturns = CStaticClass.MutiS7ConnReturns[GetDeviceS7Connection(deviceIdx)];
if (CStaticClass.AllReturns != null)
{
#region
devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx);
devinfo28 = Model.CGeneralFunction.GetDevice28AllDB1Data(new StringBuilder(devinfo.S7Connection));
int temp = devinfo.Dbw2Address - devinfo28.Dbw2Address;
int flag = CStaticClass.AllReturns[temp];//码箱完成信号
if (flag != 1)
{
return flag;
}
int sum = CStaticClass.AllReturns[temp + 1];//数量
int sumlenght =Convert .ToInt32( devinfo.Dbw2Getlength);
int boxlenght = CStaticClass.AllReturns[temp + 2];//箱长度
if (sum == 1)
{
sumlenght = 25;
}
else if (sum == 2)
{
// sumlenght = 47;
}
sss.Remove(0, sss.ToString().Length);
StringBuilder sb = new StringBuilder();
for (int i = 3; i < sumlenght; i++)
{
//if ((i > 16 && i < 25) || (i > 38 && i < 47))
//{
// sss.Append("0");
//}
//else
//{
sss.Append(Convert.ToChar(AllReturns[temp + i]));
//}
if (sss.Length == 22)
{
//if (sss.ToString().TrimEnd('0') != string.Empty)
//{
sb.Append(sss.ToString()).Append("|");
//}
sss.Remove(0, sss.Length);
}
}
packbarcodes = sb.ToString().TrimEnd('|');
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "码箱完成", deviceIdx.ToString(), "读标志1**箱数" + sum + "**条码长度" + boxlenght + "**条码值" + packbarcodes);
return flag;
#endregion
}
else
{
return 0;
}
}
else
{
return 0;
}
}
catch (Exception ex)
{
if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得码箱完成信号时:" + ex.Message) < 0)
{
FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得码箱完成信号时:" + ex.Message, true);
}
return 0;
}
}
/// <summary>
/// 拆跺完成
/// </summary>
/// <param name="deviceIdx"></param>
/// <returns></returns>
public static int GetRobotUnpack(int deviceIdx)
{
try
{
if (devinfo28.DeviceKind == 28)
{
AllReturns = CStaticClass.MutiS7ConnReturns[GetDeviceS7Connection(deviceIdx)];
if (CStaticClass.AllReturns != null)
{
#region
devinfo = Model.CGetInfo.GetDeviceInfo(deviceIdx);
devinfo28 = Model.CGeneralFunction.GetDevice28AllDB1Data(new StringBuilder(devinfo.S7Connection));
int temp = devinfo.Dbw2Address - devinfo28.Dbw2Address;
int flag = CStaticClass.AllReturns[temp];//拆垛完成
if (flag != 1)
{
return flag;
}
CommonClassLib.CCarryConvert.WriteDarkCasket("OPCClient", "拆垛完成", deviceIdx.ToString(), "读标志1");
return flag;
#endregion
}
else
{
return 0;
}
}
else
{
return 0;
}
}
catch (Exception ex)
{
if (FrmControlMonitor.FormInstance.GetObjectText("tsStatus").IndexOf("取得码垛完成信号时:" + ex.Message) < 0)
{
FrmControlMonitor.FormInstance.FlashPanit("tsStatus", "取得码垛完成信号时:" + ex.Message, true);
}
return 0;
}
}
public static bool SetInLightOnOff()
{
DataView dv, dv1;
string sql = string.Empty;
int askkind = 44;
int reader = 16004;
char[] dd = new char[1] { ';' };//20101124
string[] DS;//20101124
try
{
sql = string.Format("select F_DeviceIndex from T_Base_PLC_Ask WHERE F_Askkind = {0} and F_DeviceIndex={1}", askkind, reader);
dv = dbo.ExceSQL(sql).Tables[0].DefaultView;
if (dv.Count > 0)
{
int devidx =12605;//灯设备
int taskend = 12604;//判读出库执行任务的终点,判读任何站台移库任务的终点
string checklight = "12605.2";//灯状态存放区
string checkdevice = "12604";//输送机状态
int curlightstatus = GetDevicePhotoelectric(checklight);//灯现在状态
int setlightstatus;
int sendorder;
sql = string.Format("select FID from T_Manage_Task where FENDDEVICE ={0} and FCONTROLTASKTYPE=2 and FSTATUS>0 ", taskend);
dv1 = dbo.ExceSQL(sql).Tables[0].DefaultView;
if (dv1.Count > 0)
{
//灯灭
setlightstatus = 0;
sendorder = 8;
}
else
{
//灯亮
//只判断是否有出库任务,在亮绿灯的情况下,入库按钮才会生效
setlightstatus = 1;
sendorder = 7;
//DS = checkdevice.Trim().Split(dd);
//string item;
//int value = 0;
//for (int k = 0; k < DS.Length; k++)
//{
// item = DS[k];
// int deviceindex = Convert.ToInt32(item);
// devinfo = Model.CGetInfo.GetDeviceInfo(deviceindex);
// if (devinfo != null)
// {
// if (devinfo.SplitByte_0 == 1 || devinfo.SplitByte_1 == 1 || devinfo.RunState == 1)
// {
// value++;
// }
// }
//}
//if (value > 0)
//{
// //灯灭
// setlightstatus = 0;
// sendorder = 8;
//}
//else
//{
// //灯亮
// setlightstatus = 1;
// sendorder = 7;
//}
}
if (curlightstatus!=-1 && setlightstatus != curlightstatus )
{
sdo = CommModeCreate.CreateSendDeviceOrder(devidx);
sdo.SendDeviceOrder(1, 30001, sendorder, devidx, 0);
}
}
return true;
}
catch (Exception ex)
{
throw ex;
}
finally
{
//dv.Dispose();
}
}
}
}