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

313 lines
13 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 ICommLayer;
using DBFactory;
using System.Data;
using Microsoft.VisualBasic;
namespace SimensProdave6
{
public class CSendDeviceOrder:ISendDeviceOrder
{
string _commLayerError;
public string CommLayerError
{
get { return _commLayerError; }
set { _commLayerError = value; }
}
DBOperator dbo = CSimensProdave6_S7.dbo;
public CSendDeviceOrder()
{
dbo.Open();
}
/// <summary>
/// 发送堆垛机命令
/// </summary>
/// <param name="MessageIndex">消息编号</param>
/// <param name="TaskIndex">任务编号</param>
/// <param name="Order">堆垛机命令字</param>
///1-复位
///2-将取
///3-将送
///4-取货
///5-放货
///6-取放货
/// <param name="DeviceIndex">设备编号</param>
/// <param name="StartX">起始x坐标排-沿轨道方向</param>
/// <param name="StartY">起始y坐标层-高度方向</param>
/// <param name="StartZ">起始z坐标列-面向堆垛机操作面板1-左侧2-右侧</param>
/// <param name="EndX">目标x坐标列-沿轨道方向</param>
/// <param name="EndY">目标y坐标层-高度方向</param>
/// <param name="EndZ">目标z坐标排-面向堆垛机操作面板1-左侧2-右侧</param>
/// <returns>发送堆垛机命令是否成功</returns>
public bool SendDeviceOrder(int MessageIndex, int TaskIndex, int Order, int DeviceIndex, int StartX, int StartY, int StartZ, int EndX, int EndY, int EndZ)
{
try
{
int sn = 0;
Model.MDevice devinfo = Model.CGetInfo.GetDeviceInfo(DeviceIndex);
//DataView dv = dbo.ExceSQL("SELECT F_DBW1Address,F_DBWSendLength,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.CSendDeviceOrder.SendDeviceOrder发生错误在设备表中没找到设备所引";
return false;
}
else
{
if ((devinfo.DeviceKind.ToString() != "1") )
{//堆垛机使用此方法
_commLayerError = "SimensProdave6.CSendDeviceOrder.SendDeviceOrder发生错误堆垛机和RGV以外的设备使用此方法不正确!";
return false;
}
#region
if (devinfo.DeviceKind.ToString() == "1")
{
byte[] wdata = new byte[10];
sn = Convert.ToInt32(devinfo.Dbw1Address);
wdata[0] =(byte) MessageIndex;
wdata[1] = (byte)Order;
wdata[2] = (byte)(TaskIndex>>8);
wdata[3] = (byte)(TaskIndex & 255);
if (MessageIndex == 1)
{
wdata[4] = (byte)(StartX + 1);
}
else
{
wdata[4] = (byte)StartX;
}
wdata[5] = (byte)StartY;
wdata[6] = (byte)StartZ;
if (MessageIndex == 1)
{
wdata[7] = (byte)(EndX + 1);
}
else
{
wdata[7] = (byte)EndX;
}
//wdata[7] = (byte)EndX;
wdata[8] = (byte)EndY;
wdata[9] = (byte)EndZ;
if (CSimensProdave6_S7.DB_Write_Prodave(0, 1, Convert.ToUInt16(sn), Convert.ToUInt32(devinfo.Dbw1SendLength), wdata) == false)
{
_commLayerError = "SimensProdave6.CSendDeviceOrder.SendDeviceOrder发生错误" + CSimensProdave6_S7.ErrorsText;
return false;
}
if (WriteBarcode(DeviceIndex, TaskIndex) == false)
{
return false;
}
}
#endregion
}
return true;
}
catch (Exception ex)
{
_commLayerError = "SimensProdave6.CSendDeviceOrder.SendDeviceOrder发生错误" + ex.Message;
return false;
}
}
/// <summary>
/// 发送穿梭车、输送机设备命令
/// </summary>
/// <param name="MessageIndex">消息编号</param>
/// <param name="TaskIndex">任务编号</param>
/// <param name="Order">命令字</param>
/// 穿梭车命令字:
///1-复位
///2-左接货
///3-左送货
///4-右接货
///5-右送货
///6-停止
///7-运动运动到第4、5字节指定的目标设备所引
///输送机命令字:
///1-入库(朝向库)
///2-出库(背向库)
///3-送货
///4-接货
///5-停止
/// <param name="DeviceIndex">设备编号</param>
///<param name="ArrowDeviceIndex">对于输送机、穿梭车代表目标设备所引,
/// 0-代表单一设备控制无目标设备所引1…65535代表目标设备所引终点输送机的设备所引</param>
/// <returns>发送穿梭车、输送机设备命令是否成功</returns>
public bool SendDeviceOrder(int MessageIndex, int TaskIndex, int Order, int DeviceIndex, int ArrowDeviceIndex)
{
try
{
string[] itemnames = new string[4];
string[] itemvalues = new string[4];
int sn = 0;
Model.MDevice devinfo = Model.CGetInfo.GetDeviceInfo(DeviceIndex);
//DataView dv = dbo.ExceSQL("SELECT F_DBW1Address,F_DBWSendLength,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.CSendDeviceOrder.SendDeviceOrder发生错误设备索引不存在!";
return false;
}
else
{
if (devinfo.DeviceKind.ToString() == "7")
{
return true;
}
if ((devinfo.DeviceKind.ToString() == "1") )
{//堆垛机不允许使用此方法
_commLayerError = "SimensProdave6.CSendDeviceOrder.SendDeviceOrder发生错误堆垛机和RGV不允许使用此方法!";
return false;
}
byte[] wdata = new byte[6];
sn = Convert.ToInt32(devinfo.Dbw1Address);
wdata[0] = (byte)MessageIndex;
wdata[1] = (byte)Order;
wdata[2] = (byte)(TaskIndex >> 8);
wdata[3] = (byte)(TaskIndex & 255);
wdata[4] = (byte)(ArrowDeviceIndex >> 8);
wdata[5] = (byte)(ArrowDeviceIndex & 255);
if (CSimensProdave6_S7.DB_Write_Prodave(0, 1, Convert.ToUInt16(sn), Convert.ToUInt32(devinfo.Dbw1SendLength), wdata) == false)
{
_commLayerError = "SimensProdave6.CSendDeviceOrder.SendDeviceOrder发生错误" + CSimensProdave6_S7.ErrorsText;
return false;
}
byte[] www = new byte[6];
Array.Copy(wdata, www, 6);
CommonClassLib.CCarryConvert.WriteDarkCasket("SimensProdave6", "SendDeviceOrder", DeviceIndex.ToString(), www);
if (WriteBarcode(DeviceIndex, TaskIndex) == false)
{
return false;
}
}
return true;
}
catch (Exception ex)
{
_commLayerError = "SimensProdave6.CSendDeviceOrder.SendDeviceOrder发生错误" + ex.Message;
return false;
}
}
/// <summary>
/// 上位机给下位机发送烟箱按品牌码分道信息共15字节,有数据时写入实际数据,否则全部写零
/// </summary>
/// <param name="DeviceIndex">码垛位设备号索引</param>
/// <param name="TobaccoCode">第1--13字节,烟箱码</param>
/// <param name="HaveFirstProjectCode">第14字节,1-有一号工程码,0-无一号工程码</param>
/// <param name="IfSmallTobacco">第15字节,1-小烟箱,0-正常烟箱</param>
/// <returns>发送烟箱按品牌码分道信息是否成功</returns>
public bool SendDeviceOrder(int DeviceIndex, string TobaccoCode, bool HaveFirstProjectCode, bool IfSmallTobacco,int Count)
{
try
{
byte[] wdata = new byte[15];
Model.MDevice devinfo = Model.CGetInfo.GetDeviceInfo(DeviceIndex);
//DataView dv = dbo.ExceSQL("SELECT F_DBW1Address,F_DBWSendLength,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.CSendDeviceOrder.SendDeviceOrder发生错误设备所引不存在!";
return false;
}
else
{
for (int i = 0; i < 13; i++)
{
wdata[i]=(byte)Strings.Asc(TobaccoCode.Substring(i,1));
}
if (HaveFirstProjectCode == true)
{
wdata[13] = 1;
}
else
{
wdata[13] = 0;
}
if (IfSmallTobacco == true)
{
wdata[14] = 1;
}
else
{
wdata[14] = 1;
}
if (CSimensProdave6_S7.DB_Write_Prodave(0, 1, Convert.ToUInt16(devinfo.Dbw1Address), Convert.ToUInt32(devinfo.Dbw1SendLength), wdata) == false)
{
return false;
}
}
return true;
}
catch (Exception ex)
{
_commLayerError = "SimensProdave6.CSendDeviceOrder.SendDeviceOrder发生错误" + ex.Message;
return false;
}
}
bool WriteBarcode(int deviceindex,int taskindex)
{
string barcode="";
byte[] wdata = new byte[11];
DataView dvb = dbo.ExceSQL("SELECT F_MonitorIndex, F_TxtParam FROM T_Monitor_Task WHERE (F_MonitorIndex = "+taskindex +")").Tables[0].DefaultView;
if (dvb.Count > 0)
{
barcode = dvb[0]["F_TxtParam"].ToString();
if (barcode == "-") return true;
}
else
{
_commLayerError = "SimensProdave6.CSendDeviceOrder.SendDeviceOrder发生错误写入附加条码时在调度任务表内没找到条码!";
return false;
}
Model.MDevice devinfo = Model.CGetInfo.GetDeviceInfo(deviceindex);
//DataView dv0 = dbo.ExceSQL("SELECT F_AppendBarcode, F_DeviceIndex FROM T_Base_Device WHERE (F_AppendBarcode <>-1) AND (F_DeviceIndex = "+deviceindex +")").Tables[0].DefaultView;
if (devinfo.AppendBarcode > 0)
{
Model.MDevice devinfo1 = Model.CGetInfo.GetDeviceInfo(devinfo.AppendBarcode);
//DataView dv = dbo.ExceSQL("SELECT F_DBW1Address,F_DBWSendLength,F_DeviceIndex,F_DeviceKindIndex,F_OPCProgID, F_RemoteIP FROM T_Base_Device where F_DeviceIndex=" + Convert.ToInt32(dv0[0]["F_AppendBarcode"])).Tables[0].DefaultView;
if (devinfo1.DeviceIndex == 0)
{
_commLayerError = "SimensProdave6.CSendDeviceOrder.SendDeviceOrder发生错误写入附加条码时设备索引不存在!";
return false;
}
else
{
wdata[0] = 1;
for (int i = 1; i <= barcode.Length; i++)
{
wdata[i] =(byte) Strings.Asc(barcode.Substring(i-1, 1));
}
if (CSimensProdave6_S7.DB_Write_Prodave(0, 1, Convert.ToUInt16(devinfo1.Dbw1Address), Convert.ToUInt32(devinfo1.Dbw1SendLength), wdata) == false)
{
_commLayerError = "SimensProdave6.CSendDeviceOrder.SendDeviceOrder发生错误写入附加条码失败!";
return false;
}
}
return true;
}
else
{
return true; ;
}
}
/// <summary>
/// 向PLC的DB区写入数据
/// </summary>
/// <param name="ItemNames">标签变量名称数组</param>
/// <param name="ItemValues">标签值数组</param>
/// <returns></returns>
public bool WriteDBData(string[] ItemNames, string[] ItemValues)
{
return true;
}
}
}