示例#1
0
        //数据接收
        private void Com_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            byte[] ReDatas = new byte[ComDevice.BytesToRead];
            ComDevice.Read(ReDatas, 0, ReDatas.Length);//读取数据
            //接收数据处理 将ReDatas 转化为 String
            //该方式回丢弃数据
            //ASCII编码只能包含0-127的数据,高出的数据将丢弃
            //ReceiveData = new ASCIIEncoding().GetString(ReDatas);
            //byte[] Rec_Data = null;
            //Rec_Data = Encoding.ASCII.GetBytes(ReceiveData.Trim());

            //接收的Byte数据 返回
            Receive_Byte = new byte[ReDatas.Length];
            Receive_Byte = (byte[])ReDatas.Clone();

            //异常输出
            if (Receive_Byte.Length == 0)
            {
                MainView.Log.WriteError("Rs232 通讯数据格式异常!!!");
            }
            else
            {
                //置位接收标志
                Rec_Flag = true;
                //执行数据处理
                Receive_Event?.Invoke();
            }
        }
        public void Receive_Data(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            Exchange     = true;
            Data_Receive = new byte[Port.BytesToRead];
            Result       = new float[Register_Count];

            Port.Read(Data_Receive, 0, Port.BytesToRead);

            if (ModRTU_CRC(Data_Receive)[Data_Receive.Length - 2] != Data_Receive[Data_Receive.Length - 2] || ModRTU_CRC(Data_Receive)[Data_Receive.Length - 1] != Data_Receive[Data_Receive.Length - 1])
            {
                return;
            }

            if (Data_Receive[1] == 0x04)
            {
                for (int x = 0; x < Register_Count; x++)
                {
                    Result[x] = BTF.Out(Data_Receive[3 + x * 4], Data_Receive[4 + x * 4], Data_Receive[5 + x * 4], Data_Receive[6 + x * 4]);
                }
            }

            if (Now != null && Data_Receive[1] == Now[1])
            {
                Now = null;
            }

            Receive_Event?.Invoke();
        }
示例#3
0
        //数据接收
        private void Com_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (Closing)
            {
                return;                      //正在关闭串口,结束接收
            }
            int len = ComDevice.BytesToRead; //接收数据长度

            if (len <= 0)
            {
                return;                      //数据长度小于等于0,退出接收
            }
            byte[] ReDatas = new byte[len];  //初始化接收数组
            ComDevice.Read(ReDatas, 0, len); //读取数据
            //接收的Byte数据 返回
            byte[] ReceiveData = new byte[ReDatas.Length];
            ReceiveData = (byte[])ReDatas.Clone();
            //置位接收标志
            Rec_Flag = true;
            //执行数据处理
            Receive_Event?.Invoke(ReceiveData);
            //接收数据处理 将ReDatas 转化为 String
            //该方式回丢弃数据
            //ASCII编码只能包含0-127的数据,高出的数据将丢弃
            //ReceiveData = new ASCIIEncoding().GetString(ReDatas);
            //byte[] Rec_Data = null;
            //Rec_Data = Encoding.ASCII.GetBytes(ReceiveData.Trim());
        }
        public void Receive(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            Exchange = true;

            if (Port.BytesToRead < Receive_Length || Port.BytesToRead < 3)
            {
                return;
            }

            Data_Receive = new byte[Receive_Length > 3 ? Receive_Length : 8];
            try
            {
                Port.Read(Data_Receive, 0, Receive_Length);
                Port.DiscardInBuffer();
            }
            catch (Exception) { return; }

            Result = new float[Length + 1];

            if (ModRTU_CRC(Data_Receive, Data_Receive.Length - 2) != (short)((short)Data_Receive[Data_Receive.Length - 2] | ((short)Data_Receive[Data_Receive.Length - 1] << 8)) ||
                Data_Transmit[0] != Data_Receive[0] || Data_Transmit[1] != Data_Receive[1])
            {
                Error++; return;
            }

            switch (Data_Receive[1])
            {
            case 0x02:
                if (Data_Receive[2] != ((Data_Transmit[5] - 1) / 8 + 1))
                {
                    Error++; return;
                }
                if (Data_Interrupt != null && Data_Interrupt[1] == 0x02)
                {
                    Data_Interrupt = null;
                }
                break;

            case 0x03:
                if (Data_Receive[2] != (Data_Transmit[5] * 2))
                {
                    Error++; return;
                }
                if (Data_Interrupt != null && Data_Interrupt[1] == 0x03)
                {
                    Data_Interrupt = null;
                }
                break;

            case 0x04:
                if (Data_Receive[2] != (Data_Transmit[5] * 2))
                {
                    Error++; return;
                }
                if (Data_Interrupt != null && Data_Interrupt[1] == 0x04)
                {
                    Data_Interrupt = null;
                }
                break;

            case 0x06:
                for (int count = 0; count < Data_Transmit.Length; count++)
                {
                    if (Data_Receive[count] != Data_Transmit[count])
                    {
                        Error++; return;
                    }
                }
                if (Data_Interrupt != null && Data_Interrupt[1] == 0x06)
                {
                    Data_Interrupt = null;
                }
                break;

            case 0x10:
                for (int count = 0; count < 6; count++)
                {
                    if (Data_Receive[count] != Data_Transmit[count])
                    {
                        Error++; return;
                    }
                }
                if (Data_Interrupt != null && Data_Interrupt[1] == 0x10)
                {
                    Data_Interrupt = null;
                }
                break;
            }

            for (int x = 0; x < Length; x++)
            {
                Result[x] = BTF.Out(Data_Receive[3 + x * 4], Data_Receive[4 + x * 4], Data_Receive[5 + x * 4], Data_Receive[6 + x * 4]);
            }

            Receive_Array = "Прием: ";
            foreach (byte a in Data_Receive)
            {
                Receive_Array += a.ToString("X2") + " ";
            }

            Receive_Event?.Invoke();
        }