示例#1
0
        /// <summary>
        /// 作者:np
        /// 时间:2014年6月3日
        /// 内容:成批写值
        /// </summary>
        /// <param name="addr"></param>
        /// <param name="blockNum"></param>
        /// <param name="vals"></param>
        /// <returns></returns>
        public bool WriteMultiDB(string addr, int blockNum, short[] vals)
        {
            try
            {
                lock (lockObj)
                {
                    if (this.netFailTimes > 2 || (!isConnected))//超过2次就触发断开事件
                    {
                        isConnected = false;
                        // OnLinkLost();

                        return(false);
                    }
                    List <byte> sendBuffer = new List <byte>();//发送缓存
                    sendBuffer.AddRange(constantByte);
                    short sendLength = (short)(0x0c + blockNum * 2);
                    sendBuffer.AddRange(BitConverter.GetBytes(sendLength));

                    sendBuffer.Add(cpuMonitorTimeL);
                    sendBuffer.Add(cpuMonitorTimeH);
                    sendBuffer.Add(orderWriteL);
                    sendBuffer.Add(orderWriteH);
                    sendBuffer.Add(childWOderCodeL);
                    sendBuffer.Add(childWOderCodeH);

                    short  addrValue = Convert.ToInt16(addr.Substring(1, 4));
                    byte[] addrBytes = BitConverter.GetBytes(addrValue);
                    byte   addrHigh  = 0;
                    sendBuffer.AddRange(addrBytes);
                    sendBuffer.Add(addrHigh);

                    sendBuffer.Add(writeTypeCode);
                    sendBuffer.AddRange(BitConverter.GetBytes((short)blockNum));

                    for (int i = 0; i < vals.Count(); i++)
                    {
                        byte[] sendValue = BitConverter.GetBytes(vals[i]);
                        sendBuffer.AddRange(sendValue);
                    }

                    SendData(sendBuffer.ToArray());
                    enumRequireType = EnumRequireType.成批写入;
                    if (recvAutoEvent.WaitOne(recvTimeOut, false))
                    {
                        if (CheckWriteStatus(this.recBuffer.ToArray()))
                        {
                            this.netFailTimes = 0;
                            return(true);
                        }
                        else
                        {
                            this.netFailTimes++;

                            return(false);
                        }
                    }
                    else
                    {
                        this.netFailTimes++;
                        return(false);
                    }
                }
            }
            catch
            {
                this.netFailTimes++;
                return(false);
            }
        }
示例#2
0
        /// <summary>
        /// 作者:np
        /// 时间:2014年6月3日
        /// 内容:成批写值
        /// </summary>
        /// <param name="addr"></param>
        /// <param name="blockNum"></param>
        /// <param name="vals"></param>
        /// <returns></returns>
        public bool WriteMultiDB(string addr, int blockNum, short[] vals)
        {
            try
            {
                lock (lockObj)
                {
                    //if (!isConnected)
                    //{
                    //    return false;
                    //}
                    if (this.netFailTimes > 2) //超过2次就触发断开事件
                    {
                        isConnected = false;
                        // OnLinkLost();

                        return(false);
                    }
                    List <byte> sendBuffer = new List <byte>();//发送缓存
                    switch (plcCata)
                    {
                    case EnumPlcCata.Qn:
                    case EnumPlcCata.FX5U:
                    {
                        sendBuffer.AddRange(constantByte);
                        short sendLength = (short)(0x0c + blockNum * 2);
                        sendBuffer.AddRange(BitConverter.GetBytes(sendLength));

                        sendBuffer.Add(cpuMonitorTimeL);
                        sendBuffer.Add(cpuMonitorTimeH);
                        sendBuffer.Add(orderWriteL);
                        sendBuffer.Add(orderWriteH);
                        sendBuffer.Add(childWOderCodeL);
                        sendBuffer.Add(childWOderCodeH);

                        short  addrValue = Convert.ToInt16(addr.Substring(1));
                        byte[] addrBytes = BitConverter.GetBytes(addrValue);
                        byte   addrHigh  = 0;
                        sendBuffer.AddRange(addrBytes);
                        sendBuffer.Add(addrHigh);

                        sendBuffer.Add(writeTypeCode);
                        sendBuffer.AddRange(BitConverter.GetBytes((short)blockNum));

                        for (int i = 0; i < vals.Count(); i++)
                        {
                            byte[] sendValue = BitConverter.GetBytes(vals[i]);
                            sendBuffer.AddRange(sendValue);
                        }
                        recvLenRequire = 11;
                        break;
                    }

                    case EnumPlcCata.FX3UENET:
                    {
                        byte[] title = new byte[] { 0x03, 0xFF, 0x0A, 0x00 };
                        sendBuffer.AddRange(title);
                        Int32  addrSt    = Int32.Parse(addr.Substring(1));
                        byte[] addrBytes = BitConverter.GetBytes(addrSt);
                        sendBuffer.AddRange(addrBytes);
                        byte[] zoneCode = new byte[] { 0x20, 0x44 };
                        sendBuffer.AddRange(zoneCode);
                        sendBuffer.Add((byte)blockNum);
                        sendBuffer.Add(0x00);
                        for (int i = 0; i < vals.Count(); i++)
                        {
                            byte[] sendValue = BitConverter.GetBytes(vals[i]);
                            sendBuffer.AddRange(sendValue);
                        }
                        recvLenRequire = 2;
                        break;
                    }

                    default:
                        break;
                    }

                    if (!SendData(sendBuffer.ToArray()))
                    {
                        this.netFailTimes++;

                        return(false);
                    }
                    enumRequireType = EnumRequireType.成批写入;
                    // if (recvAutoEvent.WaitOne(recvTimeOut, false))
                    if (WaitRecvOK(recvTimeOut))
                    {
                        if (CheckWriteStatus(this.recBuffer.ToArray()))
                        {
                            this.netFailTimes = 0;
                            return(true);
                        }
                        else
                        {
                            this.netFailTimes++;

                            return(false);
                        }
                    }
                    else
                    {
                        this.netFailTimes++;
                        return(false);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("PLC写入发生异常," + ex.ToString());
                this.netFailTimes++;
                return(false);
            }
        }
示例#3
0
        /// <summary>
        /// 作者:np
        /// 时间:2014年6月3日
        /// 内容:成批读取地址值
        /// </summary>
        /// <param name="addr"></param>
        /// <param name="blockNum"></param>
        /// <param name="vals"></param>
        /// <returns></returns>
        public bool ReadMultiDB(string addr, int blockNum, ref short[] vals)
        {
            try
            {
                lock (lockObj)
                {
                    if (this.netFailTimes > 2 || (!isConnected))//超过2次就触发断开事件
                    {
                        isConnected = false;
                        // OnLinkLost();

                        return(false);
                    }

                    List <byte> sendBuffer = new List <byte>();//发送缓存
                    sendBuffer.AddRange(constantByte);
                    sendBuffer.Add(dataLengthL);
                    sendBuffer.Add(dataLengthH);

                    sendBuffer.Add(cpuMonitorTimeL);
                    sendBuffer.Add(cpuMonitorTimeH);
                    sendBuffer.Add(orderReadL);
                    sendBuffer.Add(orderReadH);
                    sendBuffer.Add(childROderCodeL);
                    sendBuffer.Add(childROderCodeH);

                    short  addrValue = Convert.ToInt16(addr.Substring(1, 4));
                    byte[] addrBytes = BitConverter.GetBytes(addrValue);
                    byte   addrHigh  = 0;
                    sendBuffer.AddRange(addrBytes);
                    sendBuffer.Add(addrHigh);

                    sendBuffer.Add(readTypeCode);
                    sendBuffer.AddRange(BitConverter.GetBytes((short)blockNum));
                    SendData(sendBuffer.ToArray());
                    enumRequireType = EnumRequireType.成批读取;
                    if (recvAutoEvent.WaitOne(recvTimeOut, false))
                    {
                        bool analysisStatus = GetRecShortValues(this.recBuffer.ToArray(), blockNum, ref vals);
                        if (analysisStatus)
                        {
                            this.netFailTimes = 0;
                            return(true);
                        }
                        else
                        {
                            this.netFailTimes++;

                            return(false);
                        }
                    }
                    else
                    {
                        this.netFailTimes++;
                        return(false);
                    }
                }
            }
            catch
            {
                this.netFailTimes++;
                return(false);
            }
        }
示例#4
0
        /// <summary>
        /// 作者:np
        /// 时间:2014年6月3日
        /// 内容:成批读取地址值
        /// </summary>
        /// <param name="addr"></param>
        /// <param name="blockNum"></param>
        /// <param name="vals"></param>
        /// <returns></returns>
        public bool ReadMultiDB(string addr, int blockNum, ref short[] vals)
        {
            try
            {
                lock (lockObj)
                {
                    //if(!isConnected)
                    //{
                    //    return false;
                    //}
                    if (this.netFailTimes > 2) //超过2次就触发断开事件
                    {
                        isConnected = false;

                        return(false);
                    }

                    List <byte> sendBuffer = new List <byte>();//发送缓存

                    switch (plcCata)
                    {
                    case EnumPlcCata.Qn:
                    case EnumPlcCata.FX5U:
                    {
                        sendBuffer.AddRange(constantByte);
                        sendBuffer.Add(dataLengthL);
                        sendBuffer.Add(dataLengthH);

                        sendBuffer.Add(cpuMonitorTimeL);
                        sendBuffer.Add(cpuMonitorTimeH);
                        sendBuffer.Add(orderReadL);
                        sendBuffer.Add(orderReadH);
                        sendBuffer.Add(childROderCodeL);
                        sendBuffer.Add(childROderCodeH);

                        short  addrValue = Convert.ToInt16(addr.Substring(1));
                        byte[] addrBytes = BitConverter.GetBytes(addrValue);
                        byte   addrHigh  = 0;
                        sendBuffer.AddRange(addrBytes);
                        sendBuffer.Add(addrHigh);

                        sendBuffer.Add(readTypeCode);
                        sendBuffer.AddRange(BitConverter.GetBytes((short)blockNum));
                        recvLenRequire = 11 + 2 * blockNum;
                        break;
                    }

                    case EnumPlcCata.FX3UENET:
                    {
                        byte[] title = new byte[] { 0x01, 0xFF, 0x0A, 0x00 };
                        sendBuffer.AddRange(title);
                        Int32  addrSt    = Int32.Parse(addr.Substring(1));
                        byte[] addrBytes = BitConverter.GetBytes(addrSt);
                        sendBuffer.AddRange(addrBytes);
                        byte[] zoneCode = new byte[] { 0x20, 0x44 };
                        sendBuffer.AddRange(zoneCode);
                        sendBuffer.Add((byte)blockNum);
                        sendBuffer.Add(0x00);
                        recvLenRequire = 2 + blockNum * 2;

                        break;
                    }

                    default:
                        break;
                    }

                    if (!SendData(sendBuffer.ToArray()))
                    {
                        this.netFailTimes++;

                        return(false);
                    }
                    enumRequireType = EnumRequireType.成批读取;
                    // if (recvAutoEvent.WaitOne(recvTimeOut, false))
                    if (WaitRecvOK(recvTimeOut))
                    {
                        bool analysisStatus = GetRecShortValues(this.recBuffer.ToArray(), blockNum, ref vals);
                        if (analysisStatus)
                        {
                            this.netFailTimes = 0;
                            return(true);
                        }
                        else
                        {
                            this.netFailTimes++;

                            return(false);
                        }
                    }
                    else
                    {
                        this.netFailTimes++;
                        return(false);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("PLC读取发生异常," + ex.ToString());
                this.netFailTimes++;
                return(false);
            }
        }