using IWareCC.Properties;
using IWareCommon.Enum.Conveyor;
using IWareCommon.Help;
using S7.Net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace IWareCC.Conveyor.Entity
{
    public class ConveyorEntity
    {
        private System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding();
        public int ConveyorType { get; set; }
        /// 
        /// 输送线名称
        /// 
        public string ConveyorName { get; set; }
        /// 
        /// PLCl连接字符串
        /// 
        public string PLCContionString { get; set; }
        /// 
        /// 设备Id
        /// 
        public int DeviceId { get; set; }
        /// 
        /// 是否在线
        /// 
        public bool IsOnline { get; set; }
        /// 
        /// 下线次数
        /// 
        public int OffLineTimes { get; set; }
        /// 
        /// 上一次心跳数
        /// 
        public int LastHandShake { get; set; }
        /// 
        /// 连接PLC读的对象
        /// 
        public PlcS7 RCVS71500 { get; set; }
        /// 
        /// 连接PLC写的对象
        /// 
        public PlcS7 WCVS71500 { get; set; }
        #region 输送线信息写入
        public int WHandShake { get; set; }
        /// 
        /// 设备编号
        /// 
        public string WConveyorNo { get; set; }
        /// 
        /// 任务号
        /// 
        public int WTaskNo { get; set; }
        /// 
        /// 目标端口点
        /// 
        public int WToStationNo { get; set; }
        /// 
        /// 急停
        /// 
        public bool WEStop { get; set; }
        /// 
        /// 任务取消
        /// 
        public bool WTaskCancel { get; set; }
        /// 
        /// 确认收到任务完成
        /// 
        public bool WConfirmTaskFinish { get; set; }
        /// 
        /// 任务下完成信号
        /// 
        public bool WSTP { get; set; }
        #endregion
        #region 输送线信息读取
        /// 
        /// 心跳
        /// 
        public int RHandShake { get; set; }
        /// 
        /// 设备编号
        /// 
        public string RConveyorNo { get; set; }
        /// 
        /// 任务号
        /// 
        public int RTaskNo { get; set; }
        /// 
        /// 当前目标位置
        /// 
        public int RDestination { get; set; }
        /// 
        /// 是否有报警
        /// 
        public bool RAlarm { get; set; }
        /// 
        /// 光电1状态(1有货;2无货)
        /// 
        public int RPh1 { get; set; }
        /// 
        /// /// 
        /// 光电2状态(1有货;2无货)
        /// 
        /// 
        public int RPh2 { get; set; }
        /// 
        /// 光电1状态(1有货;2无货)
        /// 
        public int RPh3 { get; set; }
        /// 
        /// 任务完成
        /// 
        public bool RTaskfinish { get; set; }
        /// 
        /// 报警代码
        /// 
        public int RAlarmCode { get; set; }
        /// 
        /// 外形检测(0通过,1前超,2后超,3左超,4右超,5超高)
        /// 
        public int RShape { get; set; }
        /// 
        /// 任务收到确认
        /// 
        public bool RAck { get; set; }
        /// 
        /// 模式
        /// 
        public int RMode { get; set; }
        /// 
        /// 状态
        /// 
        public int RState { get; set; }
        /// 
        /// 状态,输送线的光电检测高度
        /// 
        public int RHeight { get; set; }
        #endregion
        public OpcReadItem OpcReadItems { get; set; }
        public OpcWriteItem OpcWriteItems { get; set; }
        public ConveyorEntity() { }
        public ConveyorEntity(string conveyorName, int deviceId, int type, PlcS7 plc)
        {
            this.ConveyorType = type;
            this.ConveyorName = conveyorName;
            this.DeviceId = deviceId;
            this.WCVS71500 = plc;
            switch (conveyorName)
            {
                #region 入库口线体
                case "Line1030":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD232",
                        ToStationNo = "DB601.DBW236",
                        EStop = "DB601.DBX238.0",
                        TaskCancel = "DB601.DBX238.1",
                        STP = "DB601.DBX238.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW640",
                        Ph1 = "DB600.DBW642",
                        Ph2 = "DB600.DBW644",
                        State = "DB600.DBW646",
                        Alarm = "DB600.DBX648.0",
                        AlarmCode = "DB600.DBW650",
                        TaskNo = "DB600.DBD652",
                        Destination = "DB600.DBW656",
                        Ack = "DB600.DBX658.0",
                        Shape = "DB600.DBW644",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                case "Line1031":
                    OpcWriteItems = new OpcWriteItem
                {
                    TaskNo = "DB601.DBD240",
                    ToStationNo = "DB601.DBW244",
                    EStop = "DB601.DBX246.0",
                    TaskCancel = "DB601.DBX246.1",
                    STP = "DB601.DBX246.2",
                };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW662",
                        Ph1 = "DB600.DBW664",
                        Ph2 = "DB600.DBW666",
                        State = "DB600.DBW668",
                        Alarm = "DB600.DBX670.0",
                        AlarmCode = "DB600.DBW672",
                        TaskNo = "DB600.DBD674",
                        Destination = "DB600.DBW678",
                        Ack = "DB600.DBX680.0",
                        Shape = "DB600.DBW682",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                case "Line1032":
                    OpcWriteItems = new OpcWriteItem
              {
                  TaskNo = "DB601.DBD248",
                  ToStationNo = "DB601.DBW252",
                  EStop = "DB601.DBX254.0",
                  TaskCancel = "DB601.DBX254.1",
                  STP = "DB601.DBX254.2",
              };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW684",
                        Ph1 = "DB600.DBW686",
                        Ph2 = "DB600.DBW688",
                        State = "DB600.DBW690",
                        Alarm = "DB600.DBX692.0",
                        AlarmCode = "DB600.DBW694",
                        TaskNo = "DB600.DBD696",
                        Destination = "DB600.DBW700",
                        Ack = "DB600.DBX702.0",
                        Shape = "DB600.DBW704",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                case "Line1033":
                    OpcWriteItems = new OpcWriteItem
             {
                 TaskNo = "DB601.DBD256",
                 ToStationNo = "DB601.DBW260",
                 EStop = "DB601.DBX262.0",
                 TaskCancel = "DB601.DBX262.1",
                 STP = "DB601.DBX262.2",
             };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW706",
                        Ph1 = "DB600.DBW708",
                        Ph2 = "DB600.DBW710",
                        State = "DB600.DBW712",
                        Alarm = "DB600.DBX714.0",
                        AlarmCode = "DB600.DBW716",
                        TaskNo = "DB600.DBD718",
                        Destination = "DB600.DBW722",
                        Ack = "DB600.DBX724.0",
                        Shape = "DB600.DBW726",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                #endregion
                #region 出库口线体
                case "Line1016":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD120",
                        ToStationNo = "DB601.DBW124",
                        EStop = "DB601.DBX126.0",
                        TaskCancel = "DB601.DBX126.1",
                        STP = "DB601.DBX126.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW332",
                        Ph1 = "DB600.DBW334",
                        Ph2 = "DB600.DBW336",
                        State = "DB600.DBW338",
                        Alarm = "DB600.DBX340.0",
                        AlarmCode = "DB600.DBW342",
                        TaskNo = "DB600.DBD344",
                        Destination = "DB600.DBW348",
                        Ack = "DB600.DBX350.0",
                        Shape = "DB600.DBW352",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                case "Line1015":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD112",
                        ToStationNo = "DB601.DBW116",
                        EStop = "DB601.DBX118.0",
                        TaskCancel = "DB601.DBX118.1",
                        STP = "DB601.DBX118.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW310",
                        Ph1 = "DB600.DBW312",
                        Ph2 = "DB600.DBW314",
                        State = "DB600.DBW316",
                        Alarm = "DB600.DBX318.0",
                        AlarmCode = "DB600.DBW320",
                        TaskNo = "DB600.DBD322",
                        Destination = "DB600.DBW326",
                        Ack = "DB600.DBX328.0",
                        Shape = "DB600.DBW330",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                case "Line1014":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD104",
                        ToStationNo = "DB601.DBW108",
                        EStop = "DB601.DBX110.0",
                        TaskCancel = "DB601.DBX110.1",
                        STP = "DB601.DBX110.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW288",
                        Ph1 = "DB600.DBW290",
                        Ph2 = "DB600.DBW292",
                        State = "DB600.DBW294",
                        Alarm = "DB600.DBX296.0",
                        AlarmCode = "DB600.DBW298",
                        TaskNo = "DB600.DBD300",
                        Destination = "DB600.DBW304",
                        Ack = "DB600.DBX306.0",
                        Shape = "DB600.DBW308",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                case "Line1013":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD96",
                        ToStationNo = "DB601.DBW100",
                        EStop = "DB601.DBX102.0",
                        TaskCancel = "DB601.DBX102.1",
                        STP = "DB601.DBX102.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW266",
                        Ph1 = "DB600.DBW268",
                        Ph2 = "DB600.DBW270",
                        State = "DB600.DBW272",
                        Alarm = "DB600.DBX274.0",
                        AlarmCode = "DB600.DBW276",
                        TaskNo = "DB600.DBD278",
                        Destination = "DB600.DBW282",
                        Ack = "DB600.DBX284.0",
                        Shape = "DB600.DBW286",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                #endregion
                #region 入库小盘线体
                case "Line1021":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD160",
                        ToStationNo = "DB601.DBW164",
                        EStop = "DB601.DBX166.0",
                        TaskCancel = "DB601.DBX166.1",
                        STP = "DB601.DBX166.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW442",
                        Ph1 = "DB600.DBW444",
                        Ph2 = "DB600.DBW446",
                        State = "DB600.DBW448",
                        Alarm = "DB600.DBX450.0",
                        AlarmCode = "DB600.DBW452",
                        TaskNo = "DB600.DBD454",
                        Destination = "DB600.DBW458",
                        Ack = "DB600.DBX460.0",
                        Shape = "DB600.DBW462",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                case "Line1022":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD168",
                        ToStationNo = "DB601.DBW172",
                        EStop = "DB601.DBX174.0",
                        TaskCancel = "DB601.DBX174.1",
                        STP = "DB601.DBX174.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW464",
                        Ph1 = "DB600.DBW466",
                        Ph2 = "DB600.DBW468",
                        State = "DB600.DBW470",
                        Alarm = "DB600.DBX472.0",
                        AlarmCode = "DB600.DBW474",
                        TaskNo = "DB600.DBD476",
                        Destination = "DB600.DBW480",
                        Ack = "DB600.DBX482.0",
                        Shape = "DB600.DBW484",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                case "Line1023":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD176",
                        ToStationNo = "DB601.DBW180",
                        EStop = "DB601.DBX182.0",
                        TaskCancel = "DB601.DBX182.1",
                        STP = "DB601.DBX182.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW486",
                        Ph1 = "DB600.DBW488",
                        Ph2 = "DB600.DBW490",
                        State = "DB600.DBW492",
                        Alarm = "DB600.DBX494.0",
                        AlarmCode = "DB600.DBW496",
                        TaskNo = "DB600.DBD498",
                        Destination = "DB600.DBW502",
                        Ack = "DB600.DBX504.0",
                        Shape = "DB600.DBW506",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                case "Line1024":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD184",
                        ToStationNo = "DB601.DBW188",
                        EStop = "DB601.DBX190.0",
                        TaskCancel = "DB601.DBX190.1",
                        STP = "DB601.DBX190.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW508",
                        Ph1 = "DB600.DBW510",
                        Ph2 = "DB600.DBW512",
                        State = "DB600.DBW514",
                        Alarm = "DB600.DBX516.0",
                        AlarmCode = "DB600.DBW518",
                        TaskNo = "DB600.DBD520",
                        Destination = "DB600.DBW524",
                        Ack = "DB600.DBX526.0",
                        Shape = "DB600.DBW528",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                #endregion
                #region 入库大盘线体
                case "Line1026":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD200",
                        ToStationNo = "DB601.DBW204",
                        EStop = "DB601.DBX206.0",
                        TaskCancel = "DB601.DBX206.1",
                        STP = "DB601.DBX206.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW552",
                        Ph1 = "DB600.DBW554",
                        Ph2 = "DB600.DBW556",
                        State = "DB600.DBW558",
                        Alarm = "DB600.DBX560.0",
                        AlarmCode = "DB600.DBW562",
                        TaskNo = "DB600.DBD564",
                        Destination = "DB600.DBW568",
                        Ack = "DB600.DBX570.0",
                        Shape = "DB600.DBW572",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                case "Line1027":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD208",
                        ToStationNo = "DB601.DBW212",
                        EStop = "DB601.DBX214.0",
                        TaskCancel = "DB601.DBX214.1",
                        STP = "DB601.DBX214.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW574",
                        Ph1 = "DB600.DBW576",
                        Ph2 = "DB600.DBW578",
                        State = "DB600.DBW580",
                        Alarm = "DB600.DBX582.0",
                        AlarmCode = "DB600.DBW584",
                        TaskNo = "DB600.DBD586",
                        Destination = "DB600.DBW590",
                        Ack = "DB600.DBX592.0",
                        Shape = "DB600.DBW594",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                case "Line1028":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD216",
                        ToStationNo = "DB601.DBW220",
                        EStop = "DB601.DBX222.0",
                        TaskCancel = "DB601.DBX222.1",
                        STP = "DB601.DBX222.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW596",
                        Ph1 = "DB600.DBW598",
                        Ph2 = "DB600.DBW600",
                        State = "DB600.DBW602",
                        Alarm = "DB600.DBX604.0",
                        AlarmCode = "DB600.DBW606",
                        TaskNo = "DB600.DBD608",
                        Destination = "DB600.DBW612",
                        Ack = "DB600.DBX614.0",
                        Shape = "DB600.DBW616",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                case "Line1029":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD224",
                        ToStationNo = "DB601.DBW228",
                        EStop = "DB601.DBX230.0",
                        TaskCancel = "DB601.DBX230.1",
                        STP = "DB601.DBX230.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW618",
                        Ph1 = "DB600.DBW620",
                        Ph2 = "DB600.DBW622",
                        State = "DB600.DBW624",
                        Alarm = "DB600.DBX626.0",
                        AlarmCode = "DB600.DBW628",
                        TaskNo = "DB600.DBD630",
                        Destination = "DB600.DBW634",
                        Ack = "DB600.DBX636.0",
                        Shape = "DB600.DBW638",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                #endregion
                #region 人工分拣线体
                case "Line1001":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD0",
                        ToStationNo = "DB601.DBW4",
                        EStop = "DB601.DBX6.0",
                        TaskCancel = "DB601.DBX6.1",
                        STP = "DB601.DBX6.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW2",
                        Ph1 = "DB600.DBW4",
                        Ph2 = "DB600.DBW6",
                        State = "DB600.DBW8",
                        Alarm = "DB600.DBX10.0",
                        AlarmCode = "DB600.DBW12",
                        TaskNo = "DB600.DBD14",
                        Destination = "DB600.DBW18",
                        Ack = "DB600.DBX20.0",
                        Shape = "DB600.DBW22",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                #endregion
                #region 助力臂分拣1线体
                case "Line1002":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD8",
                        ToStationNo = "DB601.DBW12",
                        EStop = "DB601.DBX14.0",
                        TaskCancel = "DB601.DBX14.1",
                        STP = "DB601.DBX14.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW24",
                        Ph1 = "DB600.DBW26",
                        Ph2 = "DB600.DBW28",
                        State = "DB600.DBW30",
                        Alarm = "DB600.DBX32.0",
                        AlarmCode = "DB600.DBW34",
                        TaskNo = "DB600.DBD36",
                        Destination = "DB600.DBW40",
                        Ack = "DB600.DBX42.0",
                        Shape = "DB600.DBW44",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                case "Line1003":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD16",
                        ToStationNo = "DB601.DBW20",
                        EStop = "DB601.DBX22.0",
                        TaskCancel = "DB601.DBX22.1",
                        STP = "DB601.DBX22.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW46",
                        Ph1 = "DB600.DBW48",
                        Ph2 = "DB600.DBW50",
                        State = "DB600.DBW52",
                        Alarm = "DB600.DBX54.0",
                        AlarmCode = "DB600.DBW56",
                        TaskNo = "DB600.DBD58",
                        Destination = "DB600.DBW62",
                        Ack = "DB600.DBX64.0",
                        Shape = "DB600.DBW66",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                case "Line1006":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD40",
                        ToStationNo = "DB601.DBW44",
                        EStop = "DB601.DBX46.0",
                        TaskCancel = "DB601.DBX46.1",
                        STP = "DB601.DBX46.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW112",
                        Ph1 = "DB600.DBW114",
                        Ph2 = "DB600.DBW116",
                        State = "DB600.DBW118",
                        Alarm = "DB600.DBX120.0",
                        AlarmCode = "DB600.DBW122",
                        TaskNo = "DB600.DBD124",
                        Destination = "DB600.DBW128",
                        Ack = "DB600.DBX130.0",
                        Shape = "DB600.DBW132",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                #endregion
                #region 助力臂分拣2线体
                case "Line1007":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD48",
                        ToStationNo = "DB601.DBW52",
                        EStop = "DB601.DBX54.0",
                        TaskCancel = "DB601.DBX54.1",
                        STP = "DB601.DBX54.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW134",
                        Ph1 = "DB600.DBW136",
                        Ph2 = "DB600.DBW138",
                        State = "DB600.DBW140",
                        Alarm = "DB600.DBX142.0",
                        AlarmCode = "DB600.DBW144",
                        TaskNo = "DB600.DBD146",
                        Destination = "DB600.DBW150",
                        Ack = "DB600.DBX152.0",
                        Shape = "DB600.DBW154",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                case "Line1008":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD56",
                        ToStationNo = "DB601.DBW60",
                        EStop = "DB601.DBX62.0",
                        TaskCancel = "DB601.DBX62.1",
                        STP = "DB601.DBX62.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW156",
                        Ph1 = "DB600.DBW158",
                        Ph2 = "DB600.DBW160",
                        State = "DB600.DBW162",
                        Alarm = "DB600.DBX164.0",
                        AlarmCode = "DB600.DBW166",
                        TaskNo = "DB600.DBD168",
                        Destination = "DB600.DBW172",
                        Ack = "DB600.DBX174.0",
                        Shape = "DB600.DBW176",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                case "Line1012":
                    OpcWriteItems = new OpcWriteItem
                    {
                        TaskNo = "DB601.DBD88",
                        ToStationNo = "DB601.DBW92",
                        EStop = "DB601.DBX94.0",
                        TaskCancel = "DB601.DBX94.1",
                        STP = "DB601.DBX94.2",
                    };
                    OpcReadItems = new OpcReadItem
                    {
                        Mode = "DB600.DBW244",
                        Ph1 = "DB600.DBW246",
                        Ph2 = "DB600.DBW248",
                        State = "DB600.DBW250",
                        Alarm = "DB600.DBX252.0",
                        AlarmCode = "DB600.DBW254",
                        TaskNo = "DB600.DBD256",
                        Destination = "DB600.DBW260",
                        Ack = "DB600.DBX262.0",
                        Shape = "DB600.DBW264",
                        HandShake = "DB600.DBW0",
                    };
                    break;
                #endregion
            }
        }
        /// 
        /// 发送任务
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public bool SendTask(int deviceId, int taskId, string toPlace, int palltype, out string msg)
        {
            try
            {
                msg = "";
                if (!CanSendTask(deviceId, out msg))
                {
                    return false;
                }
                bool b2 = this.WriteValue(this.OpcWriteItems.ToStationNo, toPlace);
                bool b1 = this.WriteValue(this.OpcWriteItems.TaskNo, taskId);
                // bool b3 = this.WriteValue(this.OpcWriteItems.STP, 1);
                bool b4 = true;
                if (this.ConveyorName == "Line1021")
                {
                    b4 = this.WriteValue("DB601.DBW268", palltype);
                }
                if (this.ConveyorName == "Line1026")
                {
                    b4 = this.WriteValue("DB601.DBW266", palltype);
                }
                if (!(b1 && b2 && b4))
                {
                    msg = string.Format("向输送线{0}发送任务{1}失败", ConveyorName, taskId);
                    return false;
                }
                return true;
            }
            catch (Exception ex)
            {
                msg = ex.Message;
                return false;
            }
        }
        /// 
        /// 任务删除
        /// 
        /// 
        /// 
        /// 
        /// 
        public bool DeleteTask(int deviceId, out string msg)
        {
            try
            {
                msg = "";
                bool b1 = this.WriteValue(this.OpcWriteItems.TaskCancel, 1);
                if (!(b1))
                {
                    msg = string.Format("写入OPC失败", ConveyorName);
                    return false;
                }
                return true;
            }
            catch (Exception ex)
            {
                msg = ex.Message;
                LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "DeleteTask", msg);
                return false;
            }
        }
        /// 
        /// 确认任务完成
        /// 
        /// 
        /// 
        /// 
        /// 
        public bool ConfirmStp(int deviceId, out string msg)
        {
            try
            {
                msg = "";
                var flag = this.WriteValue(this.OpcWriteItems.STP, false);
                if (!flag)
                {
                    msg = string.Format("向输送线{0}发送确认任务下发成功信号失败", ConveyorName);
                    return false;
                }
                return true;
            }
            catch (Exception ex)
            {
                msg = ex.Message;
                return false;
            }
        }
        /// 
        /// 判断任务是否完成
        /// 
        /// 
        /// 
        /// 
        /// 
        public bool IsTaskFinish(int deviceId, int taskId, out string msg)
        {
            try
            {
                msg = "";
                if (this.RTaskNo == taskId)
                {
                    return this.RTaskfinish;
                }
                return false;
            }
            catch (Exception ex)
            {
                msg = ex.Message;
                return false;
            }
        }
        public bool CanSendTask(int deviceId, out string msg)
        {
            msg = "";
            if (!IsOnline)
            {
                msg = "已离线";
                return false;
            }
            if (RMode != (int)EConveyorMode.自动空闲模式)
            {
                msg = "当前非自动模式";
                return false;
            }
            if (RState != (int)EConveyorState.空闲)
            {
                msg = "设备状态非空闲,无法执行其他任务";
                return false;
            }
            return true;
        }
        public bool WriteValue(string addr, object value)
        {
            string msg = string.Empty;
            if (!string.IsNullOrEmpty(addr))
            {
                try
                {
                    if (!this.WCVS71500.IsConnected)
                    {
                        this.WCVS71500.Close();
                        Thread.Sleep(100);
                        this.WCVS71500.Open();
                    }
                    msg = this.WCVS71500.Write(addr, value).ToString();
                    if (msg != "NoError")
                    {
                        string msg1 = this.WCVS71500.Write(addr, value).ToString();
                        if (msg1 != "NoError")
                        {
                            this.WCVS71500.Close();
                            Thread.Sleep(100);
                            this.WCVS71500.Open();
                            LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), this.ConveyorName + "WriteValue" + addr, msg);
                            return false;
                        }
                        else
                        {
                            return true;
                        }
                    }
                    else
                    {
                        return true;
                    }
                }
                catch
                {
                    msg = addr + "写入失败  ";
                    LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), this.ConveyorName + "WriteValue", msg);
                    return false;
                }
            }
            else
            {
                msg = addr + "写入失败  ";
                LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), this.ConveyorName + "WriteValue", msg);
                return false;
            }
        }
        public object ReadValuePoint(string add)
        {
            try
            {
                if (!this.WCVS71500.IsConnected)
                {
                    this.WCVS71500.Close();
                    Thread.Sleep(100);
                    this.WCVS71500.Open();
                }
                object MyPlcData = this.WCVS71500.Read(add);
                if (MyPlcData.ToString() == "WrongVarFormat" || MyPlcData.ToString() == "10")
                {
                    MyPlcData = this.WCVS71500.Read(add);
                    if (MyPlcData.ToString() == "WrongVarFormat" || MyPlcData.ToString() == "10")
                    {
                        MyPlcData = this.WCVS71500.Read(add);
                    }
                }
                return MyPlcData;
            }
            catch (Exception ex)
            {
                LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), this.ConveyorName + "ReadValuePoint", ex.Message);
                return 0;
            }
        }
    }
}