예제 #1
0
        public void TestParseDRZipGroup1()
        {
            var filename = "./Resources/Zip1.zip";

            using (var zipFile = ZipFile.OpenRead(filename))
            {
                var zipEntries = zipFile.Entries;

                var drFiles = ComtradeHelper.ParseDRZipGroup(zipEntries);

                Assert.NotEmpty(drFiles);
                Assert.Equal(2, drFiles.Count());

                foreach (var item in drFiles)
                {
                    Assert.True(item.FileSize > 1);

                    Assert.NotEmpty(item.FileName);
                    Assert.Contains("010A0005", item.FileName);
                    Assert.True(item.FileName.Length > 4);

                    Assert.NotEmpty(item.FileData);
                    Assert.True(item.FileData.Length > 1);

                    Assert.Equal(ComtradeHelper.TryParseDRDate("04/04/2018,13:45:38.404284").DateTime, item.CreationTime);
                }
            }
        }
예제 #2
0
        public void TestReadLinesCount()
        {
            var filename = "./Resources/Single1.CFG";

            using (var stream = new FileStream(filename, FileMode.Open, FileAccess.Read))
                Assert.Equal(73, ComtradeHelper.ReadLines(stream, Encoding.UTF8).ToList().Count);
        }
예제 #3
0
        public void TestReadLinesEmpty()
        {
            var filename = "./Resources/EmptyFile.CFG";

            using (var stream = new FileStream(filename, FileMode.Open, FileAccess.Read))
                Assert.Empty(ComtradeHelper.ReadLines(stream, Encoding.UTF8).ToList());
        }
예제 #4
0
        public void TestParseZIPFolder()
        {
            var drFileList = new DirectoryInfo("./Resources/")
                             .EnumerateFiles("*.zip", SearchOption.AllDirectories)
                             .Where(x => x.Name.IsDownloadable());

            var disturbanceRecordings = ComtradeHelper.ParseZipFilesCollection(drFileList, 1);

            Assert.NotEmpty(disturbanceRecordings);
            Assert.Equal(2, disturbanceRecordings.Count());

            foreach (var dr in disturbanceRecordings)
            {
                Assert.NotEmpty(dr.Name);

                var drFiles = dr.DRFiles;

                Assert.NotEmpty(drFiles);
                Assert.True(drFiles.Count() > 1);

                foreach (var item in drFiles)
                {
                    Assert.True(item.FileSize > 1);

                    Assert.NotEmpty(item.FileName);
                    Assert.True(item.FileName.Length > 4);

                    Assert.NotEmpty(item.FileData);
                    Assert.True(item.FileData.Length > 1);

                    //Assert.Contains(dr.Name, item.FileName);
                    Assert.Equal(dr.TriggerTime, item.CreationTime);
                }
            }
        }
예제 #5
0
        public void TestReadLinesNotNull()
        {
            var filename = "./Resources/Single1.CFG";

            using (var stream = new FileStream(filename, FileMode.Open, FileAccess.Read))
                Assert.NotNull(ComtradeHelper.ReadLines(stream, Encoding.UTF8));
        }
예제 #6
0
        public void TestParseFilesGroup()
        {
            var filenames = new List <FileInfo>()
            {
                new FileInfo("./Resources/Single1.CFG"),
                new FileInfo("./Resources/Single1.DAT")
            };

            var drFiles = ComtradeHelper.ParseDRFilesGroup(filenames);

            Assert.NotEmpty(drFiles);
            Assert.Equal(2, drFiles.Count());

            foreach (var item in drFiles)
            {
                Assert.True(item.FileSize > 1);

                Assert.NotEmpty(item.FileName);
                Assert.Contains("Single1", item.FileName);
                Assert.True(item.FileName.Length > 4);

                Assert.NotEmpty(item.FileData);
                Assert.True(item.FileData.Length > 1);

                Assert.Equal(ComtradeHelper.TryParseDRDate("05/04/2018,13:45:38.404284").DateTime, item.CreationTime);
            }
        }
예제 #7
0
        public void TestParseDRZipGroup2()
        {
            var filename = "./Resources/Zip2.zip";

            using (var zipFile = ZipFile.OpenRead(filename))
            {
                var zipEntries = zipFile.Entries;

                var drFiles = ComtradeHelper.ParseDRZipGroup(zipEntries);

                Assert.NotEmpty(drFiles);
                Assert.Equal(3, drFiles.Count());

                foreach (var item in drFiles)
                {
                    Assert.True(item.FileSize > 1);

                    Assert.NotEmpty(item.FileName);
                    Assert.Contains("Dist", item.FileName);
                    Assert.True(item.FileName.Length > 4);

                    Assert.NotEmpty(item.FileData);
                    Assert.True(item.FileData.Length > 1);

                    Assert.Equal(ComtradeHelper.TryParseDRDate("20/07/2016,10:09:14.760712").DateTime, item.CreationTime);
                }
            }
        }
예제 #8
0
        public void TestGetTriggerDateTime()
        {
            var filename = "./Resources/Single1.CFG";

            Assert.Equal(ComtradeHelper.TryParseDRDate("05/04/2018,13:45:38.404284").DateTime, ComtradeHelper.GetTriggerDateTime(filename));
            Assert.Equal(5, ComtradeHelper.GetTriggerDateTime(filename).Day);
            Assert.Equal(4, ComtradeHelper.GetTriggerDateTime(filename).Month);
        }
        public void TestParseZIPFolder()
        {
            var dir = @"C:\Users\admin\Desktop\Ordos DRs\Ordos\GIS 23KV\1\";

            if (!Directory.Exists(dir))
            {
                return;
            }

            var drFileList = new DirectoryInfo(dir)
                             .EnumerateFiles("*.zip", SearchOption.AllDirectories)
                             .Where(x => x.Name.IsDownloadable());

            var disturbanceRecordings = ComtradeHelper.ParseZipFilesCollection(drFileList, 1);

            Assert.NotEmpty(disturbanceRecordings);

            foreach (var dr in disturbanceRecordings)
            {
                Assert.NotEmpty(dr.Name);

                var drFiles = dr.DRFiles;

                Assert.NotEmpty(drFiles);
                Assert.True(drFiles.Count() > 1);

                foreach (var item in drFiles)
                {
                    Assert.True(item.FileSize > 1);

                    Assert.NotEmpty(item.FileName);
                    Assert.True(item.FileName.Length > 4);

                    Assert.NotEmpty(item.FileData);
                    Assert.True(item.FileData.Length > 1);

                    //Assert.Contains(dr.Name, item.FileName);
                    Assert.Equal(dr.TriggerTime, item.CreationTime);
                }
            }
        }
예제 #10
0
        /// <summary>
        /// Connect and read IED Comtrade Files.
        /// </summary>
        /// <param name="device">Device to read</param>
        private static void ProcessDeviceComtradeFiles(Device device)
        {
            var iedConnection = new IedConnection
            {
                ConnectTimeout = 20000
            };

            try
            {
                Logger.Info($"{device} - Connecting to Device");

                iedConnection.Connect(device.IPAddress);

                Logger.Info($"{device} - Connection Successful");

                Logger.Info($"{device} - Get IED Files");

                //Download a list of files in the IED:
                //Uses string.Empty as main root of the IED.
                var downloadableFileList = GetDownloadableFileList(iedConnection, device, string.Empty);

                Logger.Info($"{device} - {downloadableFileList.Count()} Files Found");

                //Remove the files that have been already downloaded before:
                //It will filter the files that are not in the DB.
                var filteredDownloadableFileList = DatabaseService.FilterExistingFiles(device, downloadableFileList);

                Logger.Info($"{device} - {filteredDownloadableFileList.Count()} New Files Found");

                if (filteredDownloadableFileList.Count() > 0)
                {
                    Logger.Info($"{device} - Downloading Comtrade files");

                    DownloadComtradeFiles(iedConnection, device, filteredDownloadableFileList);

                    Logger.Info($"{device} - Reading files");

                    //Using the recently donwloaded files:
                    //(Each temporary folder is unique for each IED)
                    var temporaryFolder        = PathHelper.GetTemporaryDownloadFolder(device);
                    var temporaryComtradeFiles = ComtradeHelper.ParseComtradeFiles(device, temporaryFolder);

                    Logger.Info($"{device} - Saving files to the DB");

                    DatabaseService.StoreComtradeFilesToDatabase(device, temporaryComtradeFiles);

                    DatabaseService.StoreIEDFilesToDatabase(device, filteredDownloadableFileList);

                    Logger.Info($"{device} - Exporting files");

                    ExportService.ExportDisturbanceRecordings(device, temporaryComtradeFiles);

                    Logger.Info($"{device} - Removing temporary files");

                    PathHelper.RemoveTemporaryFiles(device);
                }
                Logger.Info($"{device} - Disconnecting...");

                //Close connection:
                iedConnection.Release();
            }
            catch (IedConnectionException e)
            {
                Logger.Fatal($"Client Error: {e.GetIedClientError()}");
                Logger.Fatal($"Error Code: {e.GetErrorCode()}");
                Logger.Fatal($"IED Connection Exception: {e}");
            }
            catch (Exception e)
            {
                Logger.Fatal(e);
            }
            finally
            {
                try
                {
                    //libIEC61850: Dispose connection after use.
                    iedConnection.Dispose();
                }
                catch (IedConnectionException e)
                {
                    Logger.Fatal($"Dispose Client Error: {e.GetIedClientError()}");
                    Logger.Fatal($"Dispose Error Code: {e.GetErrorCode()}");
                    Logger.Fatal($"Dispose IED Connection Exception: {e}");
                }
                catch (Exception e)
                {
                    Logger.Fatal(e);
                }
                Logger.Info($"{device} - Disconnected!");
            }
        }
예제 #11
0
        public void TestGetTriggerDateTimeEmpty()
        {
            var filename = "./Resources/EmptyFile.CFG";

            Assert.Equal(DateTime.Now.ToShortDateString(), ComtradeHelper.GetTriggerDateTime(filename).ToShortDateString());
        }
예제 #12
0
        public void TestGetDRDateTimeCount()
        {
            var filename = "./Resources/Single1.CFG";

            Assert.Equal(2, ComtradeHelper.GetDRDateTimes(filename).Count());
        }
예제 #13
0
        public void TestTestGetDRDateTimeEmpty()
        {
            var filename = "./Resources/EmptyFile.CFG";

            Assert.Single(ComtradeHelper.GetDRDateTimes(filename));
        }