Esempio n. 1
0
        public bool SetMultipleMArea(int Addr, int count, int[] value, string Area)
        {
            if (Status == 0)
            {
                bool[] uvalue;

                uvalue = Array.ConvertAll <int, bool>(value, s => { if (s > 0)
                                                                    {
                                                                        return(true);
                                                                    }
                                                                    else
                                                                    {
                                                                        return(false);
                                                                    } });

                try
                {
                    master.WriteSingleCoil((byte)Constant.DefaultUnitId,
                                           (ushort)XJPLCPackCmdAndDataUnpack.AreaGetFromStr(Addr, Area),
                                           uvalue[0]);
                    ConstantMethod.Delay(100);
                }
                catch (Exception ex)
                {
                }

                return(true);
            }
            else
            {
                return(false);
            }
        }
Esempio n. 2
0
        //一行中获取地址和区域 /根据一行的数据 返回固定的 plc单元格参数 这个函数 是返回绝对地址的
        private bool  getAddrAndArea(DataRow row, ref int mAddr, ref int mArea, ref string DSmode)
        {
            DSmode = row["mode"].ToString().Trim();

            string area     = "";///地址区域
            string valueStr = row["addr"].ToString().Trim();
            int    count    = 0;

            ConstantMethod.getAddrAndAreaByStr(valueStr, ref mAddr, ref area, DeviceId);

            //地址超了 无效 暂且定XDM 最大69999
            if ((mAddr < 0) || (mAddr > Constant.DTTCPMAXAddr))
            {
                return(false);
            }
            if (!int.TryParse(row["count"].ToString().Trim(), out count))
            {
                return(false);
            }
            if (DeviceId == Constant.xzjDeivceId)
            {
                mArea = XJPLCPackCmdAndDataUnpack.AreaGetFromStr(area);
                mAddr = XJPLCPackCmdAndDataUnpack.RelAbsGet(mAddr, mArea, DeviceId);
            }
            else
            {
                mArea = DTTcpCmdPackAndDataUnpack.GetIntAreaFromStr(area);

                mAddr = DTTcpCmdPackAndDataUnpack.GetAbsAddrFromStr(mAddr, area);
            }

            return(true);
        }
Esempio n. 3
0
        public static byte[] AsPlcGetAbsAddr(int addr, int addressid, int addrbytecount)
        {
            List <byte> cmdLst = new List <byte>();

            cmdLst.AddRange(BitConverter.GetBytes(XJPLCPackCmdAndDataUnpack.RelAbsGet(addr, addressid, 0)));
            cmdLst.Reverse();

            return(cmdLst.ToArray());
        }
Esempio n. 4
0
        public void DgvValueEdit(int rowIndex, int num3)
        {
            string userdata = evokDevice.DataForm.Rows[rowIndex]["addr"].ToString();
            int    addr     = 0;
            string area     = "D";
            string mode     = evokDevice.DataForm.Rows[rowIndex]["mode"].ToString();

            ConstantMethod.SplitAreaAndAddr(userdata, ref addr, ref area);
            if (((XJPLCPackCmdAndDataUnpack.AreaGetFromStr(area) > -1) && (XJPLCPackCmdAndDataUnpack.AreaGetFromStr(area) < 3)))
            {
                evokDevice.WriteSingleDData(addr, num3, area, mode);
            }
        }
Esempio n. 5
0
        public bool SetMultipleDArea(int Addr, int count, int[] value, string Area)
        {
            if (Status == 0)
            {
                ushort[] uvalue;

                uvalue = Array.ConvertAll <int, ushort>(value, s => (ushort)s);
                try
                {
                    master.WriteMultipleRegisters((byte)Constant.DefaultUnitId,
                                                  (ushort)XJPLCPackCmdAndDataUnpack.AreaGetFromStr(Addr, Area), uvalue);

                    return(true);
                }
                catch (Exception ex)
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
Esempio n. 6
0
        public void DgvInOutEdit(int rowIndex, bool editEnable)
        {
            string s        = evokDevice.DataForm.Rows[rowIndex]["param1"].ToString();
            string str2     = evokDevice.DataForm.Rows[rowIndex]["param2"].ToString();
            string userdata = evokDevice.DataForm.Rows[rowIndex]["addr"].ToString();
            string area     = "D";
            int    addr     = 0;

            ConstantMethod.SplitAreaAndAddr(userdata, ref addr, ref area);
            int result = 0;
            int num4   = 0;

            if (int.TryParse(s, out result) && int.TryParse(str2, out num4))
            {
                if (XJPLCPackCmdAndDataUnpack.AreaGetFromStr(area) < 3)
                {
                    evokDevice.DPlcInfo[result].IsInEdit = editEnable;
                }
                else
                {
                    evokDevice.MPlcInfoAll[result][num4].IsInEdit = editEnable;
                }
            }
        }
Esempio n. 7
0
        public event socDataProcess EventDataProcess;//利用委托来声明事件

        #region 数据写操作       

        public bool SetMultipleDMArea(int Addr, int count, List<byte[]> value, string Area)
        {
            if (isDeviceReady)
            {
              
                List<int> addr = new List<int>();
                List<int> addressid = new List<int>();
                List<int> count0 = new List<int>();
                int addrid = DTTcpCmdPackAndDataUnpack.GetIntAreaFromStr(Area);
                if (DeviceId == Constant.xzjDeivceId)
                {
                    addrid = XJPLCPackCmdAndDataUnpack.AreaGetFromStr(Area);
                    for (int i = 0; i < count; i++)
                    {
                        if(value.Count>0)
                        addr.Add(Addr + i*(value[0].Count()/2));
                        addressid.Add(addrid);
                        count0.Add(1);
                    }
                }
                else                          
                for (int i = 0; i < count; i++)
                {                    
                    addr.Add(Addr+i);
                    addressid.Add(addrid);
                    count0.Add(1);
                }

                SetDMCmdOut.Clear();
                SetDMCmdIn.Clear();
                if (DeviceId == Constant.xzjDeivceId)
                {
                    if (addrid < Constant.HSD_ID)
                        SetDMCmdOut.AddRange(DTTcpCmdPackAndDataUnpack.AsPlcPackWriteByteCmd(addr.ToArray(), addressid.ToArray(), count0.ToArray(), value, SetDMCmdIn));
                    else
                        SetDMCmdOut.AddRange(DTTcpCmdPackAndDataUnpack.AsPlcPackWriteBitCmd(addr.ToArray(), addressid.ToArray(), count0.ToArray(), value, SetDMCmdIn));

                }
                else
                {
                    if (addrid > Constant.MXAddrId)
                        SetDMCmdOut.AddRange(DTTcpCmdPackAndDataUnpack.PackWriteByteCmd(addr.ToArray(), addressid.ToArray(), count0.ToArray(), value, SetDMCmdIn));
                    else
                        SetDMCmdOut.AddRange(DTTcpCmdPackAndDataUnpack.PackWriteBitCmd(addr.ToArray(), addressid.ToArray(), count0.ToArray(), value, SetDMCmdIn));
                }
                ConstantMethod.Delay(200); //延时一下 防止数据发太快 监控上看不到
                //防止前面在写数据 
                while (isWriteCmd)
                {
                    Application.DoEvents();
                }

                isWriteCmd = true;
               
                ConstantMethod.DelayWriteCmd(Constant.WriteCommTimeOut, ref isWriteCmd);

                return (!isWriteCmd);
            }
            return false;

        }