Esempio n. 1
0
        /// <summary>
        /// 分配设备的DB1,DB2地址区
        /// </summary>
        /// <returns></returns>
        protected bool AllocDevDBAddr()
        {
            try
            {
                if (devModel != null)
                {
                    //配置DB1
                    AllocDevComAddrsDB1();

                    //配置DB2
                    AllocDevComAddrsDB2();

                    for (int i = 0; i < dicCommuDataDB1.Count(); i++)
                    {
                        int             commuID = i + 1;
                        DevCommDatatype commObj = dicCommuDataDB1[commuID];
                        if (commObj == null)
                        {
                            continue;
                        }

                        dicDataDB1Last[commObj.CommuID] = commObj.Val;
                    }
                    if (dicCommuDataDB2.Count() > 0)
                    {
                        foreach (KeyValuePair <int, DevCommDatatype> keyVal in dicCommuDataDB2)
                        {
                            if (keyVal.Value == null)
                            {
                                continue;
                            }
                            DevCommDatatype commObj = keyVal.Value;
                            dicDataDB2Last[commObj.CommuID] = commObj.Val;
                        }
                    }
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (System.Exception ex)
            {
                //触发错误日志,2004
                int    errorCode = 2004;
                string reStr     = "";
                if (!ECAMWCS.GetErrorContent(errorCode, ref reStr))
                {
                    AddLog("配置设备" + this.devModel.DeviceID + " 出现异常," + ex.Message + "," + ex.StackTrace, EnumLogType.错误);
                }
                else
                {
                    reStr  = "设备:" + this.devModel.DeviceID + reStr;
                    reStr += (ex.Message + "," + ex.StackTrace);
                    OnErrorHappen(errorCode, reStr, true);
                }
                return(false);
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 分配DB1通信地址
        /// </summary>
        /// <returns></returns>
        protected virtual void AllocDevComAddrsDB1()
        {
            dicCommuDataDB1.Clear();

            int             db1ID        = 1;
            int             plcAddrStart = int.Parse(this.devModel.DB1AddrStart.Substring(1));
            string          dbName       = "D";
            DevCommDatatype commData     = null;

            //1.配置“开始写入”功能项
            commData                 = new DevCommDatatype();
            commData.CommuID         = db1ID++;
            commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
            commData.DataByteLen     = 2;
            commData.DataDescription = "2:开始写入,1:未开始写入";
            commData.DataTypeDef     = EnumCommuDataType.DEVCOM_short;
            commData.Val             = 0;
            commData.DataAddr        = dbName + plcAddrStart.ToString();//取值为:S7:[Connection_1]DB1,INT,数据类型可变,马天牧
            plcAddrStart++;
            dicCommuDataDB1[commData.CommuID] = commData;

            //2.配置“写入完成”功能项
            commData                 = new DevCommDatatype();
            commData.CommuID         = db1ID++;
            commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
            commData.DataByteLen     = 2;
            commData.DataDescription = "2:参数写入完成,1:未完成";
            commData.DataTypeDef     = EnumCommuDataType.DEVCOM_short;
            commData.Val             = 0;
            commData.DataAddr        = dbName + plcAddrStart.ToString();
            plcAddrStart++;
            dicCommuDataDB1[commData.CommuID] = commData;

            //3.配置"任务完成接收”功能项
            commData                 = new DevCommDatatype();
            commData.CommuID         = db1ID++;
            commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
            commData.DataByteLen     = 2;
            commData.DataDescription = "2:任务完成信息成功接收,1:未接收";
            commData.DataTypeDef     = EnumCommuDataType.DEVCOM_short;
            commData.Val             = 0;
            commData.DataAddr        = dbName + plcAddrStart.ToString();
            plcAddrStart++;
            dicCommuDataDB1[commData.CommuID] = commData;

            //4.配置“任务类型号”功能项
            commData                 = new DevCommDatatype();
            commData.CommuID         = db1ID++;
            commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
            commData.DataByteLen     = 2;
            commData.DataDescription = "任务类型号,1:装箱组盘,2:一次分拣,3:二次分拣,5:A1库电芯入库" +
                                       "6:A1库分容后再入库,7:A1库分容出库,8:A1库出库至一次检测" +
                                       "9:B1库入库,10:B1库出库至二次检测,11:B1库空料框入库,12:B1库空料框出库";
            commData.DataTypeDef = EnumCommuDataType.DEVCOM_short;
            commData.Val         = 0;
            commData.DataAddr    = dbName + plcAddrStart.ToString();
            plcAddrStart++;
            dicCommuDataDB1[commData.CommuID] = commData;
        }
Esempio n. 3
0
 public void SaveLastLoopData()
 {
     //上拍数据初始化成和当前值相同
     foreach (KeyValuePair <int, DevCommDatatype> keyVal in dicCommuDataDB2)
     {
         if (keyVal.Value == null)
         {
             continue;
         }
         DevCommDatatype commObj = keyVal.Value;
         dicDataDB2Last[commObj.CommuID] = commObj.Val;
     }
 }
Esempio n. 4
0
        public bool SetDB2ItemValue(int itemID, string valStr)
        {
            if (!dicCommuDataDB2.Keys.Contains(itemID))
            {
                return(false);
            }
            DevCommDatatype commObj = dicCommuDataDB2[itemID];

            if (commObj == null)
            {
                return(false);
            }
            commObj.Val = valStr;
            return(true);
        }
Esempio n. 5
0
 /// <summary>
 /// 如有更新,设备指令发送,写入DB1
 /// </summary>
 /// <returns></returns>
 public bool DevCmdCommit()
 {
     if (plcRW == null)
     {
         return(false);
     }
     //把变量转换成通信数据
     lock (lockDB1)
     {
         //把变量转换成通信数据
         if (this.devModel.DeviceID == "1001")
         {
             plcRW.StationNumber = 0x01;
         }
         else if (this.devModel.DeviceID == "1002")
         {
             plcRW.StationNumber = 0x02;
         }
         CmdToCommuDataDB1();
         foreach (KeyValuePair <int, DevCommDatatype> keyVal in dicCommuDataDB1)
         {
             if (keyVal.Value == null)
             {
                 continue;
             }
             DevCommDatatype commObj = keyVal.Value;
             // if (commObj.Val.ToString() != dicDB1Read[commObj.CommuID].ToString())
             if (commObj.Val.ToString() != dicDataDB1Last[commObj.CommuID].ToString())
             {
                 int val = int.Parse(commObj.Val.ToString());
                 if (!plcRW.WriteDB(commObj.DataAddr, val))
                 {
                     AddLog(devName + "发送命令数据失败,通信可能中断", EnumLogType.错误);
                     return(false);
                 }
                 dicDataDB1Last[commObj.CommuID] = commObj.Val;
             }
         }
     }
     return(true);
 }
Esempio n. 6
0
        //public IList<string> GetDB1Data()
        //{
        //    IList<string> commDataList = new List<string>();
        //    commDataList.Add(plcDataDb1[0].ToString());
        //    commDataList.Add(startWriteParam.ToString());
        //    commDataList.Add(writeCompleted.ToString());
        //    commDataList.Add(taskCompletedReq.ToString());
        //    commDataList.Add(taskTypeSnd.ToString());
        //    commDataList.Add(taskCodeSnd.ToString());
        //    for (int i = 7; i < devModel.BytesLenDB1; i++)
        //    {
        //        commDataList.Add(plcDataDb1[i].ToString());
        //    }
        //    return commDataList;
        //}
        //public IList<string> GetDB2Data()
        //{
        //    IList<string> commDataList = new List<string>();
        //    commDataList.Add(plcDataDb2[0].ToString());
        //    commDataList.Add(devRunningStatus.ToString());
        //    commDataList.Add(recvTaskEnable.ToString());
        //    commDataList.Add(paramRecvOK.ToString());
        //    commDataList.Add(taskCompleted.ToString());
        //    commDataList.Add(taskCodeBack.ToString());
        //    for (int i = 7; i < plcDataDb2.Count(); i++)
        //    {
        //        commDataList.Add(plcDataDb2[i].ToString());
        //    }
        //    return commDataList;
        //}
        public DataTable GetDB1DataDetail()
        {
            DataTable dt = new DataTable();

            dt.Columns.Add("索引");
            dt.Columns.Add("地址");
            dt.Columns.Add("内容");
            dt.Columns.Add("描述");
            int index = 1;

            // lock (lockDB1)
            {
                for (int i = 0; i < dicCommuDataDB1.Count(); i++)
                {
                    DevCommDatatype commObj = dicCommuDataDB1[i + 1];
                    dt.Rows.Add(index++, commObj.DataAddr, commObj.Val, commObj.DataDescription);
                }
            }

            return(dt);
        }
Esempio n. 7
0
        protected override void AllocDevComAddrsDB1()
        {
            int             db1ID        = 1;
            int             plcAddrStart = int.Parse(this.devModel.DB1AddrStart.Substring(1));
            string          dbName       = "D";
            DevCommDatatype commData     = null;

            if (devModel.DeviceID == "2002" || devModel.DeviceID == "2004" || devModel.DeviceID == "2006")
            {
                //1.配置“开始写入”功能项
                commData                 = new DevCommDatatype();
                commData.CommuID         = db1ID++;
                commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
                commData.DataByteLen     = 2;
                commData.DataDescription = "2:前后两筐同一个批次,1:不是同一批次";
                commData.DataTypeDef     = EnumCommuDataType.DEVCOM_short;
                commData.Val             = 0;
                commData.DataAddr        = dbName + plcAddrStart.ToString();//取值为:S7:[Connection_1]DB1,INT,数据类型可变,马天牧
                plcAddrStart++;
                dicCommuDataDB1[commData.CommuID] = commData;

                commData                 = new DevCommDatatype();
                commData.CommuID         = db1ID++;
                commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
                commData.DataByteLen     = 2;
                commData.DataDescription = "扫码状态,1:未完成,2:扫码完成,3: 扫码失败,4: 不可识别的托盘," +
                                           "5:批次信息不存在,6: 托盘电芯为空,7: 托盘ID重复读取,入口缓存已存在同样托盘ID,8:国轩数据库已经存在同样的托盘ID";
                commData.DataTypeDef = EnumCommuDataType.DEVCOM_short;
                commData.Val         = 0;
                commData.DataAddr    = dbName + plcAddrStart.ToString();//取值为:S7:[Connection_1]DB1,INT,数据类型可变,马天牧
                plcAddrStart++;
                dicCommuDataDB1[commData.CommuID] = commData;

                commData                 = new DevCommDatatype();
                commData.CommuID         = db1ID++;
                commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
                commData.DataByteLen     = 2;
                commData.DataDescription = "入库请求,1:复位2:入库请求,3:入口处缓存为空,请人工处理";
                commData.DataTypeDef     = EnumCommuDataType.DEVCOM_short;
                commData.Val             = 0;
                commData.DataAddr        = dbName + plcAddrStart.ToString();//取值为:S7:[Connection_1]DB1,INT,数据类型可变,马天牧
                plcAddrStart++;
                dicCommuDataDB1[commData.CommuID] = commData;
            }
            if (devModel.DeviceID == "2005" || devModel.DeviceID == "2007")
            {
                //1.配置“开始写入”功能项
                commData                 = new DevCommDatatype();
                commData.CommuID         = db1ID++;
                commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
                commData.DataByteLen     = 2;
                commData.DataDescription = "OCV检测区读卡,1:未完成,2:扫码完成,3: 扫码失败,4: 不可识别的托盘(数据库中不存在)";
                commData.DataTypeDef     = EnumCommuDataType.DEVCOM_short;
                commData.Val             = 0;
                commData.DataAddr        = dbName + plcAddrStart.ToString();//取值为:S7:[Connection_1]DB1,INT,数据类型可变,马天牧
                plcAddrStart++;
                dicCommuDataDB1[commData.CommuID] = commData;
            }
            else if (devModel.DeviceID == "2008")
            {
                commData                 = new DevCommDatatype();
                commData.CommuID         = db1ID++;
                commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
                commData.DataByteLen     = 2;
                commData.DataDescription = "入库请求,1:复位2:入库请求";
                commData.DataTypeDef     = EnumCommuDataType.DEVCOM_short;
                commData.Val             = 0;
                commData.DataAddr        = dbName + plcAddrStart.ToString();//取值为:S7:[Connection_1]DB1,INT,数据类型可变,马天牧
                plcAddrStart++;
                dicCommuDataDB1[commData.CommuID] = commData;
            }
            return;
        }
Esempio n. 8
0
        protected override void AllocDevComAddrsDB2()
        {
            if (devModel.DeviceID == "2003" || devModel.DeviceID == "2005" || devModel.DeviceID == "2007" || devModel.DeviceID == "2009")
            {
                int             db2ID        = 1;
                int             plcAddrStart = int.Parse(this.devModel.DB2AddrStart.Substring(1));
                string          dbName       = "D";
                DevCommDatatype commData     = null;
                //1 配置故障码
                commData                 = new DevCommDatatype();
                commData.CommuID         = db2ID++;
                commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
                commData.DataByteLen     = 2;
                commData.DataDescription = "1:禁止出库2:允许出库";
                commData.DataTypeDef     = EnumCommuDataType.DEVCOM_short;
                commData.Val             = 0;
                commData.DataAddr        = dbName + plcAddrStart.ToString();
                plcAddrStart++;
                dicCommuDataDB2[commData.CommuID] = commData;
                if (devModel.DeviceID == "2005" || devModel.DeviceID == "2007")
                {
                    commData                 = new DevCommDatatype();
                    commData.CommuID         = db2ID++;
                    commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
                    commData.DataByteLen     = 2;
                    commData.DataDescription = "2:OCV检测读卡完成,1:未完成";
                    commData.DataTypeDef     = EnumCommuDataType.DEVCOM_short;
                    commData.Val             = 0;
                    commData.DataAddr        = dbName + plcAddrStart.ToString();
                    plcAddrStart++;
                    dicCommuDataDB2[commData.CommuID] = commData;
                }
            }
            else
            {
                int             db2ID        = 1;
                int             plcAddrStart = int.Parse(this.devModel.DB2AddrStart.Substring(1));
                string          dbName       = "D";
                DevCommDatatype commData     = null;
                //1 配置故障码
                commData                 = new DevCommDatatype();
                commData.CommuID         = db2ID++;
                commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
                commData.DataByteLen     = 2;
                commData.DataDescription = "2:入库请求,1:无入库请求";
                commData.DataTypeDef     = EnumCommuDataType.DEVCOM_short;
                commData.Val             = 0;
                commData.DataAddr        = dbName + plcAddrStart.ToString();
                plcAddrStart++;
                dicCommuDataDB2[commData.CommuID] = commData;

                commData                 = new DevCommDatatype();
                commData.CommuID         = db2ID++;
                commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
                commData.DataByteLen     = 2;
                commData.DataDescription = "入口料框数量";
                commData.DataTypeDef     = EnumCommuDataType.DEVCOM_short;
                commData.Val             = 0;
                commData.DataAddr        = dbName + plcAddrStart.ToString();
                plcAddrStart++;
                dicCommuDataDB2[commData.CommuID] = commData;

                commData                 = new DevCommDatatype();
                commData.CommuID         = db2ID++;
                commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
                commData.DataByteLen     = 2;
                commData.DataDescription = "2:料框扫码请求,1:无请求";
                commData.DataTypeDef     = EnumCommuDataType.DEVCOM_short;
                commData.Val             = 0;
                commData.DataAddr        = dbName + plcAddrStart.ToString();
                plcAddrStart++;
                dicCommuDataDB2[commData.CommuID] = commData;

                commData                 = new DevCommDatatype();
                commData.CommuID         = db2ID++;
                commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
                commData.DataByteLen     = 2;
                commData.DataDescription = "2:收到成功扫码信息,1:没有收到(或已复位)";
                commData.DataTypeDef     = EnumCommuDataType.DEVCOM_short;
                commData.Val             = 0;
                commData.DataAddr        = dbName + plcAddrStart.ToString();
                plcAddrStart++;
                dicCommuDataDB2[commData.CommuID] = commData;
            }
            return;
        }
Esempio n. 9
0
        //public string[] AddrDB1
        //{
        //    get
        //    {
        //        return plcAddrDb1;
        //    }
        //    set
        //    {
        //        plcAddrDb1 = value;
        //    }
        //}
        //public string[] AddrDB2
        //{
        //    get
        //    {
        //        return plcAddrDb2;
        //    }
        //    set
        //    {
        //        plcAddrDb2 = value;
        //    }
        //}
        //public byte[] DB1
        //{
        //    get
        //    {
        //        return plcDataDb1;
        //    }
        //    private set { }
        //}
        //public byte[] DB2
        //{
        //    get
        //    {
        //        return plcDataDb2;
        //    }
        //    private set { }
        //}
        #endregion
        #region 公共方法

        public bool Init()
        {
            string reStr = "";

            //分配地址
            if (!AllocDevDBAddr())
            {
                return(false);
            }
            //系统启动后,先把DB1数据读上来
            if (this.devModel.DeviceID == "1001")
            {
                plcRW.StationNumber = 0x01;
            }
            else if (this.devModel.DeviceID == "1002")
            {
                plcRW.StationNumber = 0x02;
            }

            short[] db1Vals = null;
            if (dicCommuDataDB1.Count() > 0)
            {
                if (!plcRW.ReadMultiDB(devModel.DB1AddrStart, dicCommuDataDB1.Count(), ref db1Vals))
                {
                    AddLog("恢复设备命令失败", EnumLogType.错误);
                    return(false);
                }
                for (int i = 0; i < dicCommuDataDB1.Count(); i++)
                {
                    int             commuID = i + 1;
                    DevCommDatatype commObj = dicCommuDataDB1[commuID];
                    if (commObj == null)
                    {
                        continue;
                    }
                    commObj.Val = db1Vals[i];
                    dicDataDB1Last[commObj.CommuID] = commObj.Val;
                }
            }
            if (this.devModel.DeviceType == EnumDevType.堆垛机.ToString() || this.devModel.DeviceType == EnumDevType.机械手.ToString())
            {
                byte val = byte.Parse(this.dicCommuDataDB1[1].Val.ToString());
                if (val == 2)
                {
                    startWriteParam = true;
                }
                else
                {
                    startWriteParam = false;
                }
                val = byte.Parse(this.dicCommuDataDB1[2].Val.ToString());
                if (val == 2)
                {
                    writeCompleted = true;
                }
                else
                {
                    writeCompleted = false;
                }
                val = byte.Parse(this.dicCommuDataDB1[3].Val.ToString());

                taskCompletedReq = val;

                taskTypeSnd = int.Parse(this.dicCommuDataDB1[4].Val.ToString());
            }

            if (!ReadDB2())
            {
                AddLog(devName + " 读取设备状态数据失败", EnumLogType.错误);
                return(false);
            }
            //上拍数据初始化成和当前值相同
            if (dicCommuDataDB2.Count() > 0)
            {
                foreach (KeyValuePair <int, DevCommDatatype> keyVal in dicCommuDataDB2)
                {
                    if (keyVal.Value == null)
                    {
                        continue;
                    }
                    DevCommDatatype commObj = keyVal.Value;
                    dicDataDB2Last[commObj.CommuID] = commObj.Val;
                }
            }

            if (!DevStatusRestore(ref reStr))
            {
                string errStr  = "";
                int    errCode = 2105;
                if (!ECAMWCS.GetErrorContent(errCode, ref errStr))
                {
                    AddLog(devName + " 恢复状态出现错误", EnumLogType.错误);
                }
                else
                {
                    errStr = devName + reStr;
                    OnErrorHappen(errCode, errStr, false);
                }
                return(false);
            }
            return(true);
        }
Esempio n. 10
0
        protected virtual void AllocDevComAddrsDB2()
        {
            dicCommuDataDB2.Clear();
            int             db2ID        = 1;
            int             plcAddrStart = int.Parse(this.devModel.DB2AddrStart.Substring(1));
            string          dbName       = "D";
            DevCommDatatype commData     = null;

            //1 配置故障码
            commData                 = new DevCommDatatype();
            commData.CommuID         = db2ID++;
            commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
            commData.DataByteLen     = 2;
            commData.DataDescription = "设备故障码";
            commData.DataTypeDef     = EnumCommuDataType.DEVCOM_short;
            commData.Val             = 0;
            commData.DataAddr        = dbName + plcAddrStart.ToString();
            plcAddrStart++;
            dicCommuDataDB2[commData.CommuID] = commData;

            //2 配置设备状态
            commData                 = new DevCommDatatype();
            commData.CommuID         = db2ID++;
            commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
            commData.DataByteLen     = 2;
            commData.DataDescription = "设备状态,1:空闲,2:工作中,3:故障";
            commData.DataTypeDef     = EnumCommuDataType.DEVCOM_short;
            commData.DataAddr        = dbName + plcAddrStart.ToString();
            plcAddrStart++;
            dicCommuDataDB2[commData.CommuID] = commData;
            if (ECAMWCS.SimMode)
            {
                commData.Val = 1;
            }
            else
            {
                commData.Val = 0;
            }

            //3 配置允许接收
            commData                 = new DevCommDatatype();
            commData.CommuID         = db2ID++;
            commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
            commData.DataByteLen     = 2;
            commData.DataDescription = "允许接收,1:禁止接收任务,2:允许接收";
            commData.DataTypeDef     = EnumCommuDataType.DEVCOM_short;
            commData.DataAddr        = dbName + plcAddrStart.ToString();
            plcAddrStart++;
            dicCommuDataDB2[commData.CommuID] = commData;
            commData.Val = 0;

            //4 配置取数据完成
            commData                 = new DevCommDatatype();
            commData.CommuID         = db2ID++;
            commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
            commData.DataByteLen     = 2;
            commData.DataDescription = "2:取数据完成,1:未完成";
            commData.DataTypeDef     = EnumCommuDataType.DEVCOM_short;
            commData.DataAddr        = dbName + plcAddrStart.ToString();
            plcAddrStart++;
            dicCommuDataDB2[commData.CommuID] = commData;
            commData.Val = 0;

            //5 配置任务完成
            commData                 = new DevCommDatatype();
            commData.CommuID         = db2ID++;
            commData.CommuMethod     = EnumCommMethod.PLC_MIT_COMMU;
            commData.DataByteLen     = 2;
            commData.DataDescription = "1:任务未完成,2:任务完成,3:任务撤销";
            commData.DataTypeDef     = EnumCommuDataType.DEVCOM_short;
            commData.DataAddr        = dbName + plcAddrStart.ToString();
            plcAddrStart++;
            dicCommuDataDB2[commData.CommuID] = commData;
            commData.Val = 0;
        }