예제 #1
0
        /// <summary>
        ///     Hàm xử lý sự kiện khi một trong các Port nhận được dữ liệu
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="e"></param>
        private void ComDataReceived(object obj, SerialDataReceivedEventArgs e)
        {
            var sender = (SerialPort)obj;

            //Kiểm tra trạng thái của cổng xem có sẵn sàng nhận dữ liệu không.
            if (_portStatus[sender.PortName] != PortStatus.Idle)
            {
                return;
            }

            var buffer = new byte[] {};

            int bytesToRead = sender.BytesToRead;

            while (bytesToRead > 0)
            {
                var tempBuffer = new byte[bytesToRead];
                sender.Read(tempBuffer, 0, bytesToRead);
                Merge(ref buffer, tempBuffer);
                Thread.Sleep(50);
                bytesToRead = sender.BytesToRead;
            }

            // Lưu lại file Log
            try
            {
                //Logger log = LogManager.GetLogger(sender.PortName);
                //log.Trace("Receive Data:{0}", Encoding.ASCII.GetString(buffer));

                string path = string.Format(@"D:\_COMLOG\{0}-{1}.log", DateTime.Today.ToString(@"yyyyMMdd"),
                                            sender.PortName);
                if (!Directory.Exists(Path.GetDirectoryName(path)))
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(path));
                }
                string contents = string.Format("{0} RECV:{1}\r\n", DateTime.Now.ToString("HH:mm:ss.fff"),
                                                Encoding.ASCII.GetString(buffer));
                File.AppendAllText(path, contents);
            }
            catch (Exception ex)
            {
                File.AppendAllText(@"C:\_LabService_Error.txt",
                                   string.Format("{0} - {1}\n",
                                                 DateTime.Now.ToString("dd/MM/yyyy - HH:mm:ss"), ex));
            }

            IncommingData.Invoke(new DataReceiveRs232(sender, buffer));
            ResetTimer(sender.PortName);
        }
예제 #2
0
 /// <summary>
 ///     Hàm dùng để gọi sự kiện khi có dữ liệu gửi đến
 /// </summary>
 /// <param name="obj"></param>
 public virtual void RaiseEventIncommingData(object obj)
 {
     IncommingData.Invoke(obj);
 }