コード例 #1
0
        /// <summary>
        /// 读取M点状态,按字读取
        /// </summary>
        /// <param name="StartPoint">int,M点</param>
        /// <param name="len">int,读取M点字数,如值为1,则读8个M点,值为2,则读16个M点</param>
        /// <param name="ReadValue">int,读取M点所在字长度内的状态</param>
        /// <returns>bool,操作是否成功</returns>
        public bool FxPlc_ReadM(int StartPoint, int len, out UInt32 ReadValue)
        {
            byte[]   WriteBuff  = new byte[11]; //发送数据
            byte[]   ReadBuff   = new byte[20]; //接收数据
            int      ReturnByte = 0;            //返回数据
            bool     IsReturn   = false;        //是否成功返回
            bool     IsTimeOut  = false;        //是否超时
            DateTime NowTime;                   //当前时间
            TimeSpan ts;                        //时间差

            ReadValue = 0;
            len       = Math.Min(len, 4);
            byte CrcHi = 0, CrcLo = 0;//CRC校验

            if (cMain.isDebug)
            {
                ReadValue = 0;
                return(true);
            }
            if (!mFXPLCIsInit)//没有初始化
            {
                FxPlcInit();
                return(false);
            }
            try
            {
                StartPoint   = StartPoint / 8;
                WriteBuff[0] = 0x02;
                WriteBuff[1] = 0x30;
                WriteBuff[2] = 0x30;
                WriteBuff[3] = 0x31;
                WriteBuff[4] = Encoding.ASCII.GetBytes(string.Format("{0:X1}", (int)(StartPoint / 16) & 0x0F))[0];
                WriteBuff[5] = Encoding.ASCII.GetBytes(string.Format("{0:X1}", (int)(StartPoint / 1) & 0x0F))[0];
                WriteBuff[6] = Encoding.ASCII.GetBytes(string.Format("{0:X2}", len))[0];
                WriteBuff[7] = Encoding.ASCII.GetBytes(string.Format("{0:X2}", len))[1];
                WriteBuff[8] = 0x03;
                FxPlcCrc(WriteBuff, out CrcLo, out CrcHi);
                WriteBuff[9]  = CrcLo;
                WriteBuff[10] = CrcHi;
                if (!comPort.IsOpen)
                {
                    comPort.Open();
                }
                comPort.DiscardInBuffer();//刷新串口
                comPort.Write(WriteBuff, 0, 11);
                NowTime = DateTime.Now;
                do
                {
                    Threading.Thread.Sleep(50);
                    if (comPort.BytesToRead >= (4 + len * 2))//收到数据
                    {
                        ReturnByte = comPort.BytesToRead;
                        IsReturn   = true;
                    }
                    ts = DateTime.Now - NowTime;
                    if (ts.TotalMilliseconds > timeOut)//时间超时
                    {
                        IsTimeOut = true;
                    }
                } while (!IsReturn && !IsTimeOut);
                if (!IsReturn && IsTimeOut)//超时
                {
                    if (ErrStr.IndexOf("接收数据已超时") < 0)
                    {
                        ErrStr = ErrStr + DateTime.Now.ToString() + ",FxPlc_ReadM," + ":读取失败,接收数据已超时" + (char)13 + (char)10;
                    }
                    return(false);
                }
                comPort.Read(ReadBuff, 0, ReturnByte);
                ReadValue = Convert.ToUInt32(Encoding.ASCII.GetString(ReadBuff, 1, 2 * len), 16);
            }
            catch (Exception exc)
            {
                if (ErrStr.IndexOf(exc.ToString()) < 0)
                {
                    ErrStr = ErrStr + DateTime.Now.ToString() + ",FxPlc_ReadM," + ":" + exc.ToString() + (char)13 + (char)10;
                }
                return(false);
            }
            return(true);
        }
コード例 #2
0
        /// <summary>
        /// 写入M点状态
        /// </summary>
        /// <param name="StartPoint">int,M点</param>
        /// <param name="Value">bool,写入M点值</param>
        /// <returns>bool,操作是否成功</returns>
        public bool FxPlc_WriteM(int StartPoint, bool Value)
        {
            byte[]   WriteBuff  = new byte[15]; //发送数据
            byte[]   ReadBuff   = new byte[20]; //接收数据
            int      ReturnByte = 0;            //返回数据
            bool     IsReturn   = false;        //是否成功返回
            bool     IsTimeOut  = false;        //是否超时
            DateTime NowTime;                   //当前时间
            TimeSpan ts;                        //时间差
            byte     CrcHi = 0, CrcLo = 0;      //CRC校验
            int      tempAddress = 0x800 + StartPoint;

            byte[] Address = Encoding.ASCII.GetBytes(string.Format("{0:X4}", tempAddress));
            if (cMain.isDebug)
            {
                Value = false;
                return(true);
            }
            if (!mFXPLCIsInit)//没有初始化
            {
                FxPlcInit();
                return(false);
            }
            try
            {
                WriteBuff[0] = 0x02;
                WriteBuff[1] = (byte)(Value ? 0x37 : 0x38);
                WriteBuff[2] = Address[2];
                WriteBuff[3] = Address[3];
                WriteBuff[4] = Address[0];
                WriteBuff[5] = Address[1];
                WriteBuff[6] = 0x03;
                FxPlcCrc(WriteBuff, out CrcLo, out CrcHi);
                WriteBuff[7] = CrcLo;
                WriteBuff[8] = CrcHi;
                if (!comPort.IsOpen)
                {
                    comPort.Open();
                }
                comPort.DiscardInBuffer();//刷新串口
                comPort.Write(WriteBuff, 0, 9);
                NowTime = DateTime.Now;
                do
                {
                    Threading.Thread.Sleep(20);
                    if (comPort.BytesToRead >= 1)//收到数据
                    {
                        ReturnByte = comPort.BytesToRead;
                        IsReturn   = true;
                    }
                    ts = DateTime.Now - NowTime;
                    if (ts.TotalMilliseconds > timeOut)//时间超时
                    {
                        IsTimeOut = true;
                    }
                } while (!IsReturn && !IsTimeOut);
                if (!IsReturn && IsTimeOut)//超时
                {
                    if (ErrStr.IndexOf("接收数据已超时") < 0)
                    {
                        ErrStr = ErrStr + DateTime.Now.ToString() + ",FxPlc_WriteD," + ":写入失败,接收数据已超时" + (char)13 + (char)10;
                    }
                    return(false);
                }
                comPort.Read(ReadBuff, 0, ReturnByte);
                if (ReadBuff[0] != 06)
                {
                    if (ErrStr.IndexOf("写入数据失败") < 0)
                    {
                        ErrStr = ErrStr + DateTime.Now.ToString() + ",FxPlc_WriteD," + ":写入失败,写入数据失败" + (char)13 + (char)10;
                    }
                    return(false);
                }
            }
            catch (Exception exc)
            {
                if (ErrStr.IndexOf(exc.ToString()) < 0)
                {
                    ErrStr = ErrStr + DateTime.Now.ToString() + ",FxPlc_WriteD," + ":" + exc.ToString() + (char)13 + (char)10;
                }
                return(false);
            }
            return(true);
        }
コード例 #3
0
        public bool Set(int Vol, int Hz, int Group)
        {
            if (cMain.isDebug)
            {
                return(true);
            }
            if (!mAiNuoIsInit)
            {
                Init();
                return(false);
            }
            bool isReadOk = false;
            int  ReadVol, ReadHz, ReadGroup;

            byte[]   WriteBuff  = new byte[29]; //发送数据
            byte[]   ReadBuff   = new byte[20]; //接收数据
            int      ReturnByte = 0;            //返回数据
            bool     IsReturn   = false;        //是否成功返回
            bool     IsTimeOut  = false;        //是否超时
            DateTime NowTime    = DateTime.Now; //当前时间
            string   WriteVolStr;
            string   WriteHzStr;
            TimeSpan ts;//时间差

            try
            {
                if (!comPort.IsOpen)
                {
                    comPort.Open();
                }
                WriteVolStr  = string.Format("{0:D3}", Vol);
                WriteHzStr   = string.Format("{0:D4}", Hz * 10);
                WriteBuff[0] = 0x7B;// Encoding.ASCII.GetBytes(new char[] { '@' });
                WriteBuff[1] = 0x1A;
                WriteBuff[2] = (byte)((AiNuoAddress & 0xFF00) >> 8);
                WriteBuff[3] = (byte)(AiNuoAddress & 0xFF);
                WriteBuff[4] = 0x53;
                WriteBuff[5] = 0x4E;
                WriteBuff[6] = 0x4F;
                WriteBuff[7] = 0x3D;

                WriteBuff[8]  = Encoding.ASCII.GetBytes(WriteVolStr)[0];//电压
                WriteBuff[9]  = Encoding.ASCII.GetBytes(WriteVolStr)[1];
                WriteBuff[10] = Encoding.ASCII.GetBytes(WriteVolStr)[2];

                WriteBuff[11] = 0x2C;

                WriteBuff[12] = Encoding.ASCII.GetBytes(WriteHzStr)[0];//频率
                WriteBuff[13] = Encoding.ASCII.GetBytes(WriteHzStr)[1];
                WriteBuff[14] = Encoding.ASCII.GetBytes(WriteHzStr)[2];
                WriteBuff[15] = Encoding.ASCII.GetBytes(WriteHzStr)[3];


                WriteBuff[16] = 0x2C;

                WriteBuff[17] = 0x33;//上浮
                WriteBuff[18] = 0x30;

                WriteBuff[19] = 0x2C;

                WriteBuff[20] = 0x33;//下浮
                WriteBuff[21] = 0x30;

                WriteBuff[22] = 0x2C;

                WriteBuff[23] = Encoding.ASCII.GetBytes(Group.ToString("D1"))[0];//组别

                WriteBuff[24] = 0x2C;

                WriteBuff[25] = 0x30;//高档不锁定

                WriteBuff[26] = 0x2A;

                WriteBuff[27] = Sum_DianYuan(WriteBuff, 1, 26);
                WriteBuff[28] = 0x7D;
                comPort.DiscardInBuffer();
                comPort.Write(WriteBuff, 0, 29);
                NowTime = DateTime.Now;
                do
                {
                    //System.Windows.Forms.Application.DoEvents();
                    Threading.Thread.Sleep(20);
                    if (comPort.BytesToRead >= 13)//收到数据
                    {
                        ReturnByte = comPort.BytesToRead;
                        IsReturn   = true;
                    }
                    ts = DateTime.Now - NowTime;
                    if (ts.TotalMilliseconds > timeOut)//时间超时
                    {
                        IsTimeOut = true;
                    }
                } while (!IsReturn && !IsTimeOut);
                if (!IsReturn && IsTimeOut)//超时
                {
                    if (ErrStr.IndexOf("接收数据已超时") < 0)
                    {
                        ErrStr = ErrStr + DateTime.Now.ToString() + mName + ",init," + "初始失败,接收数据已超时" + (char)13 + (char)10;
                    }
                    return(false);
                }
                else
                {
                    comPort.Read(ReadBuff, 0, ReturnByte);
                    //string a = Encoding.ASCII.GetString(ReadBuff);
                    if ((ReadBuff[0] != WriteBuff[0]) || (ReadBuff[4] != 0x53) || (ReadBuff[7] != 0x3D) || (ReadBuff[8] != 0x3D))//数据检验失败
                    {
                        if (ErrStr.IndexOf("接收数据错误") < 0)
                        {
                            ErrStr = ErrStr + DateTime.Now.ToString() + mName + ",init," + ":初始失败,接收数据错误" + (char)13 + (char)10;
                        }
                        return(false);
                    }
                }
            }
            catch (Exception exc)
            {
                if (ErrStr.IndexOf(exc.ToString()) < 0)
                {
                    ErrStr = ErrStr + DateTime.Now.ToString() + mName + ",init," + ":" + exc.ToString() + (char)13 + (char)10;
                }
                return(false);
            }
            Threading.Thread.Sleep(300);
            isReadOk = Read(out ReadVol, out ReadHz, out ReadGroup);
            if ((ReadVol != Vol) || (ReadHz != Hz) || (ReadGroup != Group))
            {
                isReadOk = false;
            }
            return(isReadOk);
        }
コード例 #4
0
        public bool Stop()
        {
            if (cMain.isDebug)
            {
                return(true);
            }
            if (!mAiNuoIsInit)
            {
                Init();
                return(false);
            }
            byte[]   WriteBuff  = new byte[10]; //发送数据
            byte[]   ReadBuff   = new byte[20]; //接收数据
            int      ReturnByte = 0;            //返回数据
            bool     IsReturn   = false;        //是否成功返回
            bool     IsTimeOut  = false;        //是否超时
            DateTime NowTime    = DateTime.Now; //当前时间
            TimeSpan ts;                        //时间差

            try
            {
                if (!comPort.IsOpen)
                {
                    comPort.Open();
                }
                WriteBuff[0] = 0x7B;// Encoding.ASCII.GetBytes(new char[] { '@' });
                WriteBuff[1] = 0x07;
                WriteBuff[2] = (byte)((AiNuoAddress & 0xFF00) >> 8);
                WriteBuff[3] = (byte)(AiNuoAddress & 0xFF);
                WriteBuff[4] = 0x43;
                WriteBuff[5] = 0x53;
                WriteBuff[6] = 0x50;
                WriteBuff[7] = 0x2A;
                WriteBuff[8] = Sum_DianYuan(WriteBuff, 1, 7);
                WriteBuff[9] = 0x7D;
                //string a = Encoding.ASCII.GetString(WriteBuff);
                comPort.DiscardInBuffer();
                comPort.Write(WriteBuff, 0, 10);
                NowTime = DateTime.Now;
                do
                {
                    //System.Windows.Forms.Application.DoEvents();
                    Threading.Thread.Sleep(20);
                    if (comPort.BytesToRead >= 13)//收到数据
                    {
                        ReturnByte = comPort.BytesToRead;
                        IsReturn   = true;
                    }
                    ts = DateTime.Now - NowTime;
                    if (ts.TotalMilliseconds > timeOut)//时间超时
                    {
                        IsTimeOut = true;
                    }
                } while (!IsReturn && !IsTimeOut);
                if (!IsReturn && IsTimeOut)//超时
                {
                    if (ErrStr.IndexOf("接收数据已超时") < 0)
                    {
                        ErrStr = ErrStr + DateTime.Now.ToString() + mName + ",init," + "初始失败,接收数据已超时" + (char)13 + (char)10;
                    }
                    return(false);
                }
                else
                {
                    comPort.Read(ReadBuff, 0, ReturnByte);
                    if ((ReadBuff[0] != WriteBuff[0]) || (ReadBuff[4] != 0x43) || (ReadBuff[7] != 0x3D) || (ReadBuff[8] != 0x3D))//数据检验失败
                    {
                        if (ErrStr.IndexOf("接收数据错误") < 0)
                        {
                            ErrStr = ErrStr + DateTime.Now.ToString() + mName + ",init," + ":初始失败,接收数据错误" + (char)13 + (char)10;
                        }
                        return(false);
                    }
                }
            }
            catch (Exception exc)
            {
                if (ErrStr.IndexOf(exc.ToString()) < 0)
                {
                    ErrStr = ErrStr + DateTime.Now.ToString() + mName + ",init," + ":" + exc.ToString() + (char)13 + (char)10;
                }
                return(false);
            }
            return(true);
        }
コード例 #5
0
        /// <summary>
        /// 专用于7188,将指定指令发送到模块,并返回所须要的数据
        /// </summary>
        /// <param name="mWriteBuff">byte[],须要发送出去的指令</param>
        /// <param name="mReadBuff">byte[] ,返回数据</param>
        /// <returns>bool,读取数据是否成功</returns>
        public bool StandarBoard7188Read(byte[] mWriteBuff, out byte[] ReadBuff)
        {
            int i, tempInt;

            ReadBuff = new byte[1];
            byte[]   mReadBuff  = new byte[100]; //接收数据
            int      ReturnByte = 0;             //返回数据
            bool     IsReturn   = false;         //是否成功返回
            bool     IsTimeOut  = false;         //是否超时
            DateTime NowTime;                    //当前时间
            TimeSpan ts;                         //时间差

            if (!mStandarBoardInit)              //没有初始化
            {
                StandarBoardInit();
                return(false);
            }
            //byte NowByte;
            try
            {
                if (!comPort.IsOpen)
                {
                    comPort.Open();
                }
                comPort.DiscardInBuffer();//刷新串口
                comPort.Write(mWriteBuff, 0, mWriteBuff.Length);
                tempInt = 0;
                NowTime = DateTime.Now;
                do
                {
                    //System.Windows.Forms.Application.DoEvents();
                    Threading.Thread.Sleep(50);
                    tempInt = comPort.BytesToRead;
                    if (tempInt >= 9)//收到数据
                    {
                        Threading.Thread.Sleep(50);
                        ReturnByte = comPort.BytesToRead;
                        if (ReturnByte == tempInt)
                        {
                            IsReturn = true;
                        }
                    }
                    ts = DateTime.Now - NowTime;
                    if (ts.TotalMilliseconds > timeOut)//时间超时
                    {
                        IsTimeOut = true;
                    }
                } while (!IsReturn && !IsTimeOut);
                if (!IsReturn && IsTimeOut)//超时
                {
                    if (ErrStr.IndexOf("接收数据已超时") < 0)
                    {
                        ErrStr = ErrStr + DateTime.Now.ToString() + ",StandarBoardRead," + ":读取失败,接收数据已超时" + (char)13 + (char)10;
                    }
                    return(false);
                }

                if (ReturnByte > 100)
                {
                    if (errStr.IndexOf("数据长度错误") < 0)
                    {
                        errStr = errStr + DateTime.Now.ToString() + ":读取失败,数据长度错误或过长" + (char)13 + (char)10;
                    }
                }
                else
                {
                    comPort.Read(mReadBuff, 0, ReturnByte);
                }

                if ((mReadBuff[0] != mWriteBuff[0]) || (mReadBuff[1] != mWriteBuff[1]))//数据检验失败
                {
                    if (ErrStr.IndexOf("接收数据错误") < 0)
                    {
                        ErrStr = ErrStr + DateTime.Now.ToString() + ",StandarBoardRead," + ":读取失败,接收数据错误" + (char)13 + (char)10;
                    }
                    return(false);
                }
                else
                {
                    if (mReadBuff[5] > 0)
                    {
                        ReadBuff = new byte[mReadBuff[6]];
                        for (i = 0; i < mReadBuff[6]; i++)
                        {
                            ReadBuff[i] = mReadBuff[i + 7];
                        }
                    }
                }
            }
            catch (Exception exc)
            {
                if (ErrStr.IndexOf(exc.ToString()) < 0)
                {
                    ErrStr = ErrStr + DateTime.Now.ToString() + ",StandarBoardRead," + ":" + exc.ToString() + (char)13 + (char)10;
                }
                return(false);
            }
            return(true);
        }
コード例 #6
0
        /// <summary>
        /// 读取模块中多个数据
        /// </summary>
        /// <param name="StartAdd">读取数据开始寄存器</param>
        /// <param name="PointCount">读取寄存器个数</param>
        /// <param name="mReturnBuff">读取寄存器数据</param>
        /// <returns>读取数据是否成功</returns>
        public bool StandarBoardRead(int StartAdd, int PointCount, ref long[] mReturnBuff)
        {
            int i;

            long[]   ReturnBuff = new long[PointCount];
            byte[]   WriteBuff  = new byte[10];                 //发送数据
            byte[]   ReadBuff   = new byte[2 * PointCount + 5]; //接收数据
            int      ReturnByte = 0;                            //返回数据
            bool     IsReturn   = false;                        //是否成功返回
            bool     IsTimeOut  = false;                        //是否超时
            DateTime NowTime;                                   //当前时间
            TimeSpan ts;                                        //时间差
            byte     CrcHi = 0, CrcLo = 0;                      //CRC校验

            try
            {
                //05 03	24 10 00 06 CF 79
                WriteBuff[0] = _StandarModebusAddress;
                WriteBuff[1] = 0x03;
                WriteBuff[2] = (byte)((StartAdd & 0xFF00) >> 8);
                WriteBuff[3] = (byte)(StartAdd & 0x00FF);
                WriteBuff[4] = (byte)((PointCount & 0xFF00) >> 8);
                WriteBuff[5] = (byte)(PointCount & 0x00FF);
                cMain.CRC_16(WriteBuff, 6, ref CrcLo, ref CrcHi);
                WriteBuff[6] = CrcLo;
                WriteBuff[7] = CrcHi;
                if (!comPort.IsOpen)
                {
                    comPort.Open();
                }
                comPort.DiscardInBuffer();//刷新串口
                comPort.Write(WriteBuff, 0, 8);
                NowTime = DateTime.Now;
                do
                {
                    //System.Windows.Forms.Application.DoEvents();
                    Threading.Thread.Sleep(50);
                    if (comPort.BytesToRead >= (2 * WriteBuff[5] + 5))//收到数据
                    {
                        ReturnByte = comPort.BytesToRead;
                        IsReturn   = true;
                    }
                    ts = DateTime.Now - NowTime;
                    if (ts.TotalMilliseconds > timeOut)//时间超时
                    {
                        IsTimeOut = true;
                    }
                } while (!IsReturn && !IsTimeOut);
                if (!IsReturn && IsTimeOut)//超时
                {
                    if (ErrStr.IndexOf("接收数据已超时") < 0)
                    {
                        ErrStr = ErrStr + DateTime.Now.ToString() + ",StandarBoardRead," + ":读取失败,接收数据已超时" + (char)13 + (char)10;
                    }
                    return(false);
                }
                comPort.Read(ReadBuff, 0, ReturnByte);
                if ((ReadBuff[0] != WriteBuff[0]) || (ReadBuff[1] != WriteBuff[1]))//数据检验失败
                {
                    if (ErrStr.IndexOf("接收数据错误") < 0)
                    {
                        ErrStr = ErrStr + DateTime.Now.ToString() + ",StandarBoardRead," + ":读取失败,接收数据错误" + (char)13 + (char)10;
                    }
                    return(false);
                }
                else
                {
                    for (i = 0; i < ReturnBuff.Length; i++)
                    {
                        ReturnBuff[i] = (ReadBuff[i * 2 + 3] & 0xFF) * 256 + (ReadBuff[i * 2 + 4] & 0xFF);

                        mReturnBuff[i] = ReturnBuff[i];
                    }
                }
            }
            catch (Exception exc)
            {
                if (ErrStr.IndexOf(exc.ToString()) < 0)
                {
                    ErrStr = ErrStr + DateTime.Now.ToString() + ",StandarBoardRead," + ":" + exc.ToString() + (char)13 + (char)10;
                }
                return(false);
            }
            return(true);
        }
コード例 #7
0
        /// <summary>
        /// 标准模块初始化
        /// </summary>
        /// <returns>返回初始化是否成功</returns>
        public bool StandarBoardInit()
        {
            if (cMain.isDebug)
            {
                mStandarBoardInit = true;
                return(true);
            }
            byte[]   WriteBuff  = new byte[10]; //发送数据
            byte[]   ReadBuff   = new byte[20]; //接收数据
            int      ReturnByte = 0;            //返回数据
            bool     IsReturn   = false;        //是否成功返回
            bool     IsTimeOut  = false;        //是否超时
            DateTime NowTime    = DateTime.Now; //当前时间
            TimeSpan ts;                        //时间差
            byte     CrcHi = 0, CrcLo = 0;      //CRC校验

            try
            {
                if (!comPort.IsOpen)
                {
                    comPort.Open();
                }
                WriteBuff[0] = (byte)(_StandarModebusAddress & 0xFF);
                WriteBuff[1] = 0x03;
                WriteBuff[2] = 0x00;
                WriteBuff[3] = 0x01;
                WriteBuff[4] = 0x00;
                WriteBuff[5] = 0x01;
                cMain.CRC_16(WriteBuff, 6, ref CrcLo, ref CrcHi);
                WriteBuff[6] = CrcLo;
                WriteBuff[7] = CrcHi;
                comPort.DiscardInBuffer();
                comPort.Write(WriteBuff, 0, 8);
                NowTime = DateTime.Now;
                do
                {
                    //System.Windows.Forms.Application.DoEvents();
                    Threading.Thread.Sleep(50);
                    if (comPort.BytesToRead >= WriteBuff[5] * 2 + 5)//收到数据
                    {
                        ReturnByte = comPort.BytesToRead;
                        IsReturn   = true;
                    }
                    ts = DateTime.Now - NowTime;
                    if (ts.TotalMilliseconds > timeOut)//时间超时
                    {
                        IsTimeOut = true;
                    }
                } while (!IsReturn && !IsTimeOut);
                if (!IsReturn && IsTimeOut)//超时
                {
                    if (ErrStr.IndexOf("接收数据已超时") < 0)
                    {
                        ErrStr = ErrStr + DateTime.Now.ToString() + ",StandarBoardInit," + "初始失败,接收数据已超时" + (char)13 + (char)10;
                    }
                    return(false);
                }
                else
                {
                    comPort.Read(ReadBuff, 0, ReturnByte);
                    if ((ReadBuff[0] != WriteBuff[0]) || (ReadBuff[1] != WriteBuff[1]))//数据检验失败
                    {
                        if (ErrStr.IndexOf("接收数据错误") < 0)
                        {
                            ErrStr = ErrStr + DateTime.Now.ToString() + ",StandarBoardInit," + ":初始失败,接收数据错误" + (char)13 + (char)10;
                        }
                        return(false);
                    }
                    else
                    {
                        mStandarBoardInit = true;
                    }
                }
            }
            catch (Exception exc)
            {
                if (ErrStr.IndexOf(exc.ToString()) < 0)
                {
                    ErrStr = ErrStr + DateTime.Now.ToString() + ",StandarBoardInit," + ":" + exc.ToString() + (char)13 + (char)10;
                }
                return(false);
            }
            return(true);
        }
コード例 #8
0
        /// <summary>
        /// 专用于7188,将指定指令发送到模块,并返回设置是否成功
        /// </summary>
        /// <param name="mWriteBuff">byte[],发送7188的指令</param>
        /// <returns>bool,返回设置指令是否成功</returns>
        public bool StandarBoard7188Set(byte[] mWriteBuff)
        {
            byte[]   mReadBuff  = new byte[100]; //接收数据
            int      ReturnByte = 0;             //返回数据
            bool     IsReturn   = false;         //是否成功返回
            bool     IsTimeOut  = false;         //是否超时
            DateTime NowTime;                    //当前时间
            TimeSpan ts;                         //时间差

            if (cMain.isDebug)
            {
                return(true);
            }
            if (!mStandarBoardInit)//没有初始化
            {
                StandarBoardInit();
                return(false);
            }
            try
            {
                if (!comPort.IsOpen)
                {
                    comPort.Open();
                }
                comPort.DiscardInBuffer();//刷新串口
                comPort.Write(mWriteBuff, 0, mWriteBuff.Length);
                NowTime = DateTime.Now;
                do
                {
                    //System.Windows.Forms.Application.DoEvents();
                    Threading.Thread.Sleep(50);
                    if (comPort.BytesToRead >= mWriteBuff.Length)//收到数据
                    {
                        ReturnByte = comPort.BytesToRead;
                        IsReturn   = true;
                    }
                    ts = DateTime.Now - NowTime;
                    if (ts.TotalMilliseconds > timeOut)//时间超时
                    {
                        IsTimeOut = true;
                    }
                } while (!IsReturn && !IsTimeOut);
                if (!IsReturn && IsTimeOut)//超时
                {
                    if (ErrStr.IndexOf("接收数据已超时") < 0)
                    {
                        ErrStr = ErrStr + DateTime.Now.ToString() + ",StandarBoardRead," + ":读取失败,接收数据已超时" + (char)13 + (char)10;
                    }
                    return(false);
                }
                comPort.Read(mReadBuff, 0, ReturnByte);
                if ((mReadBuff[0] != mWriteBuff[0]) || (mReadBuff[1] != mWriteBuff[1]))//数据检验失败
                {
                    if (ErrStr.IndexOf("接收数据错误") < 0)
                    {
                        ErrStr = ErrStr + DateTime.Now.ToString() + ",StandarBoardRead," + ":读取失败,接收数据错误" + (char)13 + (char)10;
                    }
                    return(false);
                }
            }
            catch (Exception exc)
            {
                if (ErrStr.IndexOf(exc.ToString()) < 0)
                {
                    ErrStr = ErrStr + DateTime.Now.ToString() + ",StandarBoardRead," + ":" + exc.ToString() + (char)13 + (char)10;
                }
                return(false);
            }
            return(true);
        }
コード例 #9
0
        /// <summary>
        /// 将多个数据写入到寄存器,功能码为Ox10
        /// </summary>
        /// <param name="StartAdd">写入寄存器开始地址</param>
        /// <param name="PointCount">写入数据长度</param>
        /// <param name="mWriteBuff">写入的数据,mWriteBuff.Length的个数不要小于PointCount</param>
        /// <returns>返回写入是否成功</returns>
        public bool StandarBoardWritePoint(int StartAdd, int PointCount, byte[] mWriteBuff)
        {
            long[]   ReturnBuff = new long[8];
            byte[]   WriteBuff  = new byte[PointCount * 2 + 9]; //发送数据
            byte[]   ReadBuff   = new byte[21];                 //接收数据
            int      ReturnByte = 0;                            //返回数据
            bool     IsReturn   = false;                        //是否成功返回
            bool     IsTimeOut  = false;                        //是否超时
            DateTime NowTime;                                   //当前时间
            TimeSpan ts;                                        //时间差
            byte     CrcHi = 0, CrcLo = 0;                      //CRC校验
            int      i;

            if (cMain.isDebug)
            {
                return(true);
            }
            if (!mStandarBoardInit)//没有初始化
            {
                StandarBoardInit();
                return(false);
            }
            try
            {
                WriteBuff[0] = _StandarModebusAddress;
                WriteBuff[1] = 0x10;
                WriteBuff[2] = (byte)((StartAdd & 0xFF00) >> 8);
                WriteBuff[3] = (byte)(StartAdd & 0xFF);
                WriteBuff[4] = (byte)((PointCount & 0xFF00) >> 8);
                WriteBuff[5] = (byte)(PointCount & 0xFF);
                WriteBuff[6] = (byte)((PointCount * 2) & 0xFF);
                for (i = 0; i < PointCount * 2; i++)
                {
                    WriteBuff[7 + i] = mWriteBuff[i];
                }
                cMain.CRC_16(WriteBuff, PointCount * 2 + 7, ref CrcLo, ref CrcHi);
                WriteBuff[PointCount * 2 + 7] = CrcLo;
                WriteBuff[PointCount * 2 + 8] = CrcHi;
                if (!comPort.IsOpen)
                {
                    comPort.Open();
                }
                comPort.DiscardInBuffer();//刷新串口
                comPort.Write(WriteBuff, 0, PointCount * 2 + 9);
                NowTime = DateTime.Now;
                do
                {
                    //System.Windows.Forms.Application.DoEvents();
                    Threading.Thread.Sleep(50);
                    if (comPort.BytesToRead >= 8)//收到数据
                    {
                        ReturnByte = comPort.BytesToRead;
                        IsReturn   = true;
                    }
                    ts = DateTime.Now - NowTime;
                    if (ts.TotalMilliseconds > timeOut)//时间超时
                    {
                        IsTimeOut = true;
                    }
                } while (!IsReturn && !IsTimeOut);
                if (!IsReturn && IsTimeOut)//超时
                {
                    if (ErrStr.IndexOf("接收数据已超时") < 0)
                    {
                        ErrStr = ErrStr + DateTime.Now.ToString() + ",StandarBoardWritePoint," + ":读取失败,接收数据已超时" + (char)13 + (char)10;
                    }
                    return(false);
                }
                comPort.Read(ReadBuff, 0, ReturnByte);
                if ((ReadBuff[0] != WriteBuff[0]) || (ReadBuff[1] != WriteBuff[1]))//数据检验失败
                {
                    if (ErrStr.IndexOf("接收数据错误") < 0)
                    {
                        ErrStr = ErrStr + DateTime.Now.ToString() + ",StandarBoardWritePoint," + ":读取失败,接收数据错误" + (char)13 + (char)10;
                    }
                    return(false);
                }
            }
            catch (Exception exc)
            {
                if (ErrStr.IndexOf(exc.ToString()) < 0)
                {
                    ErrStr = ErrStr + DateTime.Now.ToString() + ",StandarBoardWritePoint," + ":" + exc.ToString() + (char)13 + (char)10;
                }
                return(false);
            }
            return(true);
        }
コード例 #10
0
        /// <summary>
        /// WbGonglv初始化
        /// </summary>
        /// <returns>bool,返回初始结果</returns>
        public bool WbGonglvInit()
        {
            if (cMain.isDebug)
            {
                mWbGonglvInit = true;
                return(true);
            }
            byte[]   WriteBuff  = new byte[10]; //发送数据
            byte[]   ReadBuff   = new byte[20]; //接收数据
            int      ReturnByte = 0;            //返回数据
            bool     IsReturn   = false;        //是否成功返回
            bool     IsTimeOut  = false;        //是否超时
            DateTime NowTime    = DateTime.Now; //当前时间
            TimeSpan ts;                        //时间差

            try
            {
                if (!comPort.IsOpen)
                {
                    comPort.Open();
                }
                WriteBuff[0] = 0x7E;
                WriteBuff[1] = 0x01;
                WriteBuff[2] = 0xFF;
                WriteBuff[3] = 0x50;
                WriteBuff[4] = 0xB0;
                WriteBuff[5] = 0x0D;

                comPort.DiscardInBuffer();
                comPort.Write(WriteBuff, 0, 6);
                NowTime = DateTime.Now;
                do
                {
                    //System.Windows.Forms.Application.DoEvents();
                    System.Threading.Thread.Sleep(100);
                    if (comPort.BytesToRead >= 14)//收到数据
                    {
                        ReturnByte = comPort.BytesToRead;
                        IsReturn   = true;
                    }
                    ts = DateTime.Now - NowTime;
                    if (ts.TotalMilliseconds > timeOut)//时间超时
                    {
                        IsTimeOut = true;
                    }
                } while (!IsReturn && !IsTimeOut);
                if (!IsReturn && IsTimeOut)//超时
                {
                    if (ErrStr.IndexOf("接收数据已超时") < 0)
                    {
                        ErrStr = ErrStr + DateTime.Now.ToString() + ",mWbGonglvInit," + "初始失败,接收数据已超时" + (char)13 + (char)10;
                    }
                    cMain.WriteErrorToLog(ReturnByte.ToString());
                    return(false);
                }
                else
                {
                    comPort.Read(ReadBuff, 0, ReturnByte);
                    if ((ReadBuff[0] != WriteBuff[0]) || (ReadBuff[1] != WriteBuff[1]))//数据检验失败
                    {
                        if (ErrStr.IndexOf("接收数据错误") < 0)
                        {
                            ErrStr = ErrStr + DateTime.Now.ToString() + ",mWbGonglvInit," + ":初始失败,接收数据错误" + (char)13 + (char)10;
                        }
                        return(false);
                    }
                    else
                    {
                        mWbGonglvInit = true;
                    }
                }
            }
            catch (Exception exc)
            {
                if (ErrStr.IndexOf(exc.ToString()) < 0)
                {
                    ErrStr = ErrStr + DateTime.Now.ToString() + ",mWbGonglvInit," + ":" + exc.ToString() + (char)13 + (char)10;
                }
                return(false);
            }
            return(true);
        }
コード例 #11
0
        /// <summary>
        /// 读取2010模块数据
        /// </summary>
        /// <param name="ReturnBuff">返回读取9元素数组,0,1,2为电压,3,4,5为电流,6,7,8为功率</param>
        /// <returns>返回读取数据是否成功</returns>
        public bool WbGonglvRead_R(ref double[] ReturnBuff)
        {
            if (cMain.isDebug)
            {
                ReturnBuff[0] = 220 + 10 * Num.Rand();
                ReturnBuff[1] = 220 + 10 * Num.Rand();
                ReturnBuff[2] = 220 + 10 * Num.Rand();
                ReturnBuff[3] = 4; // +5 * Num.Rand();
                ReturnBuff[4] = 6; // +5 * Num.Rand();
                ReturnBuff[5] = 8; // +5 * Num.Rand();
                ReturnBuff[6] = ReturnBuff[0] * ReturnBuff[3];
                ReturnBuff[7] = ReturnBuff[1] * ReturnBuff[4];
                ReturnBuff[8] = ReturnBuff[2] * ReturnBuff[5];
                return(true);
            }
            bool returnValue = false;

            long[] mReturnBuff = new long[35];

            int i;

            long[]   ReturnBuff1 = new long[4];
            byte[]   WriteBuff   = new byte[10]; //发送数据
            byte[]   ReadBuff    = new byte[16]; //接收数据
            int      ReturnByte  = 0;            //返回数据
            bool     IsReturn    = false;        //是否成功返回
            bool     IsTimeOut   = false;        //是否超时
            DateTime NowTime;                    //当前时间
            TimeSpan ts;                         //时间差



            try
            {
                //05 03	24 10 00 06 CF 79
                WriteBuff[0] = 0x7E;
                WriteBuff[1] = 0x01;
                WriteBuff[2] = 0xFF;
                WriteBuff[3] = 0x50;
                WriteBuff[4] = 0xB0;
                WriteBuff[5] = 0x0D;

                NowTime = DateTime.Now;
                do
                {
                    //System.Windows.Forms.Application.DoEvents();
                    //Threading.Thread.Sleep(20);
                    if (comPort.BytesToRead >= 14)//收到数据
                    {
                        ReturnByte = comPort.BytesToRead;
                        IsReturn   = true;
                    }
                    ts = DateTime.Now - NowTime;
                    if (ts.TotalMilliseconds > timeOut)//时间超时
                    {
                        IsTimeOut = true;
                    }
                } while (!IsReturn && !IsTimeOut);
                if (!IsReturn && IsTimeOut)//超时
                {
                    if (ErrStr.IndexOf("接收数据已超时") < 0)
                    {
                        ErrStr = ErrStr + DateTime.Now.ToString() + ",WbGonglvRead," + ":读取失败,接收数据已超时" + (char)13 + (char)10;
                    }
                    returnValue = false;
                    return(returnValue);
                }
                comPort.Read(ReadBuff, 0, ReturnByte);
                if ((ReadBuff[0] != WriteBuff[0]) || (ReadBuff[1] != WriteBuff[1]))//数据检验失败
                {
                    //string tempStr = string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12},{3},{14},{15},{16},{17},{18},{19},{20}",
                    //    ReadBuff[0], ReadBuff[1], ReadBuff[2], ReadBuff[3], ReadBuff[4], ReadBuff[5], ReadBuff[6], ReadBuff[7], ReadBuff[8],
                    //    ReadBuff[9], ReadBuff[10], ReadBuff[11], ReadBuff[12], ReadBuff[13], ReadBuff[14], ReadBuff[15], ReadBuff[16], ReadBuff[17]
                    //    , ReadBuff[18], ReadBuff[19], ReadBuff[20]);
                    //cMain.WriteErrorToLog(tempStr);
                    if (ErrStr.IndexOf("接收数据错误") < 0)
                    {
                        ErrStr = ErrStr + DateTime.Now.ToString() + ",WbGonglvRead," + ":读取失败,接收数据错误" + (char)13 + (char)10;
                    }
                    returnValue = false;
                    return(returnValue);
                }
                else
                {
                    for (i = 0; i < ReturnBuff1.Length; i++)
                    {
                        ReturnBuff1[i] = (ReadBuff[i * 2 + 7] & 0xFF) * 256 + (ReadBuff[i * 2 + 6] & 0xFF);
                        //if ((ReadBuff[i * 2 + 4] >> 7) == 1)//如果是负数
                        //{
                        //    ReturnBuff1[i] = -(ReturnBuff1[i] & 0xFFFF + 1);
                        //}
                        mReturnBuff[i] = ReturnBuff1[i];
                    }
                }
            }
            catch (Exception exc)
            {
                if (ErrStr.IndexOf(exc.ToString()) < 0)
                {
                    ErrStr = ErrStr + DateTime.Now.ToString() + ",WbGonglvRead," + ":" + exc.ToString() + (char)13 + (char)10;
                }
                returnValue = false;
                return(returnValue);
            }
            returnValue = true;


            if (returnValue)
            {
                ReturnBuff[0] = mReturnBuff[2] * 300 / (double)10000;//电压
                ReturnBuff[1] = 0;
                ReturnBuff[2] = 0;
                ReturnBuff[3] = mReturnBuff[3] * 25 / (double)10000;//电流
                ReturnBuff[4] = 0;
                ReturnBuff[5] = 0;

                ReturnBuff[6] = mReturnBuff[0] * 7500 / (double)10000;//功率


                ReturnBuff[7] = 0;


                ReturnBuff[8] = 0;
            }
            else
            {
                if (errStr.IndexOf(mStandarBoard.ErrStr) < 0)
                {
                    errStr = errStr + mStandarBoard.ErrStr;
                }
            }
            return(returnValue);
        }