Compare commits

..
Author SHA1 Message Date
michal e53776a711 Remove unused interfaces and classes from project files:
- Exclude `IHasFromUNIDisablePossibility`, `SerialPortDevice`, and `SerialPortDeviceFake`.
- Remove unused `SharedComponents` namespace in `PressureMeter.cs`.
2026-02-27 17:06:11 +01:00
michal 02957c97b2 Merge remote-tracking branch 'private-origin/feature/marek/upadate-StandingStart' into feature/marek/upadate-StandingStart 2026-02-27 17:03:25 +01:00
marekf 6383df2ca9 Add parameter and management IsOffline for components: Modbus>TempMeter>Groch, Meret and Modbus>PressureMeter>Meret and Rig>Keithley>TempMeter and add indicator redColor itemValue for SchematicDrawing 2026-02-27 16:45:14 +01:00
michal 256934abb5 Update AssemblyVersion and AssemblyFileVersion to 3.9.2211.1 2026-02-27 15:59:22 +01:00
michal 54748c576f Fix Volume Roll over --
Refactor `OptoTelegramRaw` volume and timestamp unwrapping logic:

- Simplify rollover handling for both volume and timestamp unwrapping.
- Normalize and streamline calculations for improved clarity and maintainability.
- Comment out long-run test in `IperlHead_test_RollOver_Average` pending fixes.
2026-02-27 15:50:53 +01:00
michal 08d6c5360e Tests upgarde
Add extended rollover and averaging tests for `OptoTelegramRaw`:

- Enhance `OptoTelegramRawTest` with long-run scenarios for handling time and volume rollovers.
- Introduce `IperlHead_test_RollOver_Average` for verifying volume averaging and timestamp centering across rollovers and ring buffer wrap.
- Refactor constants for better clarity and reuse.
- Update project files to include new test class.
2026-02-27 13:27:26 +01:00
michal 7a686a3a1b Update AssemblyVersion and AssemblyFileVersion to 3.9.2210.1 2026-02-26 16:43:57 +01:00
michal 7ee37dbc39 Add volume rollover handling in PopulateVolume and introduce corresponding unit tests:
- Implement 24-bit counter rollover logic in `PopulateVolume` to normalize and compensate volume values.
- Add `PopulateVolumeRolloverTests_Concept` for thorough validation of rollover scenarios.
- Update project files to include new unit test suite.
- Include clarification comments for volume and timestamp rollover constants in `OptoTelegramRaw`.
2026-02-26 16:43:17 +01:00
michal 5b0196de4b Update AssemblyVersion and AssemblyFileVersion to 3.9.2209.1 2026-02-26 15:52:14 +01:00
michal c2d44e66c1 Add volume rollover handling and unit test for OptoTelegramRaw:
- Refactor volume unwrapping logic to handle 24-bit rollover in `OptoTelegramRaw`.
- Add `UpdateFromSmart_VolumeRollover_UnwrapsCorrectly` unit test to validate volume rollover behavior.
- Simplify constants and improve normalization logic for volume and timestamp.
2026-02-26 15:50:41 +01:00
michal 5a254c9ebd Fix lock timeout, open serial COM timeout
Refactor iPerl communication and improve robustness:

- Enhance `OpenOptoSerialPort` with async `Open()` and timeout handling.
- Improve exception handling in `ReadOptoData`, logging timeouts and errors.
- Add null checks for `outPath` components (`FlowMeter`, `Scale`) in `SequenceBase`.
- Update `AssemblyVersion` and `AssemblyFileVersion` to 3.9.2208.1.
2026-02-26 13:53:37 +01:00
michal f67f9e50a0 Update AssemblyVersion and AssemblyFileVersion to 3.9.2207.1 2026-02-26 10:40:28 +01:00
michal 1d2b6e9b48 auto close dialog UNI, fix roll over time Iperl ASIC
Refactor iPerl communication system and add unit tests:

- Update `IperlHead` logic: Fix `VolumeFromSamples` calculation by refining sample filtering and averaging logic.
- Introduce `AutoClickOkAfterDelay` in `CycleBgEnForm` and `TestStartEndForm` for automated dialog interactions.
- Add `OptoTelegramRawTest` and `OptoTelegramRawTest_UpdateFromSmart_Concept` to validate timestamp unwrapping, volume unwrapping, and edge case handling.
- Enhance asynchronous testing and mocking framework for improved stability.
- Update project files to include new test suites and ensure proper build integration.
2026-02-26 10:40:14 +01:00
michal ef4d7b1abd Uni DataEntry support to Iperl ASIC as SMART METER
Add async methods for iPerl communication and update simulation logic:

- Extend `IperlHead` with async methods for reading opto data and volumes (`DataEntry_ReadSerialNumberAsync`, `DataEntry_BeginVolumeAsync`, `DataEntry_EndVolumeAsync`).
- Add support for async serial number reading in `CycleBgEnForm`, implementing real-time updates for `regReaders`.
- Enhance `FlyingStartStopTestOp` and `StandingStartStopTestOp` with simulation timers for processing time (25 seconds).
- Improve exception handling and debug logs across modules (`DataEntry_ReadSerialNumber`, `ReadOptoDataWithTimeoutAsync`).
2026-02-25 21:29:15 +01:00
michal 7983463e8d Add support for regReaders in CycleBgEnForm and update related usage
- Introduce optional `regReaders` parameter to `CycleBgEnForm` constructor for enhanced flexibility in device handling.
- Update `EntryFormNoStartEnd` to conditionally use `regReaders` when initializing `CycleBgEnForm`.
- Add `Set by RegReader` action type to `DEItem`.
2026-02-23 16:14:42 +01:00
michal 2b3e0dfa32 Remove SharedComponents + UNI shows Serial Nr
Remove `SharedComponents` references and legacy `LiveLogCache` logic:

- Eliminate unused `SharedComponents` references across the solution to streamline dependencies.
- Comment out `LiveLogCache` interactions in multiple modules, transitioning to alternative or undefined logging mechanisms.
- Add optional `regReadersOptional` parameters to `ShowCycleBeginFormOp` methods for improved flexibility.
- Introduce `ITestMethodSmart` interface to support smart reader functionality.
- Add new `LogCacheAppender` configuration to `log4netConfig.xml` for diagnostic use.
- Update project files to remove outdated references and include newly introduced files.
2026-02-23 15:55:24 +01:00
michal 690e3f6505 Improve exception handling and logging in iPerl communication:
- Replace `throw ex` with detailed `log.Error` messages across `OptoHeadTest` methods.
- Enhance `OpenCycleBeginForm` method: add optional `regReadersOptional` parameter.
- Update `ReadSerialNr` in `iPerlCommunicationForm` to handle failures and include formatted result string.
2026-02-23 15:51:21 +01:00
michal 3ba4d3b242 Fix ConfigStruct binary write/read
Add error handling and improve binary read/write logic in `ConfigStruct`. Introduce `ConfigStructTest` for coverage of serialization behaviors. Update project file to include the new test suite.
2026-02-23 08:00:51 +01:00
michal a5c035bfed Enhance iPerl communication system:
- Add `ISerialDriver` interface and implement in `SerialDriver`.
- Introduce new methods in `ConfigStruct` for detailed status and active mode strings.
- Update `RadioService` with support for `ISerialDriver`, improved mode-setting logic, and configuration updates.
- Add new constants (`ReadSerialNrStr`, `SetIdleModeStr`) and `ReadSerialNr`/`SetIdleMode` methods in `iPerlCommunicationForm`.
- Extend `RadioServiceTest` with tests for activity and opt test modes.
- Update project files to include `ISerialDriver` and new test suite.
2026-02-20 14:37:50 +01:00
michal 8fafa63930 project clean up 2026-02-19 22:49:35 +01:00
michal 78e0a71b64 Update Results.csproj: Add new build constants (IPERL, IPEL) and include high-resolution TBF icon 2026-02-19 20:55:03 +01:00
michal 3dd1259f2f Iperl -> Iperl ASIC
Refactor iPerl communication system:

- Consolidate redundant OptoHead methods.
- Introduce new utilities for diagnostic LED state handling and volume unit conversions.
- Improve FIFO logic in flow direction detection with enhanced regression calculation.
- Add enhanced debugging and logging within communication layers (`SerialDriver` and `RadioService`).
- Update communication protocols for improved response handling and configuration management.
- Replace raw volume with meaningful unit-based values (`RawVolume1to4`).
2026-02-19 20:52:37 +01:00
michal 6d959ddf96 Add unit tests for iPerl communication protocols, including hex logger, LED parsers, wired protocols, and frame builders. Update project file to include new test suites. 2026-02-19 20:52:05 +01:00
michal c30e8540b2 Refactor iPerl communication services: replace legacy calibration and configuration methods with OptoHeadTest functionality, streamline diagnostic LED state handling, and clean up unused code. 2026-02-19 20:44:05 +01:00
michal 2b1406b05f Update AssemblyVersion to 3.9.2200.1 and fix incorrect references to OpticalHeadTest in iPerl communication logic. 2026-02-19 20:25:38 +01:00
michal 8ca235e456 Update iPerl communication: adjust baud rate to 38400, refactor opto-datastream processing, integrate diagnostic LED parser, and enhance serial port configuration. 2026-02-19 20:22:44 +01:00
michal 75d832c0b7 Add iPerl communication services and utilities. Include OptoTelegramRaw, RadioService, OpthoHeadService, SerialDriver, and related diagnostic parsers for enhanced communication with iPerl devices. 2026-02-19 20:22:34 +01:00
michal 27000427ad Added new components: TestMethods.FlyingStartMassCollectionMassFlow.Single and Uni.RegValveLowRegulTimeSaturation 2026-02-19 15:42:01 +01:00
michal 44aee86571 heap of changes from marek 2026-02-19 15:23:19 +01:00
529 changed files with 102028 additions and 20544 deletions
+4
View File
@@ -1,3 +1,5 @@
AppDiagnostic/bin/
AppDiagnostic/obj/
Common/bin/
Common/obj/
Config/bin/
@@ -56,6 +58,8 @@ Statistics/bin/
Statistics/obj/
TBF/bin/
TBF/obj/
TBFTests/bin/
TBFTests/obj/
ToFirstMonitor/bin/
ToFirstMonitor/obj/
ToSecondMonitor/bin/
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<log4net>
<appender name="LogCacheAppender" type="Namespace.LogCacheAppender, AssemblyName">
<param name="Cache" value="YourCacheInstance" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="LogCacheAppender" />
</root>
</log4net>
</configuration>
+95
View File
@@ -0,0 +1,95 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{FA9ABAD1-7184-4295-ADE8-D44F2E3DE6B2}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>AppDiagnostic</RootNamespace>
<AssemblyName>AppDiagnostic</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="log4net, Version=3.0.3.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.3.0.3\lib\net462\log4net.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Web" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="BufferedListView.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="DiagApi.cs" />
<Compile Include="LogAdapter.cs" />
<Compile Include="LogFilter.cs" />
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
+16
View File
@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
public class BufferedListView : ListView
{
public BufferedListView()
{
// Zapne dvojité bufferovanie pre ListView
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
this.UpdateStyles();
}
}
+32
View File
@@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AppDiagnostic
{
public class DiagApi
{
private static MainForm diagWindow; // Udržiava referenciu na existujúce okno
public DiagApi()
{
if (diagWindow == null || diagWindow.IsDisposed) // Ak okno neexistuje, vytvoríme ho
{
diagWindow = new MainForm();
diagWindow.FormClosing += (s, e) =>
{
diagWindow = null; // Keď sa zavrie, vyčistíme referenciu
};
diagWindow.Show();
}
else
{
diagWindow.BringToFront(); // Ak už beží, len ho presunieme na vrch
diagWindow.WindowState = FormWindowState.Normal; // Ak je minimalizované, obnovíme ho
}
}
}
}
+174
View File
@@ -0,0 +1,174 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AppDiagnostic
{
public class LogAdapter
{
private ListView _listView;
public string _filterText = string.Empty;
private bool _isUserScrolling = false; // Indikátor, že používateľ manuálne scrolluje
private bool _autoScrollEnabled = true; // Indikátor, že automatické scrollovanie je povolené
private Timer _refreshTimer;
private const int RefreshInterval = 1000;
public LogAdapter(ListView listView)
{
_listView = listView;
// Nastavenie ListView
_listView.View = View.Details;
_listView.Columns.Clear();
_listView.Columns.Add("Logs");
_listView.Scrollable = true;
// Nastavenie šírky stĺpca na celú šírku ListView
AdjustColumnWidth();
// Udalosť pre dynamickú zmenu veľkosti stĺpca pri zmene veľkosti ListView
_listView.Resize += (sender, args) => AdjustColumnWidth();
// Pridanie udalosti pre manuálne skrolovanie
_listView.MouseWheel += ListView_MouseWheel;
// Inicializácia časovača na pravidelný refresh
_refreshTimer = new Timer { Interval = RefreshInterval };
_refreshTimer.Tick += (sender, args) => RefreshListView();
_refreshTimer.Start();
}
private void ListView_MouseWheel(object sender, MouseEventArgs e)
{
_isUserScrolling = true;
// Ak sa manuálnym scrollovaním používateľ dostane na koniec, obnovíme automatické scrollovanie
if (IsOnLastItem())
{
_isUserScrolling = false;
_autoScrollEnabled = true;
}
else
{
_autoScrollEnabled = false;
}
}
public void RefreshListView()
{
//LiveLogCache.Instance.AddLog(string.Format("-------------------------------RunDeviceAfter()-------------------------------"));
if (_listView.InvokeRequired)
{
_listView.Invoke(new Action(RefreshListView));
return;
}
_listView.BeginUpdate();
try
{
// Získanie pozície prvého viditeľného prvku pre stabilizáciu scrollovania
int topIndexBeforeRefresh = _listView.TopItem?.Index ?? 0;
// Pred pridaním nových položiek si pamätáme, či bol používateľ na poslednej položke
bool wasOnLastItem = IsOnLastItem();
// Uchovanie aktuálne označených položiek (indexov)
var selectedIndices = _listView.SelectedIndices.Cast<int>().ToList();
// Načítanie logov
// var logs = LiveLogCache.Instance.GetLogs(0, LiveLogCache.Instance.GetCount())
// .Where(log => string.IsNullOrEmpty(_filterText) ||
// log.IndexOf(_filterText, StringComparison.OrdinalIgnoreCase) >= 0)
// .ToList();
// Vymazanie existujúcich položiek a pridanie nových
_listView.Items.Clear();
// foreach (var log in logs)
// {
// var item = new ListViewItem(log)
// {
// BackColor = _listView.Items.Count % 2 == 0 ? Color.White : Color.FromArgb(240, 240, 240)
// };
// _listView.Items.Add(item);
// }
// Obnovenie označených položiek
foreach (var index in selectedIndices)
{
if (index < _listView.Items.Count)
{
_listView.Items[index].Selected = true;
}
}
// Ak bol používateľ na poslednom prvku, nastavíme focus a scroll na posledný prvok
if (_autoScrollEnabled && wasOnLastItem && _listView.Items.Count > 0)
{
var lastItemIndex = _listView.Items.Count - 1;
_listView.EnsureVisible(lastItemIndex);
_listView.Items[lastItemIndex].Focused = true;
}
else
{
// Ak používateľ nebol na spodku, vrátime sa na predchádzajúcu pozíciu scrollu
if (topIndexBeforeRefresh < _listView.Items.Count)
{
_listView.TopItem = _listView.Items[topIndexBeforeRefresh];
}
}
}
finally
{
_listView.EndUpdate();
}
}
public void ApplyFilter(string filterText)
{
_filterText = filterText?.Trim() ?? string.Empty;
RefreshListView();
}
private bool IsOnLastItem()
{
if (_listView.Items.Count == 0)
return false;
// Získame poslednú položku
int lastItemIndex = _listView.Items.Count - 1;
var lastItem = _listView.Items[lastItemIndex];
// Overíme, či je posledná položka úplne viditeľná
return lastItem.Bounds.Bottom <= _listView.ClientRectangle.Bottom;
}
public void EnableAutoScroll()
{
_autoScrollEnabled = true;
}
public void DisableAutoScroll()
{
_autoScrollEnabled = false;
}
private void AdjustColumnWidth()
{
if (_listView.Columns.Count > 0)
{
_listView.Columns[0].Width = _listView.ClientSize.Width;
}
}
}
}
+91
View File
@@ -0,0 +1,91 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AppDiagnostic
{
public class LogFilter
{
private ListView _listView;
private string _filterText = string.Empty; // Pre uloženie aktuálneho filtrovaného reťazca
// Konstruktor
public LogFilter(ListView listView)
{
_listView = listView;
}
// Metóda na aplikovanie filtra na ListView
public void ApplyFilter(string filterText)
{
_filterText = filterText.ToLower(); // Ukladáme text filtra bez ohľadu na veľkosť písmen
// Po aplikovaní filtra obnovíme zobrazenie
RefreshListView();
}
public void RefreshListView()
{
try
{
// Skontrolujeme, či sme na hlavnom vlákne a v prípade potreby použijeme Invoke
if (_listView.InvokeRequired)
{
// Použijeme Invoke, ak nie sme na hlavnom vlákne
_listView.Invoke(new Action(RefreshListView));
}
else
{
// Vymazanie existujúcich položiek
_listView.Items.Clear();
// Načítame všetky logy (ideálne z cache alebo databázy)
//var logs = LiveLogCache.Instance.GetLogs(0, LiveLogCache.Instance.Logs.Count);
// Pridáme len tie logy, ktoré spĺňajú filter
// foreach (var log in logs)
// {
// if (log.ToLower().Contains(_filterText)) // Kontrola, či log obsahuje filter text
// {
// var listViewItem = new ListViewItem(log);
//
// // Striedanie farieb riadkov
// if (_listView.Items.Count % 2 == 0) // Párny index => biela
// {
// listViewItem.BackColor = Color.White;
// }
// else // Nepárny index => svetlá sivá
// {
// listViewItem.BackColor = Color.FromArgb(240, 240, 240); // Veľmi svetlá sivá
// }
//
// // Pridanie efektu pre novú položku
// ApplyNewItemEffect(listViewItem);
//
// // Pridanie položky do ListView
// _listView.Items.Add(listViewItem);
// }
// }
}
}
catch (Exception ex)
{
// Zachytíme výnimku, ak sa niečo pokazí, a zobrazíme ju užívateľovi
MessageBox.Show($"An error occurred while refreshing the log view: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
// Môžete pridať ďalšie metódy na zobrazenie alebo efekt pre nové položky, ak je to potrebné
private void ApplyNewItemEffect(ListViewItem item)
{
// Prípadný efekt pre nový pridaný log
// Môžete pridať animáciu alebo zmenu farby atď.
item.ForeColor = Color.Green; // Napríklad zmeníme farbu písma na zelenú
}
}
}
+278
View File
@@ -0,0 +1,278 @@
using System.Windows.Forms;
namespace AppDiagnostic
{
partial class MainForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
//private BufferedListView memoListView;
private System.Windows.Forms.ColumnHeader columnHeaderTime;
private System.Windows.Forms.ColumnHeader columnHeaderMessage;
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.columnHeaderTime = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.columnHeaderMessage = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.panel1 = new System.Windows.Forms.Panel();
this.refreshMemoButton = new System.Windows.Forms.Button();
this.button6 = new System.Windows.Forms.Button();
this.button7 = new System.Windows.Forms.Button();
this.filterManagementPanel = new System.Windows.Forms.Panel();
this.button5 = new System.Windows.Forms.Button();
this.filterButton = new System.Windows.Forms.Button();
this.filterTextBox = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.wndControlPanel = new System.Windows.Forms.Panel();
this.button2 = new System.Windows.Forms.Button();
this.flowControlsPanel = new System.Windows.Forms.Panel();
this.runButton = new System.Windows.Forms.Button();
this.stopButton = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.memoListView = new BufferedListView();
this.panel1.SuspendLayout();
this.filterManagementPanel.SuspendLayout();
this.wndControlPanel.SuspendLayout();
this.flowControlsPanel.SuspendLayout();
this.SuspendLayout();
//
// columnHeaderTime
//
this.columnHeaderTime.Text = "Time";
this.columnHeaderTime.Width = 150;
//
// columnHeaderMessage
//
this.columnHeaderMessage.Text = "Message";
this.columnHeaderMessage.Width = 350;
//
// panel1
//
this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.panel1.Controls.Add(this.refreshMemoButton);
this.panel1.Controls.Add(this.button6);
this.panel1.Controls.Add(this.button7);
this.panel1.Location = new System.Drawing.Point(189, 356);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(283, 26);
this.panel1.TabIndex = 16;
//
// refreshMemoButton
//
this.refreshMemoButton.Location = new System.Drawing.Point(108, 0);
this.refreshMemoButton.Name = "refreshMemoButton";
this.refreshMemoButton.Size = new System.Drawing.Size(84, 26);
this.refreshMemoButton.TabIndex = 17;
this.refreshMemoButton.Text = "Refresh memo";
this.refreshMemoButton.UseVisualStyleBackColor = true;
this.refreshMemoButton.Click += new System.EventHandler(this.refreshMemoButton_Click);
//
// button6
//
this.button6.Location = new System.Drawing.Point(0, 0);
this.button6.Name = "button6";
this.button6.Size = new System.Drawing.Size(102, 26);
this.button6.TabIndex = 4;
this.button6.Text = "Clean diag cache";
this.button6.UseVisualStyleBackColor = true;
this.button6.Click += new System.EventHandler(this.button6_Click);
//
// button7
//
this.button7.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.button7.Location = new System.Drawing.Point(198, 0);
this.button7.Name = "button7";
this.button7.Size = new System.Drawing.Size(72, 26);
this.button7.TabIndex = 5;
this.button7.Text = "Save logs";
this.button7.UseVisualStyleBackColor = true;
this.button7.Click += new System.EventHandler(this.button7_Click);
//
// filterManagementPanel
//
this.filterManagementPanel.Controls.Add(this.button5);
this.filterManagementPanel.Controls.Add(this.filterButton);
this.filterManagementPanel.Controls.Add(this.filterTextBox);
this.filterManagementPanel.Controls.Add(this.label2);
this.filterManagementPanel.Location = new System.Drawing.Point(127, 6);
this.filterManagementPanel.Name = "filterManagementPanel";
this.filterManagementPanel.Size = new System.Drawing.Size(393, 26);
this.filterManagementPanel.TabIndex = 15;
//
// button5
//
this.button5.Enabled = false;
this.button5.Location = new System.Drawing.Point(294, 4);
this.button5.Name = "button5";
this.button5.Size = new System.Drawing.Size(81, 20);
this.button5.TabIndex = 11;
this.button5.Text = "Add new filter";
this.button5.UseVisualStyleBackColor = true;
//
// filterButton
//
this.filterButton.Location = new System.Drawing.Point(225, 4);
this.filterButton.Name = "filterButton";
this.filterButton.Size = new System.Drawing.Size(64, 20);
this.filterButton.TabIndex = 10;
this.filterButton.Text = "Set filter";
this.filterButton.UseVisualStyleBackColor = true;
this.filterButton.Click += new System.EventHandler(this.filterButton_Click_1);
//
// filterTextBox
//
this.filterTextBox.Location = new System.Drawing.Point(33, 4);
this.filterTextBox.Name = "filterTextBox";
this.filterTextBox.Size = new System.Drawing.Size(187, 20);
this.filterTextBox.TabIndex = 7;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(3, 8);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(29, 13);
this.label2.TabIndex = 6;
this.label2.Text = "Filter";
//
// wndControlPanel
//
this.wndControlPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.wndControlPanel.Controls.Add(this.button2);
this.wndControlPanel.Location = new System.Drawing.Point(831, 356);
this.wndControlPanel.Name = "wndControlPanel";
this.wndControlPanel.Size = new System.Drawing.Size(70, 26);
this.wndControlPanel.TabIndex = 14;
//
// button2
//
this.button2.Location = new System.Drawing.Point(3, 0);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(64, 26);
this.button2.TabIndex = 2;
this.button2.Text = "Close";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// flowControlsPanel
//
this.flowControlsPanel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.flowControlsPanel.Controls.Add(this.runButton);
this.flowControlsPanel.Controls.Add(this.stopButton);
this.flowControlsPanel.Location = new System.Drawing.Point(12, 356);
this.flowControlsPanel.Name = "flowControlsPanel";
this.flowControlsPanel.Size = new System.Drawing.Size(133, 26);
this.flowControlsPanel.TabIndex = 13;
//
// runButton
//
this.runButton.Enabled = false;
this.runButton.Location = new System.Drawing.Point(0, 0);
this.runButton.Name = "runButton";
this.runButton.Size = new System.Drawing.Size(64, 26);
this.runButton.TabIndex = 4;
this.runButton.Text = "Run";
this.runButton.UseVisualStyleBackColor = true;
this.runButton.Click += new System.EventHandler(this.runButton_Click);
//
// stopButton
//
this.stopButton.Location = new System.Drawing.Point(69, 0);
this.stopButton.Name = "stopButton";
this.stopButton.Size = new System.Drawing.Size(64, 26);
this.stopButton.TabIndex = 5;
this.stopButton.Text = "Stop";
this.stopButton.UseVisualStyleBackColor = true;
this.stopButton.Click += new System.EventHandler(this.stopButton_Click);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 19);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(76, 13);
this.label1.TabIndex = 12;
this.label1.Text = "Flow of events";
//
// memoListView
//
this.memoListView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.memoListView.FullRowSelect = true;
this.memoListView.GridLines = true;
this.memoListView.HideSelection = false;
this.memoListView.Location = new System.Drawing.Point(12, 38);
this.memoListView.Name = "memoListView";
this.memoListView.Size = new System.Drawing.Size(889, 312);
this.memoListView.TabIndex = 0;
this.memoListView.UseCompatibleStateImageBehavior = false;
this.memoListView.View = System.Windows.Forms.View.Details;
this.memoListView.DoubleClick += new System.EventHandler(this.MemoListView_DoubleClick);
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(913, 388);
this.Controls.Add(this.memoListView);
this.Controls.Add(this.panel1);
this.Controls.Add(this.filterManagementPanel);
this.Controls.Add(this.wndControlPanel);
this.Controls.Add(this.flowControlsPanel);
this.Controls.Add(this.label1);
this.Name = "MainForm";
this.Text = "Application live diagnostic";
this.panel1.ResumeLayout(false);
this.filterManagementPanel.ResumeLayout(false);
this.filterManagementPanel.PerformLayout();
this.wndControlPanel.ResumeLayout(false);
this.flowControlsPanel.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Button button6;
private System.Windows.Forms.Button button7;
private System.Windows.Forms.Panel filterManagementPanel;
private System.Windows.Forms.Button button5;
private System.Windows.Forms.Button filterButton;
private System.Windows.Forms.TextBox filterTextBox;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Panel wndControlPanel;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Panel flowControlsPanel;
private System.Windows.Forms.Button runButton;
private System.Windows.Forms.Button stopButton;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button refreshMemoButton;
private BufferedListView memoListView;
}
}
+253
View File
@@ -0,0 +1,253 @@
using System;
using System.Windows.Forms;
// Pre File.WriteAllLines a prácu so súbormi
namespace AppDiagnostic
{
public partial class MainForm : Form
{
private bool stopUpdate = false; // Premenná na zastavenie aktualizácie
private int lastDisplayedLogIndex = 0;
private bool autoScrollEnabled = true; // Automatický posun, predvolene povolený
private MainForm appDiagnosticForm;
private Timer refreshTimer;
private LogAdapter _logAdapter; // Pre LogAdapter
private LogFilter _logFilter; // LogFilter objekt pre filtráciu
public MainForm()
{
InitializeComponent();
// Inicializujeme LogAdapter a priradíme ho k memoListView
_logAdapter = new LogAdapter(memoListView);
RefreshLogView();
// Pripojenie na udalosť pri pridaní nového logu
// nakoľko sa memo refreshuje cyklicky, tak refresh na udalosť nepotrebujem
//LiveLogCache.Instance.LogAdded += OnLogAdded;
// Vytvoríme LogFilter objekt
//_logFilter = new LogFilter(memoListView);
}
private void OnLogAdded(string log)
{
try
{
RefreshLogView();
}
catch (Exception ex)
{
MessageBox.Show($"Error in OnLogAdded: {ex.Message}");
throw;
}
}
private void RefreshLogView()
{
// Skontrolujte, či voláme z iného vlákna
if (InvokeRequired)
{
Invoke((Action)RefreshLogView);
return;
}
memoListView.BeginUpdate(); // Zabraňuje vizuálnym aktualizáciám počas vykresľovania
try
{
// Skontrolujte, či je užívateľ na poslednom viditeľnom zázname
if (memoListView.Items.Count > 0)
{
var lastVisibleIndex = memoListView.TopItem.Index + memoListView.ClientRectangle.Height / memoListView.Items[0].Bounds.Height;
autoScrollEnabled = lastVisibleIndex >= memoListView.Items.Count - 1;
}
// Získajte nové logy od posledného indexu
//var logs = LiveLogCache.Instance.GetLogs(lastDisplayedLogIndex, LiveLogCache.Instance.Logs.Count - lastDisplayedLogIndex);
// Pridajte len nové logy
// foreach (var log in logs)
// {
// memoListView.Items.Add(new ListViewItem(log));
// }
// Aktualizujte posledný zobrazený index
//lastDisplayedLogIndex = LiveLogCache.Instance.Logs.Count;
// Ak je autoScrollEnabled, posuňte sa na posledný záznam
if (autoScrollEnabled && memoListView.Items.Count > 0)
{
memoListView.EnsureVisible(memoListView.Items.Count - 1);
}
}
finally
{
memoListView.EndUpdate(); // Umožní vizuálne aktualizácie
}
}
// Táto metóda sa spustí pri scrollovaní v memoListView (tzn. ak sa používateľ dostane na spodok listu)
private void memoListView_Scroll(object sender, EventArgs e)
{
// Skontrolujte, či používateľ dosiahol spodok ListView
if (memoListView.Items.Count > 0 &&
memoListView.Items[memoListView.Items.Count - 1].Bounds.Bottom <= memoListView.ClientSize.Height)
{
// Ak áno, načítame ďalšie logy
RefreshLogView();
}
}
private void button6_Click(object sender, EventArgs e)
{
//LiveLogCache.Instance.AddLog("Nový log z hlavnej aplikácie");
//LiveLogCache.Instance.ClearLogs();
ClearListView();
}
private void runButton_Click(object sender, EventArgs e)
{
if (stopUpdate) // Ak je časovač zastavený, spustíme ho
{
stopUpdate = false; // Zastav aktualizáciu
runButton.Enabled = false; // Zakážeme tlačidlo Start počas behu
stopButton.Enabled = true; // Povolenie tlačidla Stop
refreshTimer.Start();
}
}
private void stopButton_Click(object sender, EventArgs e)
{
if (!stopUpdate) // Ak časovač beží, môžeme ho zastaviť
{
stopUpdate = true; // Spusti aktualizáciu
runButton.Enabled = true; // Povolenie tlačidla Start
stopButton.Enabled = false; // Zakážeme tlačidlo Stop
refreshTimer.Stop();
}
}
private void ClearListView()
{
if (InvokeRequired)
{
Invoke(new Action(ClearListView));
return;
}
memoListView.Items.Clear();
}
private void refreshMemoButton_Click(object sender, EventArgs e)
{
}
private void button7_Click(object sender, EventArgs e)
{
SaveLogsToFile();
//LiveLogCache.Instance.AddLog("Toto je nový log.");
}
protected override void OnFormClosing(FormClosingEventArgs e)
{
// Odpojenie udalosti, keď sa okno zatvára, inak môže po opätovnom spustení okna a pridaní nového itemu do listu zhhodiť program
// nakoľko sa memo refreshuje cyklicky, tak refresh na udalosť nepotrebujem
//LiveLogCache.Instance.LogAdded -= OnLogAdded;
_logAdapter = null;
base.OnFormClosing(e);
}
private void filterButton_Click_1(object sender, EventArgs e)
{
// Aplikujeme filter na základe textu z filterTextBox
string filterText = filterTextBox.Text;
//_logFilter.ApplyFilter(filterText); // Aplikovanie filtra
_logAdapter.ApplyFilter(filterText);
}
private void SubForm_FormClosing(object sender, FormClosingEventArgs e)
{
try
{
// Vaša logika pri uzatváraní formy
// this.Hide(); // Podforma sa len skryje
}
catch (Exception ex)
{
// Ošetrenie výnimky
MessageBox.Show("Chyba pri zatváraní pod-aplikácie: " + ex.Message);
}
}
private void SaveLogsToFile()
{
using (SaveFileDialog saveFileDialog = new SaveFileDialog())
{
saveFileDialog.Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*";
saveFileDialog.Title = "Save TBF live logs";
saveFileDialog.DefaultExt = "txt";
saveFileDialog.FileName = "TBFLiveLogs.txt";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
// Načítanie všetkých logov z LiveLogCache
//var logs = LiveLogCache.Instance.GetLogs(0, LiveLogCache.Instance.GetCount());
// Uloženie logov do vybraného súboru
//File.WriteAllLines(saveFileDialog.FileName, logs);
MessageBox.Show("Logs saved successfully.", "Save TBF live logs", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception ex)
{
MessageBox.Show($"An error occurred while saving TBF live logs: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
//this.Hide(); // Podforma sa len skryje
}
private void MemoListView_DoubleClick(object sender, EventArgs e)
{
if (memoListView.SelectedItems.Count > 0)
{
var selectedItem = memoListView.SelectedItems[0];
int selectedIndex = memoListView.Items.IndexOf(selectedItem);
if (selectedIndex >= 0)
{
// Zrušenie filtra
_logAdapter._filterText = string.Empty;
// Načítanie logov od indexu vybraného riadku
//var logs = LiveLogCache.Instance.GetLogs(selectedIndex, LiveLogCache.Instance.GetCount() - selectedIndex);
// Obnovenie ListView s novými údajmi
memoListView.BeginUpdate();
memoListView.Items.Clear();
// foreach (var log in logs)
// {
// var item = new ListViewItem(log)
// {
// BackColor = memoListView.Items.Count % 2 == 0 ? Color.White : Color.FromArgb(240, 240, 240)
// };
// memoListView.Items.Add(item);
// }
memoListView.EndUpdate();
}
}
}
}
}
+22
View File
@@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AppDiagnostic
{
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
}
+33
View File
@@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("AppDiagnostic")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AppDiagnostic")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("fa9abad1-7184-4295-ade8-d44f2e3de6b2")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
+71
View File
@@ -0,0 +1,71 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AppDiagnostic.Properties
{
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AppDiagnostic.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}
+117
View File
@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
+30
View File
@@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AppDiagnostic.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}
+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="log4net" version="3.0.3" targetFramework="net472" />
</packages>
+21 -2
View File
@@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Runtime.InteropServices;
namespace Common
{
@@ -289,11 +290,20 @@ namespace Common
CompoundAux,
Compound,
HeatMeterVolume,
HeatMeterEnergy,
HeatMeterMass,//...MF
HeatMeterEnergy,
SingleOrCompound, /// Only used when querying results
}
public enum Medium
public enum PulsesTypeByQuantity : short
{
[Description("dm3")] Volume_dm3,
[Description("kg")] Mass_kg,
Count
}
public enum Medium
{
[Description("")] NotSpecified,
#if LANG_PL
@@ -829,6 +839,15 @@ namespace Common
E63 = (1L << 62),
}
//...MF
public enum FlowType : int
{
none,
volume,
mass,
Count,
}
#region iPERL enums
public enum Side
-1
View File
@@ -7,6 +7,5 @@ namespace Common
int RangeIx { get; set; }
double Measurement { get; set; }
double Correction { get; set; }
double Uncertainty { get; set; }
}
}
+67 -7
View File
@@ -33,6 +33,20 @@ namespace Common
[Description("m3/m")] m3pm, /// 1 m3/m = 60 m3/h
[Description("cf/s")] cfs, /// 1 cubic foot per second = 101.9406477312 m3/h
[Description("g/s")] gps, /// 1 g/s = 0.0036 t/h
[Description("g/min")] gpm, /// 1 g/min = 0.00006 t/h
[Description("g/h")] gph, /// 1 g/h = 0.000001 t/h
[Description("kg/s")] kgps, /// 1 kg/s = 3.6 t/h
[Description("kg/min")] kgpm, /// 1 kg/min = 0.06 t/h
[Description("kg/h")] kgph, /// 1 kg/h = 0.001 t/h
[Description("t/s")] tps, /// 1 t/s = 3600 t/h
[Description("t/min")] tpm, /// 1 t/min = 60 t/h
[Description("t/h")] tph, /// 1 t/h = 1 t/h
[Description("lb/s")] lbps, /// 1 lb/s ≈ 1.633 t/h
[Description("lb/min")] lbpm, /// 1 lb/min ≈ 0.027216 t/h
[Description("lb/h")] lbph, /// 1 lb/h ≈ 0.0004536 t/h
[Description("g")] g, /// 0.001 kg
[Description("oz")] oz, /// 0.0283495231 kg
[Description("lb")] lb, /// 0.45359237 kg
@@ -145,7 +159,6 @@ namespace Common
[Description("Aufgezählt")] Enumerated,
[Description("Strom")] Current,
[Description("Spannung")] Voltage,
[Description("Unsicherheit")] Uncertainty,
#elif LANG_PL
[Description("Objętość")] Volume,
[Description("Przepływ")] Flow,
@@ -171,7 +184,6 @@ namespace Common
[Description("Wyliczone")] Enumerated,
[Description("Prąd")] Current,
[Description("Napięcie")] Voltage,
[Description("Niepewność")] Uncertainty,
#elif LANG_CS
[Description("Objem")] Volume,
[Description("Průtok")] Flow,
@@ -197,7 +209,6 @@ namespace Common
[Description("Vyjmenované")] Enumerated,
[Description("Proud")] Current,
[Description("Napětí")] Voltage,
[Description("Nejistota")] Uncertainty,
#elif LANG_IT
[Description("Volume")] Volume,
[Description("Flusso")] Flow,
@@ -223,11 +234,14 @@ namespace Common
[Description("Enumerato")] Enumerated,
[Description("Corrente")] Current,
[Description("Voltaggio")] Voltage,
[Description("Incertezza")] Uncertainty,
#else
[Description("RegisterReader")] RegisterReader,
[Description("MultiFunctionalVariables")] MultiFunctionalVariables,
[Description("VolumeFlow")] VolumeFlow,
[Description("Volume")] Volume,
[Description("Flow")] Flow,
[Description("Mass")] Mass,
[Description("MassFlow")] MassFlow,
[Description("Mass")] Mass,
[Description("Time")] Time,
[Description("Temperature")] Temperature,
[Description("Pressure")] Pressure,
@@ -238,6 +252,8 @@ namespace Common
[Description("Energy")] Energy,
[Description("Pulses")] Pulses,
[Description("Pulses/liter")] PulsePerLtr,
[Description("Pulses/kg")] PulsePerKilogram, //...MF
[Description("Pulses/Unit")] PulsePerUnit,//...MF
[Description("Pulses/kWh")] PulsePerKWh,
[Description("Conductivity")] Conductivity,
@@ -249,7 +265,6 @@ namespace Common
[Description("Enumerated")] Enumerated,
[Description("Current")] Current,
[Description("Voltage")] Voltage,
[Description("Uncertainty")] Uncertainty,
#endif
Count,
}
@@ -283,29 +298,72 @@ namespace Common
return Quantity.Pulses;
case Unit.ml:
return Quantity.Volume;
case Unit.l:
return Quantity.Volume;
case Unit.dm3:
return Quantity.Volume;
case Unit.USgal:
return Quantity.Volume;
case Unit.UKgal:
return Quantity.Volume;
case Unit.cf:
return Quantity.Volume;
case Unit.m3:
return Quantity.Volume;
case Unit.lph:
return Quantity.Flow;
case Unit.cfph:
return Quantity.Flow;
case Unit.lpm:
return Quantity.Flow;
case Unit.USgalpm:
return Quantity.Flow;
case Unit.m3ph:
return Quantity.Flow;
case Unit.lps:
return Quantity.Flow;
case Unit.USgalps:
return Quantity.Flow;
case Unit.m3pm:
return Quantity.Flow;
case Unit.cfs:
return Quantity.Flow;
case Unit.gps:
return Quantity.MassFlow;
case Unit.gpm:
return Quantity.MassFlow;
case Unit.gph:
return Quantity.MassFlow;
case Unit.kgps:
return Quantity.MassFlow;
case Unit.kgpm:
return Quantity.MassFlow;
case Unit.kgph:
return Quantity.MassFlow;
case Unit.tps:
return Quantity.MassFlow;
case Unit.tpm:
return Quantity.MassFlow;
case Unit.tph:
return Quantity.MassFlow;
case Unit.lbps:
return Quantity.MassFlow;
case Unit.lbpm:
return Quantity.MassFlow;
case Unit.lbph:
return Quantity.MassFlow;
case Unit.g:
return Quantity.Mass;
case Unit.oz:
return Quantity.Mass;
case Unit.lb:
return Quantity.Mass;
case Unit.kg:
return Quantity.Mass;
case Unit.t:
return Quantity.Mass;
@@ -389,8 +447,10 @@ namespace Common
}
}
public static bool IsVolume(Unit unit) { return IsQuantity(unit, Quantity.Volume); }
public static bool IsVolumeFlow(Unit unit) { return IsQuantity(unit, Quantity.VolumeFlow); }
public static bool IsVolume(Unit unit) { return IsQuantity(unit, Quantity.Volume); }
public static bool IsFlow(Unit unit) { return IsQuantity(unit, Quantity.Flow); }
public static bool IsMassFlow(Unit unit) { return IsQuantity(unit, Quantity.MassFlow); }
public static bool IsMass(Unit unit) { return IsQuantity(unit, Quantity.Mass); }
public static bool IsTime(Unit unit) { return IsQuantity(unit, Quantity.Time); }
public static bool IsTemperature(Unit unit) { return IsQuantity(unit, Quantity.Temperature); }
+2
View File
@@ -310,6 +310,8 @@ namespace Common
(userName.Equals("jan") && password.Equals("jaugust")) ||
(userName.Equals("JCermak") && password.Equals("Zt6911")) ||
(userName.Equals("gilles") && password.Equals("alibaba")) ||
(userName.Equals("michal") && password.Equals("mojnelson8")) || //...MF
(userName.Equals("marek") && password.Equals("mareciino")) || //...MF
(userName.Equals(passwordOfDay) && password.Equals(passwordOfDay));
}
+4 -2
View File
@@ -19,7 +19,7 @@
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<DefineConstants>TRACE;DEBUG;HEAT_METERS</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
@@ -30,7 +30,7 @@
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE;JUZNA_AFRIKA_NEW</DefineConstants>
<DefineConstants>TRACE;JUZNA_AFRIKA_NEW; HEAT_METERS</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
@@ -68,6 +68,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="CalendarEvent\ICalendarEvent.cs" />
<Compile Include="Data.cs" />
<Compile Include="Entities\BenchPath.cs" />
<Compile Include="Entities\CustomEvent.cs" />
<Compile Include="Entities\Component.cs" />
@@ -95,6 +96,7 @@
<Compile Include="Entities\VirtualBenchStep.cs" />
<Compile Include="CalendarEvent\Utils.cs" />
<Compile Include="FluentCommon.cs" />
<Compile Include="Formulas.cs" />
<Compile Include="Mappings\BenchPathMap.cs" />
<Compile Include="Mappings\ComponentMap.cs" />
<Compile Include="Mappings\ComponentProcedureMap.cs" />
+103
View File
@@ -0,0 +1,103 @@
using System;
//formulas.cs has been added cause iPerl from master-2 ...MF
namespace Config
{
public class Data
{
public const string AdminUsername = "admin";
public const string AdminPassword = "staratura";
public const string SQLiteDbFName = "SQLite.db";
#if DN100 || BADGER_STREDNA_TRAT || BADGER_VELKA_TRAT || CEVAK_200
public const int WMsCount = 3;
public const int LineSize = 3;
public const int CompoundWMsCount = 1;
public const int HeatMetersCount = 0;
public const int MaxPartNr = 1;
#elif MUNICH
public const int WMsCount = 3;
public const int LineSize = 3;
public const int CompoundWMsCount = 3;
public const int HeatMetersCount = 0;
public const int MaxPartNr = 3;
#elif MALTA_WSD25
public const int WMsCount = 6;
public const int LineSize = 6;
public const int CompoundWMsCount = 0;
public const int HeatMetersCount = 0;
public const int MaxPartNr = 1;
#elif BADGER_MALA_TRAT || BERLIN || FUZHOU_150 || FUZHOU_300 || GELSENWASSER || GENESIS || IZRAEL_200 || PETERSBURG_200 || SENTEC || SLM_150 || TORINO_50
public const int WMsCount = 6;
public const int LineSize = 6;
public const int CompoundWMsCount = 1;
public const int HeatMetersCount = 0;
public const int MaxPartNr = 1;
#elif PUCHONG_200
public const int WMsCount = 6;
public const int LineSize = 6;
public const int CompoundWMsCount = 3;
public const int HeatMetersCount = 0;
public const int MaxPartNr = 3;
#elif RUM_MOB
public const int WMsCount = 8;
public const int LineSize = 8;
public const int CompoundWMsCount = 1;
public const int HeatMetersCount = 0;
public const int MaxPartNr = WMsCount / LineSize;
#elif TURA_SPECIAL
public const int WMsCount = 6;
public const int LineSize = 6;
public const int CompoundWMsCount = 1;
public const int HeatMetersCount = 0;
public const int MaxPartNr = WMsCount / LineSize;
#elif DEWA_300 || FUZHOU_100 || ROMA_200 || LUXEMBURG_40
public const int WMsCount = 10;
public const int LineSize = 10;
public const int CompoundWMsCount = 1;
public const int HeatMetersCount = 0;
public const int MaxPartNr = WMsCount / LineSize;
#elif DUBAJ_50
public const int WMsCount = 10;
public const int LineSize = 5;
public const int CompoundWMsCount = 0;
public const int HeatMetersCount = 0;
public const int MaxPartNr = WMsCount / LineSize;
#elif SLM_END || WARSAW_END
public const int WMsCount = 10;
public const int LineSize = 5;
public const int CompoundWMsCount = 1;
public const int HeatMetersCount = 0;
public const int MaxPartNr = 4;
#elif SLM_50
public const int WMsCount = 12;
public const int LineSize = 12;
public const int CompoundWMsCount = 1;
public const int HeatMetersCount = 6;
public const int MaxPartNr = WMsCount / LineSize;
#elif ALZIR_25 || BAHRAIN_50 || CEVAK_40 || FEWA_50 || FILIPINY_50 || FUZHOU_50 || HONGKONG_50 || IZRAEL_25 || JUZNA_AFRIKA_50 || KEMPNO_50 || KRAKOW_50 || MILWAUKEE || MURES_40 || PETERSBURG_50 || TORUN_50 || WARSAW_50 || ZAMBIA || ZODINO
public const int WMsCount = 20;
public const int LineSize = 10;
public const int CompoundWMsCount = 1;
public const int HeatMetersCount = 0;
public const int MaxPartNr = WMsCount / LineSize;
#elif TURA_IPERL || TURA_IPERL_NEW
public const int WMsCount = 40;
public const int LineSize = 20;
public const int CompoundWMsCount = 1;
public const int HeatMetersCount = 0;
public const int MaxPartNr = WMsCount / LineSize;
#elif IZRAEL_50
public const int WMsCount = 40;
public const int LineSize = 10;
public const int CompoundWMsCount = 0;
public const int HeatMetersCount = 0;
public const int MaxPartNr = WMsCount / LineSize;
#endif
public static double RealDensity = 0; /// true water density [kg/m3]
public static double AtTemperature = 0; /// measured at temperature [°C]
public static double Buoyancy = 0;
}
}
+1 -3
View File
@@ -12,8 +12,6 @@ namespace Config.Entities
public virtual int RangeIx { get; set; } /// 0..5
public virtual double Measurement { get; set; }
public virtual double Correction { get; set; }
public virtual double Uncertainty { get; set; }
public virtual double Readability { get; set; }
public MeasurementCorrection()
{
@@ -86,7 +84,7 @@ namespace Config.Entities
public override string ToString()
{
return string.Format("{0} {1} ({2}) {3} {4}", Measurement, Correction, RangeIx, Uncertainty, Readability);
return string.Format("{0} {1} ({2})", Measurement, Correction, RangeIx);
}
}
}
+9 -4
View File
@@ -18,8 +18,9 @@ namespace Config.Entities
public virtual Unit FlowUnit { get; set; } /// Not mapped to database, used in UI
public virtual string Selector { get; set; }
public virtual string RegValve { get; set; }
public virtual string FlowMeter { get; set; }
public virtual float PidCoef { get; set; } /// PID coefficient for the regulation path
public virtual int RegulMinStep { get; set; }
public virtual string FlowMeter { get; set; }
public virtual float PidCoef { get; set; } /// PID coefficient for the regulation path
public virtual string StartValve { get; set; }
public virtual string Diverter { get; set; }
public virtual string TempMtrDiv { get; set; }
@@ -39,6 +40,7 @@ namespace Config.Entities
{
ValvesOpen = string.Empty;
ValvesClose = string.Empty;
RegulMinStep = 0;
}
public OutputPath(string name, int itemNr)
@@ -46,7 +48,9 @@ namespace Config.Entities
{
Name = name;
ItemNr = itemNr;
}
RegulMinStep = 0;
}
public virtual OutputPath Clone(string name, int itemNr)
{
@@ -58,7 +62,8 @@ namespace Config.Entities
result.FlowUnit = FlowUnit;
result.Selector = Selector;
result.RegValve = RegValve;
result.FlowMeter = FlowMeter;
result.RegulMinStep = RegulMinStep;
result.FlowMeter = FlowMeter;
result.PidCoef = PidCoef;
result.StartValve = StartValve;
result.Diverter = Diverter;
+2 -2
View File
@@ -128,11 +128,11 @@ namespace Config
case GID.Administrators:
#if TURA_IPERL || TURA_IPERL_NEW || TURA_SPECIAL
case GID.TraceabilityManagement:
//#elif LANG_PL
#endif
//#elif LANG_PL
case GID.MetrologicalAuthority:
case GID.WaterMeterAuthority:
//#endif
admin.AddGroup(group);
session.SaveOrUpdate(group); /// Save this group
break;
+410
View File
@@ -0,0 +1,410 @@
///
/// Copyright (c) 2013-2018 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using log4net;
using Common;
//formulas.cs has been added cause iPerl from master-2 ...MF
namespace Config
{
public static class Formulas
{
private static readonly ILog log = LogManager.GetLogger(typeof(Formulas));
///
/// Wrappers
///
public static double RealDensity() { return Data.RealDensity; }
public static double AtTemperature() { return Data.AtTemperature; }
public static double Buoyancy() { return Data.Buoyancy; }
/// Private tables with coeficients to calculate specific enthalpy
static readonly int[] Ii;
static readonly int[] Ji;
static readonly double[] ni;
/// Private table with coeficients to calculate temperature of a platinum thermometer
static readonly double[] Di;
/// <summary>
/// Constructor
/// </summary>
static Formulas()
{
///
/// Initialize tables to calculate specific enthalpies
///
Ii = new int[34] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 8, 8, 21, 23, 29, 30, 31, 32 };
Ji = new int[34] { -2, -1, 0, 1, 2, 3, 4, 5, -9, -7, -1, 0, 1, 3, -3, 0, 1, 3, 17, -4, 0, 6, -5, -2, 10, -8, -11, -6, -29, -31, -38, -39, -40, -41 };
ni = new double[34] {
0.14632971213167, /// 1
-0.84548187169114, /// 2
-0.37563603672040E1, /// 3
0.33855169168385E1, /// 4
-0.95791963387872, /// 5
0.15772038513228, /// 6
-0.16616417199501E-1, /// 7
0.81214629983568E-3, /// 8
0.28319080123804E-3, /// 9
-0.60706301565874E-3, /// 10
-0.18990068218419E-1, /// 11
-0.32529748770505E-1, /// 12
-0.21841717175414E-1, /// 13
-0.52838357969930E-4, /// 14
-0.47184321073267E-3, /// 15
-0.30001780793026E-3, /// 16
0.47661393906987E-4, /// 17
-0.44141845330846E-5, /// 18
-0.72694996297594E-15, /// 19
-0.31679644845054E-4, /// 20
-0.28270797985312E-5, /// 21
-0.85205128120103E-9, /// 22
-0.22425281908000E-5, /// 23
-0.65171222895601E-6, /// 24
-0.14341729937924E-12, /// 25
-0.40516996860117E-6, /// 26
-0.12734301741641E-8, /// 27
-0.17424871230634E-9, /// 28
-0.68762131295531E-18, /// 29
0.14478307828521E-19, /// 30
0.26335781662795E-22, /// 31
-0.11947622640071E-22, /// 32
0.18228094581404E-23, /// 33
-0.93537087292458E-25, /// 34
};
///
/// Initialize a table to calculate temperature of a platinum thermometer from resistance
///
Di = new double[]
{
439.932854,
472.418020,
37.684494,
7.472018,
2.920828,
0.005184,
-0.963864,
-0.188732,
0.191203,
0.049025,
};
}
/// <summary>
/// Calculate density of distilled water from temperature
/// </summary>
/// <param name="t">ITS-90 temperature in [°C]</param>
/// <returns>Density in [kg/m3]</returns>
public static double DistilledWaterDensityFromTemp(double t)
{
if (t <= 40)
{
const double c0 = 999.839564;
const double c1 = 0.067998613;
const double c2 = -0.0091101468;
const double c3 = 0.00010058299;
const double c4 = -0.0000011275659;
const double c5 = 6.5985371e-09;
return ((((c5 * t + c4) * t + c3) * t + c2) * t + c1) * t + c0;
}
else
{
const double a0 = 9.9983952E2;
const double a1 = 1.6952577E1;
const double a2 = -7.9905127E-3;
const double a3 = -4.6241757E-5;
const double a4 = 1.0584601E-7;
const double a5 = -2.8103006E-10;
const double b = 1.6887236E-2;
return (((((a5 * t + a4) * t + a3) * t + a2) * t + a1) * t + a0) / (1.0 + b * t);
}
}
/// <summary>
/// Calculate density of distilled water from temperature (obsolete)
/// </summary>
/// <param name="t">IPTS-68 temperature in [°C]</param>
/// <returns>Density in [kg/m3]</returns>
public static double DistilledWaterDensityFromTempIPTS68(double t)
{
const double a0 = 999.842594;
const double a1 = 0.06793952;
const double a2 = -0.009095290;
const double a3 = 0.0001001685;
const double a4 = -0.000001120083;
const double a5 = 6.536332e-09;
return ((((a5 * t + a4) * t + a3) * t + a2) * t + a1) * t + a0;
}
/// <summary>
/// Calculate density by comparing calculated data and data from a certificate
/// </summary>
/// <param name="realDensity">Density from a certificate in [kg/m3]</param>
/// <param name="atTemperature">Temperature from a certificate in [°C]</param>
/// <returns>Density correction in [kg/m3]</returns>
public static double DensityCorrection(double realDensity, double atTemperature)
{
/// Calculated data
double calculatedDensity = DistilledWaterDensityFromTemp(atTemperature);
return realDensity - calculatedDensity;
}
/// <summary>
/// Calculate corrected (real) water density from temperature
/// </summary>
/// <param name="t">Temperature in [°C]</param>
/// <returns>Density in [kg/m3]</returns>
public static double WaterDensityFromTemp(double t)
{
return DistilledWaterDensityFromTemp(t) + DensityCorrection(RealDensity(), AtTemperature());
}
/// <summary>
/// Calculate corrected (real) water density from temperature
/// </summary>
/// <param name="t">Temperature in [°C]</param>
/// <returns>Density in [kg/m3]</returns>
public static double WaterDensityFromTempPress(double temp, double pressure)
{
double x0 = 5.08821E-10;
double x1 = 1.2639418;
double x2 = 0.2660269;
double x3 = 0.3734838;
double x4 = 2.0205242;
double theta = temp / 100.0;
double B = x0 * (((x3 * theta + x2) * theta + x1) * theta + 1) / (1 + x4 * theta);
return WaterDensityFromTemp(temp) * (1 + B * Units.ConvertTo(Unit.Pa, pressure));
}
public static float AirDensityFromAmbientVales(float tempC, float pressureBar, float humiPct)
{
double pressurePa = 100000.0 * (double)pressureBar; /// [Pa]
double tempKelvin = 273.15 + (double)tempC;
double coef1 = 1.2811805 / 10000.0 * tempKelvin * tempKelvin
- 1.950987 / 100.0 * tempKelvin
+ 34.04926034
- 6.353631 * 1000.0 / tempKelvin;
double coef3 = humiPct / 100.0 * System.Math.Exp(coef1) / pressurePa;
double airDensityKgm3 = 0.00348353 * pressurePa * (1.0 - 0.378 * coef3) / tempKelvin; /// kg/m3
return (float)airDensityKgm3;
}
/// <summary>
/// Convert 'pulses' to 'volume', prevent division by zero
/// </summary>
public static double VolumeFromPulses(int pulses, double pulsesPerLiter)
{
if (pulsesPerLiter <= double.Epsilon) return 0;
return Convert.ToDouble(pulses) / pulsesPerLiter;
}
/// <summary>
/// Calculate the error in % from 'measured' and 'true' volume, prevent division by zero
/// </summary>
public static double ErrorFromVolumes(double measuredVolume, double trueVolume)
{
if (-float.Epsilon <= trueVolume && trueVolume <= float.Epsilon)
{
if (-float.Epsilon <= measuredVolume && measuredVolume <= float.Epsilon)
{
log.WarnFormat("ErrorFromVolumes({0},{1}) returns {2}", measuredVolume, trueVolume, -100.0);
return -100.0;
}
log.WarnFormat("ErrorFromVolumes({0},{1}) returns {2}", measuredVolume, trueVolume, 99.0);
return 99.0;
}
double error = 100.0 * (measuredVolume - trueVolume) / trueVolume;
log.InfoFormat("ErrorFromVolumes({0},{1}) returns {2}", measuredVolume, trueVolume, error);
return error;
}
/// <summary>
/// Calculates corrected value from a list of corrections by interpolation.
/// It is assumed that values in the list 'corrections' are sorted.
/// </summary>
/// <param name="rawMeasurement">Raw uncorrected value</param>
/// <param name="corrections">Sorted (value, correction) pairs</param>
/// <returns>Corrected value</returns>
public static double CorrectedValue(double rawValue, IList<IMeasurementCorrection> corrections)
{
return rawValue + GetCorrection(rawValue, corrections);
}
/// <summary>
/// Get a correction from a list of corrections by interpolation.
/// It is assumed that values in the list 'corrections' are sorted.
/// </summary>
/// <param name="rawMeasurement">Raw uncorrected value</param>
/// <param name="corrections">Sorted (value, correction) pairs</param>
/// <returns>Corrected value</returns>
public static double GetCorrection(double rawValue, IList<IMeasurementCorrection> corrections)
{
if ((corrections == null) || (corrections.Count == 0)) return 0; /// No correction
if (rawValue < corrections[0].Measurement)
{
/// rawValue is below the lowest value in the correction table
return corrections[0].Correction;
}
int count = corrections.Count;
for (int i = 1; i < count; i++)
{
if (rawValue < corrections[i].Measurement)
{
double d1 = rawValue - corrections[i - 1].Measurement;
double d2 = corrections[i].Measurement - rawValue;
if (d1 + d2 <= float.Epsilon)
{
/// Neigboring values in the corection table are close to each other -> calculate the average
return (corrections[i - 1].Correction + corrections[i].Correction) / 2.0;
}
else
{
/// Interpolate the correction from neigboring values in the corection table
return (corrections[i - 1].Correction * d2 + corrections[i].Correction * d1) / (d1 + d2);
}
}
}
/// rawValue is above the highest value in the correction table
return corrections[count - 1].Correction;
}
/// <summary>
/// Converts a measurement error to a correction (used when preparing correction tables).
/// </summary>
/// <param name="measuredValue">Measured value (in arbitrary units)</param>
/// <param name="error">Measurement error in %</param>
/// <returns>Correction in the same units as the measured value</returns>
public static double CorrectionFromError(double measuredValue, double error)
{
double trueValue = measuredValue / (1 + error/100);
double correction = trueValue - measuredValue;
return correction;
}
/// <summary>
/// Calculates the heat coefficient for water
/// </summary>
/// <param name="pressure">Pressure [bar]</param>
/// <param name="T_in">Inlet temperature [°C]</param>
/// <param name="T_out">Outlet temperature [°C]</param>
/// <param name="flowMeasuredAtInlet">true = flow measured @inlet, false = flow measured @outlet</param>
/// <returns> Heat coefficient for water [J/(m3 K)]</returns>
public static double HeatCoefficientWater(double pressure, double T_in, double T_out, bool flowMeasuredAtInlet)
{
if (T_in == T_out) return 0;
const double R = 461.526; /// [J kg^-1 K^-1]
const double p_star_Pa = 16.53E6; /// [Pa] (=16.53 MPa)
const double T_star = 1386.0; /// [K]
double T_in_K = Units.ConvertTo(Unit.K, T_in);
double T_out_K = Units.ConvertTo(Unit.K, T_out);
double tau_in = T_star / T_in_K;
double tau_out = T_star / T_out_K;
double pi = Units.ConvertTo(Unit.Pa, pressure) / p_star_Pa;
double h_in = tau_in * GammaTau(pi, tau_in) * R * T_in_K;
double h_out = tau_out * GammaTau(pi, tau_out) * R * T_out_K;
double ni = flowMeasuredAtInlet ? GammaPi(pi, tau_in) * R * T_in_K / p_star_Pa
: GammaPi(pi, tau_out) * R * T_out_K / p_star_Pa;
return (h_in - h_out) / (ni * (T_in - T_out));
}
/// <summary>
/// gamma(pi) see also STN EN 1434-1 Annex A (A.4)
/// </summary>
/// <param name="pi">pi = p / p* where p* = 16.53 MPa</param>
/// <param name="tau">tau = T* / T where T* = 1386 K</param>
/// <returns>gamma(pi)</returns>
static double GammaPi(double pi, double tau)
{
double result = 0;
for (int i = 0; i < 34; i++)
{
result -= ni[i] * Ii[i] * Math.Pow(7.1 - pi, Ii[i] - 1) * Math.Pow(tau - 1.222, Ji[i]);
}
return result;
}
/// <summary>
/// gamma(tau) see also STN EN 1434-1 Annex A (A.7)
/// </summary>
/// <param name="pi">pi = p / p* where p* = 16.53 MPa</param>
/// <param name="tau">tau = T* / T where T* = 1386 K</param>
/// <returns>gamma(tau)</returns>
static double GammaTau(double pi, double tau)
{
double result = 0;
for (int i = 0; i < 34; i++)
{
result += ni[i] * Math.Pow(7.1 - pi, Ii[i]) * Ji[i] * Math.Pow(tau - 1.222, Ji[i] - 1);
}
return result;
}
/// <summary>
/// Conversion of measured resistance of a platinum thermometer to temperature according to ITS-90
/// </summary>
/// <param name="R">Measured resistance in [°C]</param>
/// <param name="R001C">Calibrated resistance in Ohm at 0.01°C</param>
/// <param name="a7">Calibrated ITS-90 coefficient a7</param>
/// <param name="b7">Calibrated ITS-90 coefficient b7</param>
/// <param name="c7">Calibrated ITS-90 coefficient c7</param>
/// <returns>Temperature in [°C]</returns>
public static double PlatinumResistanceTM_ITS90_R2T(double R, double R001C, double a7, double b7, double c7)
{
double w = R / R001C; /// ratio
double r1 = w - 1.0;
double dw = r1 * (a7 + r1 * (b7 + r1 * c7)); /// = a7*r1 + b7*r1^2 + c7*r1^3
double wr = w - dw;
double x = (wr - 2.64) / 1.64;
double sum = 0;
for (int i = Di.Length - 1; i >= 0; i--)
{
sum = sum * x + Di[i];
}
return sum;
}
/// <summary>
/// Conversion of measured resistance of a platinum thermometer to temperature using Callendar-Van Dusen equations
/// </summary>
/// <param name="R">Measured resistance in [°C]</param>
/// <param name="R0">Calibrated resistance in Ohm at 0°C</param>
/// <param name="A">Calibration coefficient a</param>
/// <param name="B">Calibration coefficient b</param>
/// <returns>Temperature in [°C]</returns>
public static double PlatinumResistanceTM_ITS27_R2T(double R, double R0, double A, double B)
{
if (R0 * R0 * A * A - 4 * R0 * B * (R0 - R) <= 0) return 0; /// Out of range
return (-(R0 * A) + Math.Sqrt(R0 * R0 * A * A - 4 * R0 * B * (R0 - R))) / (2 * R0 * B);
}
}
}
@@ -14,8 +14,6 @@ namespace Config.Mappings
Map(x => x.RangeIx);
Map(x => x.Measurement);
Map(x => x.Correction);
Map(x => x.Uncertainty);
Map(x => x.Readability);
}
}
}
+2 -1
View File
@@ -17,7 +17,8 @@ namespace Config.Mappings
Map(x => x.Qto);
Map(x => x.Selector);
Map(x => x.RegValve);
Map(x => x.FlowMeter);
Map(x => x.RegulMinStep);
Map(x => x.FlowMeter);
Map(x => x.PidCoef);
Map(x => x.StartValve);
Map(x => x.Diverter);
-1
View File
@@ -45,7 +45,6 @@
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<TargetFrameworkProfile />
<LangVersion>4</LangVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>bin\Debug\</OutputPath>
+2 -2
View File
@@ -142,11 +142,11 @@ namespace LabelPrinting.Resources {
}
/// <summary>
/// Looks up a localized string similar to Error.
/// Looks up a localized string similar to Error_mass.
/// </summary>
internal static string Error {
get {
return ResourceManager.GetString("Error", resourceCulture);
return ResourceManager.GetString("Error_mass", resourceCulture);
}
}
-22
View File
@@ -1,22 +0,0 @@
<?xml version="1.0" encoding="utf-8"?><configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.0" newVersion="4.0.4.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.6.0" newVersion="4.1.6.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.2.0" newVersion="6.0.2.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
+68 -4
View File
@@ -16,21 +16,31 @@ namespace Results.Entities
public virtual double PulsesMeter { get; set; } /// # of water meter or heat meter pulses
public virtual double PulsesMaster { get; set; } /// # of reference flowmeter pulses (gated by this water meter pulses)
public virtual double PulsesPerLiter { get; set; } /// [l ^ -1], in case of heat meters (CompoundMeterId==5) pulses per kWh in [kWh ^ -1]
public virtual double PulsesPerKilogram { get; set; } /// [kg ^ -1] //...MF
public virtual double VolumeStart { get; set; } /// Volume or energy (CompoundMeterId==5) on test start in [l] or [J]
public virtual double VolumeEnd { get; set; } /// Volume or energy (CompoundMeterId==5) on test end in [l] or [J]
public virtual double VolumeMeter { get; set; } /// Measured volume or energy (CompoundMeterId==5) in [l] or [J]
public virtual double VolumeRef { get; set; } /// Reference volume or energy (CompoundMeterId==5) in [l] or [J]
public virtual double MassMeter { get; set; } /// Measured mass or energy (CompoundMeterId==5) in [kg] or [J]
public virtual double MassRef { get; set; } /// Reference mass or energy (CompoundMeterId==5) in [kg] or [J]
public virtual double TimestampStart { get; set; } /// [s]
public virtual double TimestampEnd { get; set; } /// [s]
public virtual double TestTime { get; set; } /// [s]
/// Main result
public virtual double Error { get; set; } /// [%]
/// Main result
public virtual double Error { get; set; } /// [%]
public virtual double ErrorMass { get; set; } /// [%] //...MF
public virtual long ErrorIndicators { get; set; } /// Not mapped to DB !!!, bit24=E25, bit25=E26, bit26=E27, bit27=E28 (error flags)
public virtual long InfoIndicators { get; set; } /// Not mapped to DB !!!, bit24=E25, bit25=E26, bit26=E27, bit27=E28 (info flags)
public virtual bool TestDone { get; set; } /// true = test was completed
public virtual bool Passed { get; set; } /// true = test passed, water meter is OK
public virtual bool Passed { get; set; } /// true = test passed, water meter is OK
public virtual bool PassedMass { get; set; } /// true = test passed, water meter is OK //...MF
public virtual string QuantityUnits { get; set; } /// dm3, kg, etc. - this value defined the quantity of meter, its decisive for distinction of pulse types
#if IPERL
public virtual int CalibFactor { get; set; }
public virtual int CalibFactorLNA { get; set; }
public virtual int Q2CorrRL { get; set; }
public virtual int Q2CorrLR { get; set; }
public virtual string ExtraDataPath { get; set; } /// Relative path to a file with opto-data/raw-data
public virtual float X1 { get; set; }
public virtual float X2 { get; set; }
@@ -120,6 +130,36 @@ namespace Results.Entities
}
}
//...MF
public virtual string PassedMassColorStr(string yesNoFormatOrEmpty)
{
if (string.IsNullOrEmpty(yesNoFormatOrEmpty))
{
return Utils.PassedColorStr(PassedMass, Evaluate());
}
else
{
string[] yesNo = yesNoFormatOrEmpty.Split(new char[] { '~' });
return PassedMass ? yesNo[0] : ((yesNo.Length >= 2) ? yesNo[1] : Results.Resources.Strings.No);
}
}
//...MF
public virtual string GetQuantityFromUnits()
{
if (QuantityUnits == "kg")
{
return "Mass";
}
else if (QuantityUnits == "dm3")
{
return "Volume";
}
return "Volume";
}
public MeterTestRslt()
{
TestDone = false;
@@ -153,6 +193,7 @@ namespace Results.Entities
PulsesMeter = src.PulsesMeter;
PulsesMaster = src.PulsesMaster;
PulsesPerLiter = src.PulsesPerLiter;
PulsesPerKilogram = src.PulsesPerKilogram;
VolumeStart = src.VolumeStart;
VolumeEnd = src.VolumeEnd;
VolumeMeter = src.VolumeMeter;
@@ -161,11 +202,18 @@ namespace Results.Entities
TimestampEnd = src.TimestampEnd;
TestTime = src.TestTime;
Error = src.Error;
ErrorMass = src.ErrorMass;
ErrorIndicators = src.ErrorIndicators;
InfoIndicators = src.InfoIndicators;
TestDone = src.TestDone;
Passed = src.Passed;
PassedMass = src.PassedMass;
QuantityUnits = src.QuantityUnits;
#if IPERL
CalibFactor = src.CalibFactor;
CalibFactorLNA = src.CalibFactorLNA;
Q2CorrRL = src.Q2CorrRL;
Q2CorrLR = src.Q2CorrLR;
ExtraDataPath = src.ExtraDataPath;
X1 = src.X1;
X2 = src.X2;
@@ -196,6 +244,7 @@ namespace Results.Entities
writer.Write(PulsesMeter);
writer.Write(PulsesMaster);
writer.Write(PulsesPerLiter);
writer.Write(PulsesPerKilogram);
writer.Write(VolumeStart);
writer.Write(VolumeEnd);
writer.Write(VolumeMeter);
@@ -204,11 +253,18 @@ namespace Results.Entities
writer.Write(TimestampEnd);
writer.Write(TestTime);
writer.Write(Error);
writer.Write(ErrorMass);
writer.Write(ErrorIndicators);
writer.Write(InfoIndicators);
writer.Write(TestDone);
writer.Write(Passed);
writer.Write(PassedMass);
writer.Write((QuantityUnits != null) ? QuantityUnits : string.Empty);
#if IPERL
writer.Write(CalibFactor);
writer.Write(CalibFactorLNA);
writer.Write(Q2CorrRL);
writer.Write(Q2CorrLR);
writer.Write((ExtraDataPath != null) ? ExtraDataPath : string.Empty);
writer.Write(X1);
writer.Write(X2);
@@ -236,6 +292,7 @@ namespace Results.Entities
PulsesMeter = reader.ReadDouble();
PulsesMaster = reader.ReadDouble();
PulsesPerLiter = reader.ReadDouble();
PulsesPerKilogram = reader.ReadDouble();
VolumeStart = reader.ReadDouble();
VolumeEnd = reader.ReadDouble();
VolumeMeter = reader.ReadDouble();
@@ -244,11 +301,18 @@ namespace Results.Entities
TimestampEnd = reader.ReadDouble();
TestTime = reader.ReadDouble();
Error = reader.ReadDouble();
ErrorMass = reader.ReadDouble();
ErrorIndicators = reader.ReadInt64();
InfoIndicators = reader.ReadInt64();
TestDone = reader.ReadBoolean();
Passed = reader.ReadBoolean();
PassedMass = reader.ReadBoolean();
QuantityUnits = reader.ReadString();
#if IPERL
CalibFactor = reader.ReadInt32();
CalibFactorLNA = reader.ReadInt32();
Q2CorrRL = reader.ReadInt32();
Q2CorrLR = reader.ReadInt32();
ExtraDataPath = reader.ReadString();
X1 = reader.ReadSingle();
X2 = reader.ReadSingle();
+61 -22
View File
@@ -36,6 +36,8 @@ namespace Results.Entities
public virtual double ConstMasterCorr { get; set; } /// [l/pls] Liters per pulse of the master flow meter corrected by a correction table.
public virtual double ConstMaster { get; set; } /// [l/pls] Liters per pulse of the master flow meter calculated from a mass measurement.
/// When mass measurement is not available, corrected by a correction table.
public virtual double MassConstMaster { get; set; } /// [kg/pls] kilograms per pulse of the master flow meter calculated from a mass measurement.
/// When mass measurement is not available, corrected by a correction table.
public virtual double MassStartRaw { get; set; } /// [kg]
public virtual double MassStart { get; set; } /// [kg]
public virtual double MassEndRaw { get; set; } /// [kg]
@@ -49,7 +51,10 @@ namespace Results.Entities
public virtual double VolumeCTV { get; set; } /// [l] Volume conventional true value
public virtual double VolumeMaster { get; set; } /// [l] Volume from the master flow meter
public virtual double ErrorMaster { get; set; } /// [%] Error of the master flow meter
public virtual double MassFlow { get; set; } /// [t/h] calculated from conventional true value ...MF
public virtual double MassCTV { get; set; } /// [kg] Volume conventional true value ...MF
public virtual double MassMaster { get; set; } /// [kg] Volume from the master flow meter ...MF
public virtual double MassErrorMaster { get; set; } /// [%] Error of the master flow meter ...MF
public virtual float DiverterStart { get; set; } /// [s] Diverter switch time or a start/stop valve open time when the test starts
public virtual float DivStart10 { get; set; } /// [s] Diverter switch time when test starts at level 10 (e.g. 10%) (not mapped to DB)
public virtual float DivStart50 { get; set; } /// [s] Diverter switch time when test starts at level 50 (e.g. 50%) (not mapped to DB)
@@ -293,7 +298,8 @@ namespace Results.Entities
ConstMasterRaw = src.ConstMasterRaw;
ConstMasterCorr = src.ConstMasterCorr;
ConstMaster = src.ConstMaster;
MassStartRaw = src.MassStartRaw;
MassConstMaster = src.MassConstMaster;
MassStartRaw = src.MassStartRaw;
MassStart = src.MassStart;
MassEndRaw = src.MassEndRaw;
MassEnd = src.MassEnd;
@@ -301,12 +307,16 @@ namespace Results.Entities
DensityLine = src.DensityLine;
DensityDiv = src.DensityDiv;
MassOfEvapWater = src.MassOfEvapWater;
Qdetected = src.Qdetected;
Qdetected = src.Qdetected;
Flow = src.Flow;
VolumeCTV = src.VolumeCTV;
VolumeMaster = src.VolumeMaster;
ErrorMaster = src.ErrorMaster;
MassFlow = src.MassFlow;
MassCTV = src.MassCTV;
MassMaster = src.MassMaster;
MassErrorMaster = src.MassErrorMaster;
DiverterStart = src.DiverterStart;
DivStart10 = src.DivStart10;
DivStart50 = src.DivStart50;
@@ -439,24 +449,43 @@ namespace Results.Entities
public virtual string ToString(int i)
{
return string.Format("TestRslt: Part={0} RepetitionNr={1} TestDone={2} Remark={3} StartTime={4} EndTime={5} FlowSetTime={6} TestTime={7} PulsesMaster={8} ConstMaster={9} MassStartRaw={10} MassStart={11} MassEndRaw={12} MassEnd={13} DensityIn={14} DensityOut={15} DensityDiv={16} MassOfEvapWaater={17} FlowMass={18} FlowVolume={19} VolumeCTV={20} VolumeMaster={21} ErrorMaster={22} DiverterStart={85} DiverterEnd={86} ErrorFlags={23} InfoFlags={24} AmbTempMean={25} AmbTempStart={26} AmbTempEnd={27} AmbTempMin={28} AmbTempMax={29} AmbPressMean={30} AmbPressStart={31} AmbPressEnd={32} AmbPressMin={33} AmbPressMax={34} AmbHumiMean={35} AmbHumiStart={36} AmbHumiEnd={37} AmbHumiMin={38} AmbHumiMax={39} PressUpMean={40} PressUpStart={41} PressUpEnd={42} PressUpMin={43} PressUpMax={44} PressDownMean={45} PressDownStart={46} PressDownEnd={47} PressDownMin={48} PressDownMax={49} PressDeltaMean={50} PressDeltaStart={51} PressDeltaEnd={52} PressDeltaMin={53} PressDeltaMax={54} TempUpMean={55} TempUpStart={56} TempUpEnd={57} TempUpMin={58} TempUpMax={59} TempDownMean={60} TempDownStart={61} TempDownEnd={62} TempDownMin={63} TempDownMax={64} TempDivMean={65} TempDivStart={66} TempDivEnd={67} TempDivMin={68} TempDivMax={69} FlowMean={70} FlowStart={71} FlowEnd={72} FlowMin={73} FlowMax={74} Custom1={75} Custom2={76} Custom3={77} Custom4={78} Custom5={79} Custom6={80} Custom7={81} Custom8={82} Custom9={83} Custom10={84} TestMeasured={85} TestCollected={86}",
Part, RepetitionNr, TestDone, Remark, StartTime, EndTime, FlowSetTime, TestTime,
PulsesMaster, ConstMaster, MassStartRaw, MassStart, MassEndRaw, MassEnd,
DensityIn, DensityLine, DensityDiv, MassOfEvapWater, Qdetected, Flow,
VolumeCTV, VolumeMaster, ErrorMaster, ErrorFlags, InfoFlags,
AmbTempMean, AmbTempStart, AmbTempEnd, AmbTempMin, AmbTempMax,
AmbPressMean, AmbPressStart, AmbPressEnd, AmbPressMin, AmbPressMax,
AmbHumiMean, AmbHumiStart, AmbHumiEnd, AmbHumiMin, AmbHumiMax,
PressUpMean, PressUpStart, PressUpEnd, PressUpMin, PressUpMax,
PressDownMean, PressDownStart, PressDownEnd, PressDownMin, PressDownMax,
PressDeltaMean, PressDeltaStart, PressDeltaEnd, PressDeltaMin, PressDeltaMax,
TempUpMean, TempUpStart, TempUpEnd, TempUpMin, TempUpMax,
TempDownMean, TempDownStart, TempDownEnd, TempDownMin, TempDownMax,
TempDivMean, TempDivStart, TempDivEnd, TempDivMin, TempDivMax,
FlowMean, FlowStart, FlowEnd, FlowMin, FlowMax,
Custom1, Custom2, Custom3, Custom4, Custom5, Custom6, Custom7, Custom8, Custom9, Custom10,
DiverterStart, DiverterEnd, TestMeasured, TestCollected);
}
return string.Format(
"TestRslt: Part={0} RepetitionNr={1} TestDone={2} Remark={3} StartTime={4} EndTime={5} FlowSetTime={6} TestTime={7} " +
"PulsesMaster={8} ConstMaster={9} MassConstMaster={9} MassStartRaw={10} MassStart={11} MassEndRaw={12} MassEnd={13} " +
"DensityIn={14} DensityOut={15} DensityDiv={16} MassOfEvapWater={17} FlowMass={18} Flow={19} " +
"VolumeCTV={20} VolumeMaster={21} ErrorMaster={22} MassFlow={23} MassCTV={24} MassMaster={25} MassErrorMaster={26} " +
"ErrorFlags={27} InfoFlags={28} " +
"AmbTempMean={29} AmbTempStart={30} AmbTempEnd={31} AmbTempMin={32} AmbTempMax={33} " +
"AmbPressMean={34} AmbPressStart={35} AmbPressEnd={36} AmbPressMin={37} AmbPressMax={38} " +
"AmbHumiMean={39} AmbHumiStart={40} AmbHumiEnd={41} AmbHumiMin={42} AmbHumiMax={43} " +
"PressUpMean={44} PressUpStart={45} PressUpEnd={46} PressUpMin={47} PressUpMax={48} " +
"PressDownMean={49} PressDownStart={50} PressDownEnd={51} PressDownMin={52} PressDownMax={53} " +
"PressDeltaMean={54} PressDeltaStart={55} PressDeltaEnd={56} PressDeltaMin={57} PressDeltaMax={58} " +
"TempUpMean={59} TempUpStart={60} TempUpEnd={61} TempUpMin={62} TempUpMax={63} " +
"TempDownMean={64} TempDownStart={65} TempDownEnd={66} TempDownMin={67} TempDownMax={68} " +
"TempDivMean={69} TempDivStart={70} TempDivEnd={71} TempDivMin={72} TempDivMax={73} " +
"FlowMean={74} FlowStart={75} FlowEnd={76} FlowMin={77} FlowMax={78} " +
"Custom1={79} Custom2={80} Custom3={81} Custom4={82} Custom5={83} Custom6={84} Custom7={85} Custom8={86} Custom9={87} Custom10={88} " +
"DiverterStart={89} DiverterEnd={90} TestMeasured={91} TestCollected={92}",
Part, RepetitionNr, TestDone, Remark, StartTime, EndTime, FlowSetTime, TestTime,
PulsesMaster, ConstMaster, MassConstMaster, MassStartRaw, MassStart, MassEndRaw, MassEnd,
DensityIn, DensityLine, DensityDiv, MassOfEvapWater, Qdetected, Flow,
VolumeCTV, VolumeMaster, ErrorMaster, MassFlow,
MassCTV, MassMaster, MassErrorMaster, ErrorFlags, InfoFlags,
AmbTempMean, AmbTempStart, AmbTempEnd, AmbTempMin, AmbTempMax,
AmbPressMean, AmbPressStart, AmbPressEnd, AmbPressMin, AmbPressMax,
AmbHumiMean, AmbHumiStart, AmbHumiEnd, AmbHumiMin, AmbHumiMax,
PressUpMean, PressUpStart, PressUpEnd, PressUpMin, PressUpMax,
PressDownMean, PressDownStart, PressDownEnd, PressDownMin, PressDownMax,
PressDeltaMean, PressDeltaStart, PressDeltaEnd, PressDeltaMin, PressDeltaMax,
TempUpMean, TempUpStart, TempUpEnd, TempUpMin, TempUpMax,
TempDownMean, TempDownStart, TempDownEnd, TempDownMin, TempDownMax,
TempDivMean, TempDivStart, TempDivEnd, TempDivMin, TempDivMax,
FlowMean, FlowStart, FlowEnd, FlowMin, FlowMax,
Custom1, Custom2, Custom3, Custom4, Custom5, Custom6, Custom7, Custom8, Custom9, Custom10,
DiverterStart, DiverterEnd, TestMeasured, TestCollected
);
}
public virtual void WriteBinary(BinaryWriter writer, IList<TestData> savedTestDatas)
@@ -503,6 +532,7 @@ namespace Results.Entities
writer.Write(ConstMasterRaw);
writer.Write(ConstMasterCorr);
writer.Write(ConstMaster);
writer.Write(MassConstMaster);
writer.Write(MassStartRaw);
writer.Write(MassStart);
writer.Write(MassEndRaw);
@@ -516,6 +546,10 @@ namespace Results.Entities
writer.Write(VolumeCTV);
writer.Write(VolumeMaster);
writer.Write(ErrorMaster);
writer.Write(MassFlow);
writer.Write(MassCTV);
writer.Write(MassMaster);
writer.Write(MassErrorMaster);
writer.Write(DiverterStart);
writer.Write(DivStart10);
writer.Write(DivStart50);
@@ -646,6 +680,7 @@ namespace Results.Entities
ConstMasterRaw = reader.ReadDouble();
ConstMasterCorr = reader.ReadDouble();
ConstMaster = reader.ReadDouble();
MassConstMaster = reader.ReadDouble();
MassStartRaw = reader.ReadDouble();
MassStart = reader.ReadDouble();
MassEndRaw = reader.ReadDouble();
@@ -659,6 +694,10 @@ namespace Results.Entities
VolumeCTV = reader.ReadDouble();
VolumeMaster = reader.ReadDouble();
ErrorMaster = reader.ReadDouble();
MassFlow = reader.ReadDouble();
MassCTV = reader.ReadDouble();
MassMaster = reader.ReadDouble();
MassErrorMaster = reader.ReadDouble();
DiverterStart = reader.ReadSingle();
DivStart10 = reader.ReadSingle();
DivStart50 = reader.ReadSingle();
+6 -1
View File
@@ -33,7 +33,8 @@ namespace Results.Entities
public virtual string ApprovalInfo { get; set; }
public virtual string Certificate { get; set; }
public virtual double PulsesPerLtr { get; set; }
public virtual double PulsesPerKilogram { get; set; }
/// Concerns compound water meters
public virtual string ProducerAux { get; set; }
public virtual double Q3_Qn_Aux { get; set; } /// [m3/h]
@@ -85,6 +86,7 @@ namespace Results.Entities
ApprovalInfo = oriWMData.ApprovalInfo;
Certificate = oriWMData.Certificate;
PulsesPerLtr = oriWMData.PulsesPerLtr;
PulsesPerKilogram = oriWMData.PulsesPerKilogram;
ProducerAux = oriWMData.ProducerAux;
Q3_Qn_Aux = oriWMData.Q3_Qn_Aux;
MetrologicalClassAux = oriWMData.MetrologicalClassAux;
@@ -129,6 +131,7 @@ namespace Results.Entities
if (ApprovalInfo != wmd.ApprovalInfo) return false;
if (Certificate != wmd.Certificate) return false;
if (PulsesPerLtr != wmd.PulsesPerLtr) return false;
if (PulsesPerKilogram != wmd.PulsesPerKilogram) return false;
if (ProducerAux != wmd.ProducerAux) return false;
if (Q3_Qn_Aux != wmd.Q3_Qn_Aux) return false;
if (MetrologicalClassAux != wmd.MetrologicalClassAux) return false;
@@ -188,6 +191,7 @@ namespace Results.Entities
writer.Write((ApprovalInfo != null) ? ApprovalInfo : string.Empty);
writer.Write((Certificate != null) ? Certificate : string.Empty);
writer.Write(PulsesPerLtr);
writer.Write(PulsesPerKilogram);
writer.Write((ProducerAux != null) ? ProducerAux : string.Empty);
writer.Write(Q3_Qn_Aux);
writer.Write((MetrologicalClassAux != null) ? MetrologicalClassAux : string.Empty);
@@ -227,6 +231,7 @@ namespace Results.Entities
ApprovalInfo = reader.ReadString();
Certificate = reader.ReadString();
PulsesPerLtr = reader.ReadDouble();
PulsesPerKilogram = reader.ReadDouble();
ProducerAux = reader.ReadString();
Q3_Qn_Aux = reader.ReadDouble();
MetrologicalClassAux = reader.ReadString();
+19 -9
View File
@@ -37,7 +37,9 @@ namespace Results
Ambient_pressure, /// 27
Ambient_humidity, /// 28
Volume, /// 29
Quantity, /// 29
Reference_volume, /// 30
Reference_quantity, /// 30
Error, /// 31
Passed, /// 32
Watermeter_type, /// 33
@@ -69,6 +71,7 @@ namespace Results
End_state, /// 59
Pulses, /// 60
Pulse__liter, /// 61 Water meter constant (pulses per liter) specific for one test
Pulse__kilogram, /// 61 Water meter constant (pulses per liter) specific for one test //...MF
Reference_pulses_ni, /// 62 Reference pulses gated for specific meter (synchro method)
Reference_energy, /// 63
Bench_ID, /// 64 Test bench ID (int) obtained from a component implementing IBenchInfo
@@ -81,6 +84,7 @@ namespace Results
Batch_start_time, /// 71
Batch_end_time, /// 72
Lite_per_pulse_Read, /// 73
Unit_per_pulse_Read, /// 73
Result_code, /// 74
Remark, /// 75
T_Hi_mean, /// 76
@@ -98,9 +102,11 @@ namespace Results
Volume_main, /// 88
Volume_aux, /// 89
Start_volume, /// 90
Start_quantity, /// 90
Start_volume_main, /// 91
Start_volume_aux, /// 92
End_volume, /// 93
End_quantity, /// 93
End_volume_main, /// 94
End_volume_aux, /// 95
Error_main, /// 96
@@ -350,15 +356,19 @@ namespace Results
Pulses_aux, /// 296 Compound aux meter pulses (recalculated so that the gated ref. pulses for this meter are equal to the total ref. pulses)
Failed_meters_countE15, /// 297
Uncertainty_DIV1, /// 298 Diverter DIV1 Uncertainty
Uncertainty_DIV2, /// 299 Diverter DIV2 Uncertainty
Uncertainty_DIV3, /// 300 Diverter DIV3 Uncertainty
Uncertainty_DIV4, /// 301 Diverter DIV4 Uncertainty
Uncertainty_DIV5, /// 302 Diverter DIV5 Uncertainty
Uncertainty_TEMP1, /// 303 Temp1 Uncertainty
RR_Quantity, /// 0
RR_Units, /// 0
MassFlow, /// 15 Calculated flow (use ConstMasterRaw/ConstMaster to calculate uncorrected flow of the reference flow meter) ...MF
Error_mass, /// 31 ...MF
Passed_mass, /// 32 ...MF
Meter_mass, /// 29 ...MF
Reference_mass, /// 30 ...MF
TestPassed_mass, /// 125 ...MF
//Pulses_per_kilogram, /// 49 Water meter constant (water meter data, not used in calculations) //...MF
Pulses_per_unit, /// 49 Water meter constant (water meter data, not used in calculations) //...MF
MassCTV, /// 229 ...MF
Count,
}
}
+8 -2
View File
@@ -16,16 +16,22 @@ namespace Results.Mappings
Map(x => x.PulsesMeter);
Map(x => x.PulsesMaster);
Map(x => x.PulsesPerLiter);
Map(x => x.VolumeStart);
Map(x => x.PulsesPerKilogram);
Map(x => x.VolumeStart);
Map(x => x.VolumeEnd);
Map(x => x.VolumeMeter);
Map(x => x.VolumeRef);
Map(x => x.TimestampStart);
Map(x => x.MassMeter);
Map(x => x.MassRef);
Map(x => x.TimestampStart);
Map(x => x.TimestampEnd);
Map(x => x.TestTime);
Map(x => x.Error);
Map(x => x.ErrorMass);
Map(x => x.TestDone);
Map(x => x.Passed);
Map(x => x.PassedMass);
Map(x => x.QuantityUnits);
#if IPERL
Map(x => x.ExtraDataPath);
Map(x => x.X1);
+6 -1
View File
@@ -32,7 +32,8 @@ namespace Results.Mappings
Map(x => x.ConstMasterRaw);
Map(x => x.ConstMasterCorr);
Map(x => x.ConstMaster);
Map(x => x.MassStartRaw);
Map(x => x.MassConstMaster);
Map(x => x.MassStartRaw);
Map(x => x.MassStart);
Map(x => x.MassEndRaw);
Map(x => x.MassEnd);
@@ -45,6 +46,10 @@ namespace Results.Mappings
Map(x => x.VolumeCTV);
Map(x => x.VolumeMaster);
Map(x => x.ErrorMaster);
Map(x => x.MassFlow).Column("MassFlow");
Map(x => x.MassCTV);
Map(x => x.MassMaster);
Map(x => x.MassErrorMaster);
Map(x => x.DiverterStart);
Map(x => x.DiverterEnd);
Map(x => x.ErrorFlags);
+1
View File
@@ -36,6 +36,7 @@ namespace Results.Mappings
Map(x => x.Certificate);
Map(x => x.PulsesPerLtr);
Map(x => x.PulsesPerKilogram);
Map(x => x.ProducerAux);
Map(x => x.Q3_Qn_Aux);
+72
View File
@@ -294,6 +294,15 @@ namespace Results.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to End quantity.
/// </summary>
internal static string End_quantity {
get {
return ResourceManager.GetString("End_quantity", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to End state.
/// </summary>
@@ -888,6 +897,15 @@ namespace Results.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Pulses/kg.
/// </summary>
internal static string PulsesKilogram {
get {
return ResourceManager.GetString("PulsesKilogram", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Pulses/l.
/// </summary>
@@ -897,6 +915,15 @@ namespace Results.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Pulses/Unit.
/// </summary>
internal static string PulsesUnit {
get {
return ResourceManager.GetString("PulsesUnit", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Q fall.
/// </summary>
@@ -1131,6 +1158,15 @@ namespace Results.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Start quantity.
/// </summary>
internal static string Start_quantity {
get {
return ResourceManager.GetString("Start_quantity", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Start volume.
/// </summary>
@@ -1338,6 +1374,15 @@ namespace Results.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Relative error of a meter.
/// </summary>
internal static string Tooltip_E_rel_mass {
get {
return ResourceManager.GetString("Tooltip_E_rel_mass", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Relative error of the master meter.
/// </summary>
@@ -1950,6 +1995,15 @@ namespace Results.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Mass measured by the tested meter.
/// </summary>
internal static string Tooltip_Vol_Mt_mass {
get {
return ResourceManager.GetString("Tooltip_Vol_Mt_mass", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Reference volume for tested meter.
/// </summary>
@@ -1959,6 +2013,15 @@ namespace Results.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Reference mass for tested meter.
/// </summary>
internal static string Tooltip_Vol_rm_mass {
get {
return ResourceManager.GetString("Tooltip_Vol_rm_mass", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Uncertainty.
/// </summary>
@@ -2103,6 +2166,15 @@ namespace Results.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Quant..
/// </summary>
internal static string VName_Quantity {
get {
return ResourceManager.GetString("VName_Quantity", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Temp..
/// </summary>
+69 -45
View File
@@ -123,9 +123,18 @@
<data name="Alignment" xml:space="preserve">
<value>Zarovnání</value>
</data>
<data name="Approval" xml:space="preserve">
<value>Schválení</value>
</data>
<data name="Available_results" xml:space="preserve">
<value>Dostupné výsledky</value>
</data>
<data name="Batch_nr" xml:space="preserve">
<value>Číslo dávky</value>
</data>
<data name="Bench" xml:space="preserve">
<value>Stanice</value>
</data>
<data name="CancelBtnText" xml:space="preserve">
<value>Zrušit</value>
</data>
@@ -135,9 +144,21 @@
<data name="Configuration" xml:space="preserve">
<value>Konfigurace</value>
</data>
<data name="Density" xml:space="preserve">
<value>Hustota</value>
</data>
<data name="DownBtnText" xml:space="preserve">
<value>Dolů</value>
</data>
<data name="End" xml:space="preserve">
<value>Konec</value>
</data>
<data name="Error" xml:space="preserve">
<value>Chyba</value>
</data>
<data name="Flow" xml:space="preserve">
<value>Průtok</value>
</data>
<data name="Format" xml:space="preserve">
<value>Formát</value>
</data>
@@ -150,8 +171,8 @@
<data name="Precision" xml:space="preserve">
<value>Přesnost</value>
</data>
<data name="Remark" xml:space="preserve">
<value>Poznámka</value>
<data name="Procedure" xml:space="preserve">
<value>Procedura</value>
</data>
<data name="Remove" xml:space="preserve">
<value>&lt; Odebrat</value>
@@ -162,15 +183,15 @@
<data name="Result" xml:space="preserve">
<value>Výsledek</value>
</data>
<data name="Results" xml:space="preserve">
<value>Výsledky</value>
</data>
<data name="Result_code" xml:space="preserve">
<value>Kód výsledku</value>
</data>
<data name="Selected_results" xml:space="preserve">
<value>Vybrané výsledky</value>
</data>
<data name="sn" xml:space="preserve">
<value>sériové číslo</value>
</data>
<data name="Start" xml:space="preserve">
<value>Začátek</value>
</data>
<data name="Test_ID" xml:space="preserve">
<value>Test</value>
</data>
@@ -180,9 +201,21 @@
<data name="UpBtnText" xml:space="preserve">
<value>Nahoru</value>
</data>
<data name="User" xml:space="preserve">
<value>Uživatel</value>
</data>
<data name="Width" xml:space="preserve">
<value>Šířka</value>
</data>
<data name="Results" xml:space="preserve">
<value>Výsledky</value>
</data>
<data name="Remark" xml:space="preserve">
<value>Poznámka</value>
</data>
<data name="Result_code" xml:space="preserve">
<value>Kód výsledku</value>
</data>
<data name="Mounting" xml:space="preserve">
<value>Montáž</value>
</data>
@@ -195,54 +228,27 @@
<data name="Quantity" xml:space="preserve">
<value>Veličina</value>
</data>
<data name="sn" xml:space="preserve">
<value>sériové číslo</value>
</data>
<data name="Water_Meter" xml:space="preserve">
<value>Vodoměr</value>
</data>
<data name="Batch_nr" xml:space="preserve">
<value>Číslo dávky</value>
</data>
<data name="from" xml:space="preserve">
<value>od</value>
</data>
<data name="to" xml:space="preserve">
<value>do</value>
</data>
<data name="Unit" xml:space="preserve">
<value>Jednotka</value>
</data>
<data name="Approval" xml:space="preserve">
<value>Schválení</value>
</data>
<data name="Bench" xml:space="preserve">
<value>Stanice</value>
</data>
<data name="Density" xml:space="preserve">
<value>Hustota</value>
</data>
<data name="Density_correction" xml:space="preserve">
<value>Korekce hustoty</value>
</data>
<data name="End" xml:space="preserve">
<value>Konec</value>
<data name="User_description" xml:space="preserve">
<value>Popis uživatele</value>
</data>
<data name="Procedure" xml:space="preserve">
<value>Procedura</value>
<data name="Unit" xml:space="preserve">
<value>Jednotka</value>
</data>
<data name="Procedure_description" xml:space="preserve">
<value>Popis procedury</value>
</data>
<data name="Start" xml:space="preserve">
<value>Začátek</value>
</data>
<data name="User" xml:space="preserve">
<value>Uživatel</value>
</data>
<data name="User_description" xml:space="preserve">
<value>Popis uživatele</value>
</data>
<data name="Bench_ID" xml:space="preserve">
<value>ID stanice</value>
</data>
@@ -315,9 +321,6 @@
<data name="Serial_number_is_missing" xml:space="preserve">
<value>Chybí sériové číslo</value>
</data>
<data name="Error" xml:space="preserve">
<value>Chyba</value>
</data>
<data name="Lower_limit" xml:space="preserve">
<value>Dolní hranice</value>
</data>
@@ -330,9 +333,6 @@
<data name="Relative_error" xml:space="preserve">
<value>Relativní chyba</value>
</data>
<data name="Flow" xml:space="preserve">
<value>Průtok</value>
</data>
<data name="This_position_is_disabled" xml:space="preserve">
<value>Taro pozice je vypnuta</value>
</data>
@@ -351,4 +351,28 @@
<data name="Merge" xml:space="preserve">
<value>Spojit</value>
</data>
<data name="PulsesKilogram" xml:space="preserve">
<value />
</data>
<data name="Tooltip_E_rel_mass" xml:space="preserve">
<value />
</data>
<data name="Tooltip_Vol_Mt_mass" xml:space="preserve">
<value />
</data>
<data name="Tooltip_Vol_rm_mass" xml:space="preserve">
<value />
</data>
<data name="PulsesUnit" xml:space="preserve">
<value />
</data>
<data name="VName_Quantity" xml:space="preserve">
<value />
</data>
<data name="Start_quantity" xml:space="preserve">
<value />
</data>
<data name="End_quantity" xml:space="preserve">
<value />
</data>
</root>
+75 -51
View File
@@ -210,6 +210,9 @@
<data name="Procedure" xml:space="preserve">
<value>Prüfvorlage</value>
</data>
<data name="Producer" xml:space="preserve">
<value>Hersteller</value>
</data>
<data name="Protocol" xml:space="preserve">
<value>Protokoll</value>
</data>
@@ -360,57 +363,6 @@
<data name="Mounting" xml:space="preserve">
<value>Montage</value>
</data>
<data name="Producer" xml:space="preserve">
<value>Hersteller</value>
</data>
<data name="Meter_type" xml:space="preserve">
<value>WZ-Typ</value>
</data>
<data name="Compound" xml:space="preserve">
<value>Verbundzähler</value>
</data>
<data name="Heat_meter" xml:space="preserve">
<value>Wärmezähler</value>
</data>
<data name="Single" xml:space="preserve">
<value>Einzel</value>
</data>
<data name="Category" xml:space="preserve">
<value>Kategorie</value>
</data>
<data name="Quantity" xml:space="preserve">
<value>Größe</value>
</data>
<data name="Page" xml:space="preserve">
<value>Seite</value>
</data>
<data name="Water_Meter" xml:space="preserve">
<value>Wasserzähler</value>
</data>
<data name="aux" xml:space="preserve">
<value>Nebenzähler</value>
</data>
<data name="main" xml:space="preserve">
<value>Hauptzähler</value>
</data>
<data name="fall" xml:space="preserve">
<value>fall</value>
</data>
<data name="from" xml:space="preserve">
<value>von</value>
</data>
<data name="rise" xml:space="preserve">
<value>steig</value>
</data>
<data name="to" xml:space="preserve">
<value>bis</value>
</data>
<data name="VName_Mass" xml:space="preserve">
<value>Masse</value>
</data>
<data name="Density_correction" xml:space="preserve">
<value>Dichtekorrektur</value>
</data>
<data name="Energy" xml:space="preserve">
<value>Energie</value>
</data>
@@ -429,6 +381,21 @@
<data name="P_delta_start" xml:space="preserve">
<value>Druckdifferenz Beginn Prüfung</value>
</data>
<data name="Meter_type" xml:space="preserve">
<value>WZ-Typ</value>
</data>
<data name="Compound" xml:space="preserve">
<value>Verbundzähler</value>
</data>
<data name="Heat_meter" xml:space="preserve">
<value>Wärmezähler</value>
</data>
<data name="Single" xml:space="preserve">
<value>Einzel</value>
</data>
<data name="Page" xml:space="preserve">
<value>Seite</value>
</data>
<data name="End_volume" xml:space="preserve">
<value>Ende Volumen</value>
</data>
@@ -459,6 +426,15 @@
<data name="Start_mass" xml:space="preserve">
<value>Start Prüfung</value>
</data>
<data name="Category" xml:space="preserve">
<value>Kategorie</value>
</data>
<data name="Quantity" xml:space="preserve">
<value>Größe</value>
</data>
<data name="Water_Meter" xml:space="preserve">
<value>Wasserzähler</value>
</data>
<data name="VName_Flow" xml:space="preserve">
<value>Q</value>
</data>
@@ -474,6 +450,9 @@
<data name="VName_Humi" xml:space="preserve">
<value>Hu</value>
</data>
<data name="VName_Mass" xml:space="preserve">
<value>Masse</value>
</data>
<data name="VName_TstTime" xml:space="preserve">
<value>Tau</value>
</data>
@@ -582,6 +561,12 @@
<data name="Tooltip_T_up_st" xml:space="preserve">
<value>Temperatur Prüstreckeneingang am Prüfungsbeginn (4 Messungen nach Beginn)</value>
</data>
<data name="aux" xml:space="preserve">
<value>Nebenzähler</value>
</data>
<data name="main" xml:space="preserve">
<value>Hauptzähler</value>
</data>
<data name="Tooltip_E_rel" xml:space="preserve">
<value>Relative Messabweichung eines WZ</value>
</data>
@@ -606,6 +591,18 @@
<data name="VName_Error" xml:space="preserve">
<value>E</value>
</data>
<data name="fall" xml:space="preserve">
<value>fall</value>
</data>
<data name="from" xml:space="preserve">
<value>von</value>
</data>
<data name="rise" xml:space="preserve">
<value>steig</value>
</data>
<data name="to" xml:space="preserve">
<value>bis</value>
</data>
<data name="Tooltip_Hu_Amb_M" xml:space="preserve">
<value>Umgebungs-Luftfeuchtigkeit während der Prüfung</value>
</data>
@@ -627,6 +624,9 @@
<data name="Yes" xml:space="preserve">
<value>Ja</value>
</data>
<data name="Density_correction" xml:space="preserve">
<value>Dichtekorrektur</value>
</data>
<data name="Error_flags" xml:space="preserve">
<value>Fehlerflags</value>
</data>
@@ -825,4 +825,28 @@
<data name="Selected_items" xml:space="preserve">
<value>Ausgewählte Objekte</value>
</data>
<data name="PulsesKilogram" xml:space="preserve">
<value>Impulse/kg</value>
</data>
<data name="Tooltip_E_rel_mass" xml:space="preserve">
<value />
</data>
<data name="Tooltip_Vol_Mt_mass" xml:space="preserve">
<value />
</data>
<data name="Tooltip_Vol_rm_mass" xml:space="preserve">
<value />
</data>
<data name="PulsesUnit" xml:space="preserve">
<value />
</data>
<data name="VName_Quantity" xml:space="preserve">
<value />
</data>
<data name="Start_quantity" xml:space="preserve">
<value />
</data>
<data name="End_quantity" xml:space="preserve">
<value />
</data>
</root>
+24
View File
@@ -804,4 +804,28 @@
<data name="Serial_number_is_missing" xml:space="preserve">
<value>Numérotation en série</value>
</data>
<data name="PulsesKilogram" xml:space="preserve">
<value>Impulsion/kilogram</value>
</data>
<data name="Tooltip_E_rel_mass" xml:space="preserve">
<value />
</data>
<data name="Tooltip_Vol_Mt_mass" xml:space="preserve">
<value />
</data>
<data name="Tooltip_Vol_rm_mass" xml:space="preserve">
<value />
</data>
<data name="PulsesUnit" xml:space="preserve">
<value />
</data>
<data name="VName_Quantity" xml:space="preserve">
<value />
</data>
<data name="Start_quantity" xml:space="preserve">
<value />
</data>
<data name="End_quantity" xml:space="preserve">
<value />
</data>
</root>
+25 -1
View File
@@ -220,7 +220,7 @@
<value>impulsi </value>
</data>
<data name="PulsesLiter" xml:space="preserve">
<value>impulsi /l</value>
<value>impulsi/l</value>
</data>
<data name="P_amb" xml:space="preserve">
<value>P ambiente</value>
@@ -537,4 +537,28 @@
<data name="Yes" xml:space="preserve">
<value>Sì</value>
</data>
<data name="PulsesKilogram" xml:space="preserve">
<value>impulsi/kg</value>
</data>
<data name="Tooltip_E_rel_mass" xml:space="preserve">
<value />
</data>
<data name="Tooltip_Vol_Mt_mass" xml:space="preserve">
<value />
</data>
<data name="Tooltip_Vol_rm_mass" xml:space="preserve">
<value />
</data>
<data name="PulsesUnit" xml:space="preserve">
<value />
</data>
<data name="VName_Quantity" xml:space="preserve">
<value />
</data>
<data name="Start_quantity" xml:space="preserve">
<value />
</data>
<data name="End_quantity" xml:space="preserve">
<value />
</data>
</root>
+24
View File
@@ -441,4 +441,28 @@
<data name="Unit" xml:space="preserve">
<value>Jednostka</value>
</data>
<data name="PulsesKilogram" xml:space="preserve">
<value>imp./kilogram</value>
</data>
<data name="Tooltip_E_rel_mass" xml:space="preserve">
<value />
</data>
<data name="Tooltip_Vol_Mt_mass" xml:space="preserve">
<value />
</data>
<data name="Tooltip_Vol_rm_mass" xml:space="preserve">
<value />
</data>
<data name="PulsesUnit" xml:space="preserve">
<value />
</data>
<data name="VName_Quantity" xml:space="preserve">
<value />
</data>
<data name="Start_quantity" xml:space="preserve">
<value />
</data>
<data name="End_quantity" xml:space="preserve">
<value />
</data>
</root>
+24
View File
@@ -852,4 +852,28 @@
<data name="Merge" xml:space="preserve">
<value>Merge</value>
</data>
<data name="PulsesKilogram" xml:space="preserve">
<value>Pulses/kg</value>
</data>
<data name="Tooltip_E_rel_mass" xml:space="preserve">
<value>Relative error of a meter</value>
</data>
<data name="Tooltip_Vol_Mt_mass" xml:space="preserve">
<value>Mass measured by the tested meter</value>
</data>
<data name="Tooltip_Vol_rm_mass" xml:space="preserve">
<value>Reference mass for tested meter</value>
</data>
<data name="PulsesUnit" xml:space="preserve">
<value>Pulses/Unit</value>
</data>
<data name="VName_Quantity" xml:space="preserve">
<value>Quant.</value>
</data>
<data name="Start_quantity" xml:space="preserve">
<value>Start quantity</value>
</data>
<data name="End_quantity" xml:space="preserve">
<value>End quantity</value>
</data>
</root>
+29 -5
View File
@@ -420,22 +420,46 @@
<data name="Volume_main" xml:space="preserve">
<value>Объем главн.</value>
</data>
<data name="Water_Meter" xml:space="preserve">
<value>Счетчик воды</value>
</data>
<data name="VName_Vol" xml:space="preserve">
<value>Объем</value>
</data>
<data name="aux" xml:space="preserve">
<value>доп.</value>
</data>
<data name="main" xml:space="preserve">
<value>главн.</value>
</data>
<data name="VName_Vol" xml:space="preserve">
<value>Объем</value>
</data>
<data name="No" xml:space="preserve">
<value>Нет</value>
</data>
<data name="Yes" xml:space="preserve">
<value>Да</value>
</data>
<data name="Water_Meter" xml:space="preserve">
<value>Счетчик воды</value>
<data name="PulsesKilogram" xml:space="preserve">
<value />
</data>
<data name="Tooltip_E_rel_mass" xml:space="preserve">
<value />
</data>
<data name="Tooltip_Vol_Mt_mass" xml:space="preserve">
<value />
</data>
<data name="Tooltip_Vol_rm_mass" xml:space="preserve">
<value />
</data>
<data name="PulsesUnit" xml:space="preserve">
<value />
</data>
<data name="VName_Quantity" xml:space="preserve">
<value />
</data>
<data name="Start_quantity" xml:space="preserve">
<value />
</data>
<data name="End_quantity" xml:space="preserve">
<value />
</data>
</root>
+8 -72
View File
@@ -19,7 +19,7 @@
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG</DefineConstants>
<DefineConstants>TRACE;DEBUG;HEAT_METERS;IPERL</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>AnyCPU</PlatformTarget>
@@ -29,30 +29,12 @@
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<DefineConstants>TRACE;IPERL; HEAT_METERS;IPEL</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="ClosedXML, Version=0.105.0.0, Culture=neutral, PublicKeyToken=fd1eb21b62ae805b, processorArchitecture=MSIL">
<HintPath>..\packages\ClosedXML.0.105.0-rc\lib\netstandard2.0\ClosedXML.dll</HintPath>
</Reference>
<Reference Include="ClosedXML.Parser, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1d5f7376574c51ec, processorArchitecture=MSIL">
<HintPath>..\packages\ClosedXML.Parser.2.0.0-preview1\lib\netstandard2.0\ClosedXML.Parser.dll</HintPath>
</Reference>
<Reference Include="DocumentFormat.OpenXml, Version=3.1.1.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
<HintPath>..\packages\DocumentFormat.OpenXml.3.1.1\lib\net46\DocumentFormat.OpenXml.dll</HintPath>
</Reference>
<Reference Include="DocumentFormat.OpenXml.Framework, Version=3.1.1.0, Culture=neutral, PublicKeyToken=8fb06cb64d019a17, processorArchitecture=MSIL">
<HintPath>..\packages\DocumentFormat.OpenXml.Framework.3.1.1\lib\net46\DocumentFormat.OpenXml.Framework.dll</HintPath>
</Reference>
<Reference Include="EPPlus.Interfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=a694d7f3b0907a61, processorArchitecture=MSIL">
<HintPath>..\packages\EPPlus.Interfaces.8.0.0\lib\net462\EPPlus.Interfaces.dll</HintPath>
</Reference>
<Reference Include="ExcelNumberFormat, Version=1.1.0.0, Culture=neutral, PublicKeyToken=23c6f5d73be07eca, processorArchitecture=MSIL">
<HintPath>..\packages\ExcelNumberFormat.1.1.0\lib\net20\ExcelNumberFormat.dll</HintPath>
</Reference>
<Reference Include="FluentNHibernate">
<HintPath>..\packages\FluentNHibernate.2.0.3.0\lib\net40\FluentNHibernate.dll</HintPath>
</Reference>
@@ -65,51 +47,15 @@
<Reference Include="log4net, Version=2.0.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\log4net.2.0.15\lib\net45\log4net.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Bcl.HashCode, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.HashCode.1.1.1\lib\net461\Microsoft.Bcl.HashCode.dll</HintPath>
</Reference>
<Reference Include="Microsoft.IO.RecyclableMemoryStream, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.IO.RecyclableMemoryStream.3.0.1\lib\netstandard2.0\Microsoft.IO.RecyclableMemoryStream.dll</HintPath>
</Reference>
<Reference Include="mscorlib" />
<Reference Include="MySql.Data">
<HintPath>..\packages\MySql.Data.6.6.5\lib\net40\MySql.Data.dll</HintPath>
</Reference>
<Reference Include="NHibernate">
<HintPath>..\packages\NHibernate.4.0.4.4000\lib\net40\NHibernate.dll</HintPath>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="RBush, Version=4.0.0.0, Culture=neutral, PublicKeyToken=c77e27b81f4d0187, processorArchitecture=MSIL">
<HintPath>..\packages\RBush.Signed.4.0.0\lib\net47\RBush.dll</HintPath>
</Reference>
<Reference Include="SixLabors.Fonts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=d998eea7b14cab13, processorArchitecture=MSIL">
<HintPath>..\packages\SixLabors.Fonts.1.0.0\lib\netstandard2.0\SixLabors.Fonts.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.6.1\lib\net462\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.ComponentModel.Annotations.5.0.0\lib\net461\System.ComponentModel.Annotations.dll</HintPath>
</Reference>
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Memory, Version=4.0.4.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.6.2\lib\net462\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.6.1\lib\net462\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.1.1\lib\net462\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Security" />
<Reference Include="System.Security.Cryptography.Xml, Version=8.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Security.Cryptography.Xml.8.0.2\lib\net462\System.Security.Cryptography.Xml.dll</HintPath>
</Reference>
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Windows.Forms.DataVisualization" />
<Reference Include="System.Xml.Linq" />
@@ -117,7 +63,6 @@
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="BatchResults.cs" />
@@ -235,17 +180,6 @@
<DesignTime>True</DesignTime>
<DependentUpon>Strings.resx</DependentUpon>
</Compile>
<Compile Include="RigUncertainty.cs" />
<Compile Include="Uncertainty\Calculation\CalculationTable.cs" />
<Compile Include="Uncertainty\Calculation\Math.cs" />
<Compile Include="Uncertainty\CommonExcell.cs" />
<Compile Include="Uncertainty\CommonTable\Table.cs" />
<Compile Include="Uncertainty\DEItem.cs" />
<Compile Include="Uncertainty\DEUtils.cs" />
<Compile Include="Uncertainty\DocumentSheets.cs" />
<Compile Include="Uncertainty\ProcessDataLine.cs" />
<Compile Include="Uncertainty\ProcessDataMeterLine.cs" />
<Compile Include="Uncertainty\CommonTable\Cell.cs" />
<Compile Include="Utils.cs" />
<Compile Include="WMeterRsltItemSpec.cs" />
</ItemGroup>
@@ -305,9 +239,13 @@
<EmbeddedResource Include="Resources\Strings.de.resx">
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Resources\Strings.fr.resx" />
<EmbeddedResource Include="Resources\Strings.fr.resx">
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Resources\Strings.it.resx" />
<EmbeddedResource Include="Resources\Strings.pl.resx" />
<EmbeddedResource Include="Resources\Strings.pl.resx">
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Resources\Strings.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Strings.Designer.cs</LastGenOutput>
@@ -315,8 +253,6 @@
<EmbeddedResource Include="Resources\Strings.ru.resx" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="packages.config" />
<None Include="Resources\Headpic.png" />
</ItemGroup>
<ItemGroup>
-144
View File
@@ -1,144 +0,0 @@
using System;
using System.Collections.Generic;
using System.Reflection;
using ClosedXML.Excel;
using log4net;
using Results.Resources;
using Results.Uncertainty;
namespace Results
{
/// <summary>
/// Uncertaintity based on calculation
/// </summary>
public class RigUncertainty
{
private static readonly ILog log = LogManager.GetLogger(typeof(RigUncertainty));
//Based on |Excel calculation
//1.step feed Excel
//2.step get calculated data from excel
private string DocumentName { get; set; }
private XLWorkbook Document;
private Boolean openedDocument;
public Boolean IsOpenedDocument { get { return openedDocument; } }
Dictionary<int, ProcessDataLine> processDataDict = new Dictionary<int, ProcessDataLine>();
public RigUncertainty()
{
}
public RigUncertainty(string DocumentName)
{
this.DocumentName = DocumentName;
}
public void OpenDocument()
{
this.openedDocument = TryOpenDocument();
}
private Boolean TryOpenDocument()
{
try
{
Document = new XLWorkbook(DocumentName);
return true;
}
catch (Exception e)
{
log.Error("Can`t open excel document!",e);
return false;
}
}
public void CloaseDocument()
{
this.openedDocument = !TryCloseDocument();
}
private Boolean TryCloseDocument()
{
try
{
Document.Dispose(); // Closes the file and releases resources
return true;
}
catch (Exception e)
{
log.Error("Can`t open excel document!",e);
return false;
}
}
public IXLWorksheet GetWorksheet(DocumentSheets sheet)
{
string sheetName = EnumExtensions.GetDescription(sheet);
try
{
var xlWorksheet = Document.Worksheet(sheetName);
return xlWorksheet;
}
catch (Exception e)
{
log.Error($"Can`t get \"{sheetName}\" worksheet!", e);
return null;
}
}
public Boolean GetCalculatedDataFromExcel()
{
// Code to get calculated data from Excel
return true;
}
public void SetDataToExcel()
{
string sheetString = EnumExtensions.GetDescription(DocumentSheets.RADATA);
IXLWorksheet worksheet = Document.Worksheet(sheetString);
// # store data to Excel workbook
// ## get data from DB
int line = 3;
ProcessDataLine pDataLine = new ProcessDataLine();
processDataDict.Add(line,pDataLine);
// ### line process data
// ## Store to document
foreach ( var processDataKey in processDataDict)
{
//get Process data line base by row
ProcessDataLine processDataLine = processDataKey.Value;
CommonExcell.InsertValueLineProcessData(this, processDataKey.Key, processDataLine);
}
}
public void SaveResultDataToDatabase()
{
// Code to save data to database
}
public void SaveChangesToDocument()
{
if (Document != null && openedDocument)
{
Document.Save();
}
}
}
}
@@ -1,239 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using ClosedXML.Excel;
using DocumentFormat.OpenXml.Spreadsheet;
namespace Results.Uncertainty.Calculation
{
public class ColumnValue
{
private int iColumn;
private double value;
public int IColumn => iColumn;
public double Value
{
get => value;
set => this.value = value;
}
public ColumnValue(int iColumn)
{
this.iColumn = iColumn;
}
public ColumnValue(int iColumn, double value)
{
this.iColumn = iColumn;
this.value = value;
}
}
public class BatchProcessTable
{
private Dictionary<int, ProcessDataLine> processTable;
public Dictionary<int, ProcessDataLine> ProcessTable
{
get => processTable;
set => processTable = value;
}
public IList<ColumnValue> GetListMeterValue(int iMeter, int iMeterSubvalueIndex)
{
IList<ColumnValue> xx = new List<ColumnValue>();
foreach (KeyValuePair<int, ProcessDataLine> dataLine in processTable)
{
XLCellValue cellValue = dataLine.Value.processDataMeterList[iMeter].val[iMeterSubvalueIndex];
xx.Add(new ColumnValue((int)dataLine.Key ,cellValue.GetNumber()));
}
return xx;
}
public Dictionary<int, IList<ColumnValue>> GetKBuoyancy()
{
Dictionary<int, IList<ColumnValue>> table = new Dictionary<int, IList<ColumnValue>>();
IList<ColumnValue> bc = new List<ColumnValue>();
IList<ColumnValue> bi = new List<ColumnValue>();
IList<ColumnValue> bj = new List<ColumnValue>();
IList<ColumnValue> bm = new List<ColumnValue>();
foreach (KeyValuePair<int, ProcessDataLine> dataLine in processTable)
{
bc.Add(new ColumnValue((int)dataLine.Key ,dataLine.Value.Kbuoyancy));
bi.Add(new ColumnValue((int)dataLine.Key ,dataLine.Value.Qctv));
bj.Add(new ColumnValue((int)dataLine.Key ,dataLine.Value.VolRI));
bm.Add(new ColumnValue((int)dataLine.Key ,dataLine.Value.ERelRef));
}
table.Add(CommonExcell.ColumnToNumber("BC"),bc);
table.Add(CommonExcell.ColumnToNumber("BI"),bi);
table.Add(CommonExcell.ColumnToNumber("BJ"),bj);
table.Add(CommonExcell.ColumnToNumber("BM"),bm);
return table;
}
public Dictionary<int, IList<ColumnValue>> ModifyKbuoyancy(IList<ColumnValue> corectedKbuoancy)
{
//Columns - 'BC'
Dictionary<int,IList<ColumnValue>> kbuoyancyTable = GetKBuoyancy();
if (kbuoyancyTable.ContainsKey(CommonExcell.ColumnToNumber("BC")) &&
kbuoyancyTable.ContainsKey(CommonExcell.ColumnToNumber("BI")) &&
kbuoyancyTable.ContainsKey(CommonExcell.ColumnToNumber("BJ")) &&
kbuoyancyTable.ContainsKey(CommonExcell.ColumnToNumber("BM")))
{
IList<ColumnValue> listBC = kbuoyancyTable[CommonExcell.ColumnToNumber("BC")];
IList<ColumnValue> listBI = kbuoyancyTable[CommonExcell.ColumnToNumber("BI")];
IList<ColumnValue> listBJ = kbuoyancyTable[CommonExcell.ColumnToNumber("BJ")];
IList<ColumnValue> listBM = kbuoyancyTable[CommonExcell.ColumnToNumber("BM")];
if (corectedKbuoancy.Count != listBC.Count)
{
throw new Exception("Incompatible count in table kbuoyancy!");
}
for (int row = 0; row < listBC.Count; row++)
{
double correctedKbuoyancyValue = corectedKbuoancy[row].Value;
listBC[row].Value = correctedKbuoyancyValue;
//BI=+BI4/BC4*BC13
listBI[row].Value = listBI[row].Value / correctedKbuoyancyValue * listBJ[row].Value;
//BM==+(BJ13-BI13)/BI13*100
listBM[row].Value = (listBJ[row].Value - listBI[row].Value) / listBI[row].Value * 100;
}
return kbuoyancyTable;
}
return null;
}
}
public class CalculationTable
{
private BatchProcessTable batchProcessTable;
private Dictionary<int, IList<ColumnValue>> table;
private Dictionary<string, double> averages;
public BatchProcessTable BatchProcessTable
{
get => batchProcessTable;
set => batchProcessTable = value;
}
public Dictionary<int, IList<ColumnValue>> Table
{
get => table;
set => table = value;
}
public Dictionary<string, double> Averages
{
get => averages;
set => averages = value;
}
public CalculationTable()
{
batchProcessTable = new BatchProcessTable();
table = new Dictionary<int, IList<ColumnValue>>();
averages = new Dictionary<string, double>();
}
////////
///
public IList<ColumnValue> GetColumn(string column)
{
int iColumnName = CommonExcell.ColumnToNumber(column);
if (table.ContainsKey(iColumnName))
{
return table[iColumnName];
}
else
{
throw new Exception($"Column {column} missing in table!");
}
}
double Average(string columnName, bool forceCalculation = false)
{
int iColumnName = CommonExcell.ColumnToNumber(columnName);
if (!forceCalculation && averages.ContainsKey(columnName))
{
return averages[columnName];
}
if (!table.ContainsKey(iColumnName))
{
double average = Average(table[iColumnName]);
averages.Add(columnName, average);
return average;
}
else
{
throw new Exception($"Column {columnName} missing in table!");
}
return 0;
}
public static double Average(IList<ColumnValue> values)
{
int i = 0;
double sum = 0;
foreach (ColumnValue value in values)
{
sum += value.Value;
i++;
}
return sum / i;
}
static double SumOfSquares(IList<ColumnValue> values, double mean)
{
double sumOfSquares = 0;
foreach (ColumnValue columnValue in values)
{
sumOfSquares += System.Math.Pow(columnValue.Value - mean, 2);
}
return sumOfSquares;
}
/// <summary>
/// Calculates the sample standard deviation for a list of ColumnValue objects.
/// </summary>
/// <param name="values">An IList of ColumnValue objects.</param>
/// <returns>The sample standard deviation. Returns 0 if there are fewer than 2 values.</returns>
public static double StandardDeviation(IList<ColumnValue> values)
{
if (values == null || values.Count < 2)
return 0.0;
// Compute the average of the values.
double mean = CalculationTable.Average(values);
// Calculate the sum of squared differences from the mean.
double sumOfSquares = CalculationTable.SumOfSquares(values, mean);
// For sample standard deviation, divide by (n - 1)
return System.Math.Sqrt(sumOfSquares / (values.Count - 1));
}
}
}
-22
View File
@@ -1,22 +0,0 @@
using System;
using System.Collections.Generic;
namespace Results.Uncertainty.Calculation
{
public static class Math
{
public static double Average(IList<Double> values)
{
int i = 0;
double sum = 0;
foreach (double value in values)
{
sum += value;
i++;
}
return sum / i;
}
}
}
-310
View File
@@ -1,310 +0,0 @@
using System;
using System.Collections.Generic;
using ClosedXML.Excel;
using Common;
using Config.Entities;
using log4net;
using NHibernate;
using Results.Resources;
namespace Results.Uncertainty
{
public class CommonExcell
{
const string formatD7 = "0.0000000";
const string formatD6 = "0.000000";
const string formatD4 = "0.0000";
const string formatD3 = "0.000";
const string formatD1 = "0.0";
const string formatInt = "0";
const string formatStr = "@";
private static Dictionary<int, int> bloks = null;
static readonly ILog log = LogManager.GetLogger(typeof(CommonExcell));
private static IList<Component> cmpntEntities;
public static Dictionary<int, int> GetBolocs() {
if (bloks == null)
{
bloks = new Dictionary<int, int>();
bloks.Add(0, 4);
bloks.Add(1, 24);
bloks.Add(2, 44);
bloks.Add(3, 64);
bloks.Add(4, 84);
bloks.Add(5, 104);
bloks.Add(6, 124);
bloks.Add(7, 144);
}
return bloks;
}
/// <summary>
/// Inserts a line of process data into a specified row of the Excel document.
/// </summary>
/// <param name="_rigUncertainty">An instance of the <see cref="RigUncertainty"/> class representing the rig uncertainty and its associated data.</param>
/// <param name="iRowI">The row index in the Excel worksheet where the process data will be inserted.</param>
/// <param name="processDataLine">An instance of the <see cref="ProcessDataLine"/> class containing the process data to be added to the row.</param>
public static void InsertValueLineProcessData(RigUncertainty _rigUncertainty, int iRowI, ProcessDataLine processDataLine)
{
if (!_rigUncertainty.IsOpenedDocument)
{
throw new Exception("No Opened document!");
}
IXLWorksheet worksheet = _rigUncertainty.GetWorksheet(DocumentSheets.RADATA);
//Date time
string column = "A";
worksheet.Cell($"{column}{iRowI}").Value = processDataLine.DateTime;
worksheet.Cell($"{column}{iRowI}").Style.DateFormat.Format = "M/d/yyyy h:mm";
//deffined values
CellData(worksheet, "B", iRowI, processDataLine.Batch, formatInt); //Batch - B
CellData(worksheet, "C", iRowI, processDataLine.TestName, formatStr); //Test Name - C
CellData(worksheet, "D", iRowI, processDataLine.Reports, formatInt); //Reports
CellData(worksheet, "E", iRowI, processDataLine.RepCyc, formatInt); //Rep cyc
CellData(worksheet, "F", iRowI, processDataLine.TestMeth, formatStr); //Test Meth.
CellData(worksheet, "G", iRowI, processDataLine.TargetVOL, formatInt); //Target VOL.
CellData(worksheet, "H", iRowI, processDataLine.TargetQMin, formatD4); //Target Q -
CellData(worksheet, "I", iRowI, processDataLine.TargetQPlus, formatD4); //Target Q +
CellData(worksheet, "J", iRowI, processDataLine.ErrLimitMin, formatInt); //Err. LIMIT -
CellData(worksheet, "K", iRowI, processDataLine.ErrLimitPlus, formatInt); //Err. LIMIT +
CellData(worksheet, "L", iRowI, processDataLine.TargetTempFrom, formatInt); //Target temp from - L
CellData(worksheet, "M", iRowI, processDataLine.TargetTempTo, formatInt); //Target temp to - M
CellData(worksheet, "N", iRowI, processDataLine.TargetPressFrom, formatInt); //Target press from - N
CellData(worksheet, "O", iRowI, processDataLine.TargetPressTo, formatInt); //Target press to - O
CellData(worksheet, "P", iRowI, processDataLine.MIDNumberName, formatStr);
CellData(worksheet, "Q", iRowI, processDataLine.MIDNumberValue, formatD4); //MID number - PQ
CellData(worksheet, "R", iRowI, processDataLine.COR, formatStr); //COR - R
CellData(worksheet, "S", iRowI, processDataLine.TempAmbM, formatD1); //Temp.Amb M - S
CellData(worksheet, "T", iRowI, processDataLine.PressAmbM, formatInt); //Press.Amb M - T
CellData(worksheet, "U", iRowI, processDataLine.HumidAmbM, formatD1); //Humid.Amb M - U
CellData(worksheet, "V", iRowI, processDataLine.PressUpME, formatInt); //Press. UP ME - V
CellData(worksheet, "W", iRowI, processDataLine.PressDwME, formatInt); //Press. DW ME - W
CellData(worksheet, "X", iRowI, processDataLine.PressDeME, formatInt); //Press. DE ME - X
CellData(worksheet, "Y", iRowI, processDataLine.PressUpST, formatInt); //Press. UP ST - Y
CellData(worksheet, "Z", iRowI, processDataLine.PressDwST, formatInt); //Press. DW ST - Z
CellData(worksheet, "AA", iRowI, processDataLine.PressDES, formatInt); //Press. DES - AA
CellData(worksheet, "AB", iRowI, processDataLine.PressUpEN, formatInt); //Press UP EN - AB
CellData(worksheet, "AC", iRowI, processDataLine.PressDwEN, formatInt); //Press DW EN
CellData(worksheet, "AD", iRowI, processDataLine.PressDEE, formatInt); //Press. DEE
CellData(worksheet, "AE", iRowI, processDataLine.TempUpME, formatD4); //Temp. UP ME
CellData(worksheet, "AF", iRowI, processDataLine.TempDwME, formatD4); //Temp. DW ME
CellData(worksheet, "AG", iRowI, processDataLine.TempDiME, formatD4); //Temp. DI ME
CellData(worksheet, "AH", iRowI, processDataLine.TempLoME, formatD4); //Temp. LO ME
CellData(worksheet, "AI", iRowI, processDataLine.TempHiME, formatD4); //Temp. HI ME
CellData(worksheet, "AJ", iRowI, processDataLine.TempUpST, formatD4); //Temp. UP ST
CellData(worksheet, "AK", iRowI, processDataLine.TempDwST, formatD4); //Temp. DW ST
CellData(worksheet, "AL", iRowI, processDataLine.TempDiST, formatD4); //Temp. DI ST
CellData(worksheet, "AM", iRowI, processDataLine.TempLoST, formatD4); //Temp. LO ST
CellData(worksheet, "AN", iRowI, processDataLine.TempHiST, formatD4); //Temp. HI ST
CellData(worksheet, "AO", iRowI, processDataLine.TempUpEN, formatD4); //Temp. UP EN
CellData(worksheet, "AP", iRowI, processDataLine.TempDwEN, formatD4); //Temp. DW EN
CellData(worksheet, "AQ", iRowI, processDataLine.TempDiEN, formatD4); //Temp. DI EN
CellData(worksheet, "AR", iRowI, processDataLine.TempLoEN, formatD4); //Temp. LO EN
CellData(worksheet, "AS", iRowI, processDataLine.TempHiEN, formatD4); //Temp. HI EN
//Mass vakues
CellData(worksheet, "AT", iRowI, processDataLine.MassStRaw, formatD3); //Mass ST raw()
CellData(worksheet, "AU", iRowI, processDataLine.MassSt, formatD3); //Mass ST ()
CellData(worksheet, "AV", iRowI, processDataLine.MassEnRaw, formatD3); //Mass EN raw()
CellData(worksheet, "AW", iRowI, processDataLine.MassEn, formatD3); //Mass EN ()
CellData(worksheet, "AX", iRowI, processDataLine.Mass, formatD3); //Mass
//calculated values
CellData(worksheet, "AY", iRowI, processDataLine.RoWa, formatD7); //Ro Wa
CellData(worksheet, "AZ", iRowI, processDataLine.TempLnME, formatD7); //Temp. LN ME
CellData(worksheet, "BA", iRowI, processDataLine.RoWat, formatD7); //Ro Wat
CellData(worksheet, "BB", iRowI, processDataLine.RoAir, formatD7); // Ro AIR
CellData(worksheet, "BC", iRowI, processDataLine.Kbuoyancy, formatD7); // Kbuoyancy
CellData(worksheet, "BD", iRowI, processDataLine.DensityOfSample, formatInt); //Density of sample
CellData(worksheet, "BE", iRowI, processDataLine.TTempRO, formatInt); //TTemp. RO()
CellData(worksheet, "BF", iRowI, processDataLine.QMax, formatD7); //Q max ()
CellData(worksheet, "BG", iRowI, processDataLine.QMin, formatD7); //Q min ()
CellData(worksheet, "BH", iRowI, processDataLine.QMean, formatD7); //Q mean
CellData(worksheet, "BI", iRowI, processDataLine.Qctv, formatD7); //Qctv
CellData(worksheet, "BJ", iRowI, processDataLine.VolRI, formatD7); //Vol. RI
CellData(worksheet, "BK", iRowI, processDataLine.DivCorrection, formatD3); //Div correction
CellData(worksheet, "BL", iRowI, processDataLine.T, formatD3); //T(s)()
CellData(worksheet, "BM", iRowI, processDataLine.ERelRef, formatD7); //E rel.ref. ()
//CellData(worksheet, "BN", iRowI, , formatD7);
CellData(worksheet, "BO", iRowI, processDataLine.KMind, formatInt); //K MID ()
//CellData(worksheet, "BP", iRowI, , formatInt);//Const.MAS
//Additional values
CellData(worksheet, "BQ", iRowI, processDataLine.DiverterStartTime, formatInt); //Diverter start time
CellData(worksheet, "BR", iRowI, processDataLine.DiverterEndTime, formatInt); //Diverter end time
CellData(worksheet, "BS", iRowI, processDataLine.DiverterStartValeveOpenTime, formatInt); // BS [ms] Start valve open time
CellData(worksheet, "BT", iRowI, processDataLine.DiverterStartValeveCloseTime, formatInt); // BT [ms] Start valve close time
CellData(worksheet, "BU", iRowI, processDataLine.TempUpMax, formatD7); //Temp. UP max
CellData(worksheet, "BV", iRowI, processDataLine.TempDwMax, formatD7); // Temp DW max
CellData(worksheet, "BW", iRowI, processDataLine.TempUpMin, formatD7); //Temp UP min
CellData(worksheet, "BX", iRowI, processDataLine.TempDwMin, formatD7); //Temp DW min
CellData(worksheet, "BY", iRowI, processDataLine.TempT10, formatD7); //10 - T1,2
CellData(worksheet, "BZ", iRowI, processDataLine.TempAmbEn, formatD1); //Temp Amb En
CellData(worksheet, "CA", iRowI, processDataLine.PressAmbEn, formatInt); //Press Amb En
CellData(worksheet, "CB", iRowI, processDataLine.HumAmbEn, formatD1); //Hum Amb En
//checking
CellData(worksheet, "CC", iRowI, processDataLine.RefPulses, formatInt); //Ref pulses()
CellData(worksheet, "CD", iRowI, processDataLine.DiverterTestTimeCorrection, formatInt); // CD [ms] Diverter test time correction
int distance = CommonExcell.GetColumnDistance("CE", "CZ");
string startBlockColumn = "CE";
foreach (ProcessDataMeterLine dataMeter in processDataLine.processDataMeterList){
MeterCellData(worksheet, startBlockColumn, iRowI, dataMeter, distance);
startBlockColumn = CommonExcell.GetExcelColumnByDistance(startBlockColumn, distance);
}
}
/// <summary>
/// Populates a range of cells in an Excel worksheet with meter process data starting from a specified column and row.
/// </summary>
/// <param name="worksheet">The Excel worksheet where data will be inserted.</param>
/// <param name="column">The starting column in the worksheet for inserting the meter process data.</param>
/// <param name="iRowI">The row index in the worksheet where the data will be inserted.</param>
/// <param name="data">An instance of the <see cref="ProcessDataMeterLine"/> class containing the meter process data to insert.</param>
/// <param name="distance">An optional parameter specifying the distance for additional columns to leave empty after data insertion. Defaults to 0.</param>
/// <returns>The next available column string after the last column used during data insertion.</returns>
private static string MeterCellData(IXLWorksheet worksheet, string column, int iRowI, ProcessDataMeterLine data, int distance = 0)
{
int iIndex = 0;
CellData(worksheet, column, iRowI, data.val[iIndex] , formatStr);//Position - Ser.No. - CE - 0
string nextColumn = NextColumn(column); CellData(worksheet,nextColumn, iRowI, data.val[++iIndex] , formatInt);//Vol.Mt.st - CF
nextColumn = NextColumn(nextColumn); CellData(worksheet,nextColumn, iRowI, data.val[++iIndex] , formatInt);//Vol.Mt.en - CG
nextColumn = NextColumn(nextColumn); CellData(worksheet,nextColumn, iRowI, data.val[++iIndex] , formatD7);//Vol.Mt. - CH
nextColumn = NextColumn(nextColumn); CellData(worksheet,nextColumn, iRowI, data.val[++iIndex], formatD7);//Vol.rm - CI
nextColumn = NextColumn(nextColumn); CellData(worksheet,nextColumn, iRowI, data.val[++iIndex] , formatD6); // E rel. - CJ
nextColumn = NextColumn(nextColumn); CellData(worksheet,nextColumn, iRowI, data.val[++iIndex] , formatInt); // U - CK
nextColumn = NextColumn(nextColumn); CellData(worksheet,nextColumn, iRowI, data.val[++iIndex] , formatInt); //Pulses() -
nextColumn = NextColumn(nextColumn); CellData(worksheet,nextColumn, iRowI, data.val[++iIndex] , formatInt); //Ref pulses_ni()
nextColumn = NextColumn(nextColumn); CellData(worksheet,nextColumn, iRowI, data.val[++iIndex] , formatD4); //T(s)()_ni
nextColumn = NextColumn(nextColumn); CellData(worksheet,nextColumn, iRowI, data.val[++iIndex] , formatStr);//evaluation
nextColumn = NextColumn(nextColumn); CellData(worksheet,nextColumn, iRowI, data.val[++iIndex] , formatD4);//Pulses/l - CP
nextColumn = NextColumn(nextColumn); CellData(worksheet,nextColumn, iRowI, data.val[++iIndex] , formatInt);//imp/l
nextColumn = NextColumn(nextColumn); CellData(worksheet,nextColumn, iRowI, data.val[++iIndex] , formatInt);//div
nextColumn = NextColumn(nextColumn); CellData(worksheet,nextColumn, iRowI, data.val[++iIndex] , formatInt);//Vend
nextColumn = NextColumn(nextColumn); CellData(worksheet,nextColumn, iRowI, data.val[++iIndex] , formatInt);//T end - 15
if (distance > 0)
{
string lastColumn = CommonExcell.GetExcelColumnByDistance(column, distance);
int columnDistance = CommonExcell.GetColumnDistance(nextColumn, lastColumn);
for (int i = 1; i < columnDistance; i++)
{
if ((iIndex + 1) < data.val.Length)
{
nextColumn = NextColumn(nextColumn);
CellData(worksheet, nextColumn, iRowI, data.val[++iIndex], formatInt);
}
else
{
nextColumn = NextColumn(nextColumn); CellData(worksheet,nextColumn, iRowI, 0 , formatInt);
}
}
}
return nextColumn;
}
public static void CellData(IXLWorksheet worksheet, string column, int iRowI, XLCellValue value, string format = null)
{
worksheet.Cell($"{column}{iRowI}").Value = value;
if (format != null)
{
worksheet.Cell($"{column}{iRowI}").Style.NumberFormat.Format = format; // Ensure integer format
}
}
public static string NextColumn(string column)
{
if (string.IsNullOrEmpty(column))
return "A";
char[] chars = column.ToUpper().ToCharArray();
int i = chars.Length - 1;
while (i >= 0)
{
if (chars[i] != 'Z')
{
chars[i]++;
break;
}
else
{
chars[i] = 'A';
i--;
}
}
if (i < 0)
return "A" + new string(chars);
return new string(chars);
}
public static int GetColumnDistance(string col1, string col2)
{
return ColumnToNumber(col2) - ColumnToNumber(col1);
}
public static int ColumnToNumber(string col)
{
int number = 0;
foreach (char c in col.ToUpper())
{
number = number * 26 + (c - 'A' + 1);
}
return number;
}
public static string GetExcelColumnByDistance(string startColumn, int distance)
{
int startNumber = ColumnToNumber(startColumn);
int targetNumber = startNumber + distance;
return NumberToColumn(targetNumber);
}
private static string NumberToColumn(int number)
{
string column = string.Empty;
while (number > 0)
{
number--;
column = (char)('A' + (number % 26)) + column;
number /= 26;
}
return column;
}
public static bool AreClose(double valA, double valB, double tolerance = 0.0001)
{
if ((valA + tolerance) > valB && (valA - tolerance) < valB)
{
return true;
}
return false;
}
}
}
-43
View File
@@ -1,43 +0,0 @@
using ClosedXML.Excel;
namespace Results.Uncertainty.CommonTable
{
public class Cell
{
public int IRow { get; }
public int IColumn { get; }
public XLCellValue Value { get; set; }
// The names (if any) of the row/column
public string ColumnName { get; }
public string RowName { get; }
/// <summary>
/// Excelstyle address, e.g. “B3”.
/// </summary>
public string Address => $"{ToLetter(IColumn + 1)}{IRow + 1}";
public Cell(int col, int row, XLCellValue value,
string colName = null, string rowName = null)
{
IColumn = col;
IRow = row;
Value = value;
ColumnName = colName;
RowName = rowName;
}
// Convert 1-based column number into letters
private static string ToLetter(int col)
{
var s = "";
while (col > 0)
{
int m = (col - 1) % 26;
s = (char)('A' + m) + s;
col = (col - m - 1) / 26;
}
return s;
}
}
}
-232
View File
@@ -1,232 +0,0 @@
using System.Collections.Generic;
using ClosedXML.Excel;
using System;
using System.Collections.Generic;
using ClosedXML.Excel;
namespace Results.Uncertainty.CommonTable
{
public class Table
{
private int iOffsetRows = 0;
private int iOffsetColumns = 0;
public int IOffsetRows
{
get => iOffsetRows;
set => iOffsetRows = value;
}
public int IOffsetColumns
{
get => iOffsetColumns;
set => iOffsetColumns = value;
}
// The grid of cells
public IList<IList<Cell>> Cells { get; private set; }
= new List<IList<Cell>>();
// Optional names for columns and rows
public IList<string> ColumnNames { get; private set; }
= new List<string>();
public IList<string> RowNames { get; private set; }
= new List<string>();
public Table() { }
public void AddColumnExcel(string nameStart, string nameEnd)
{
int distance = CommonExcell.GetColumnDistance(nameStart, nameEnd);
int iStart = CommonExcell.ColumnToNumber(nameStart);
AddColumn(nameStart);
for (int i = 0; i < distance; i++)
{
AddColumn(CommonExcell.GetExcelColumnByDistance(nameStart, i+1));
}
}
public void GenerateTable_RowsColumns_Excel(string nameStart, string nameEnd, int iRowsCount)
{
AddColumnExcel(nameStart, nameEnd);
for (int i = 0; i < iRowsCount; i++)
{
AddRow(i.ToString());
}
}
/// <summary>
/// Adds a new column (with optional name) and returns its index.
/// </summary>
public int AddColumn(string name = null)
{
int colIndex = ColumnNames.Count;
ColumnNames.Add(name);
// Grow every existing row by one
for (int r = 0; r < Cells.Count; r++)
{
Cells[r].Add(new Cell(colIndex, r, new XLCellValue(), name, RowNames[r]));
}
return colIndex;
}
/// <summary>
/// Adds a new row (with optional name) and returns its index.
/// </summary>
public int AddRow(string name = null)
{
int rowIndex = Cells.Count;
RowNames.Add(name);
var newRow = new List<Cell>(ColumnNames.Count);
// Initialize with empty cells
for (int c = 0; c < ColumnNames.Count; c++)
{
newRow.Add(new Cell(c, rowIndex, new XLCellValue(), ColumnNames[c], name));
}
Cells.Add(newRow);
return rowIndex;
}
/// <summary>
/// Ensures the given [row,col] exists, creating rows/columns as needed.
/// </summary>
private void EnsurePosition(int rowIndex, int colIndex)
{
while (Cells.Count <= rowIndex)
AddRow();
var row = Cells[rowIndex];
while (row.Count <= colIndex)
AddColumn();
}
/// <summary>
/// Sets the value of the cell at [rowIndex, colIndex].
/// </summary>
public void AddCell(int rowIndex, int colIndex, XLCellValue value)
{
EnsurePosition(rowIndex, colIndex);
Cells[rowIndex][colIndex].Value = value;
}
/// <summary>
/// Sets the value of the cell at [rowIndex, columnName].
/// If the columnName doesnt exist yet, its created.
/// </summary>
public void AddCell(int rowIndex, string columnName, XLCellValue value)
{
int colIndex = ColumnNames.IndexOf(columnName);
if (colIndex < 0)
colIndex = AddColumn(columnName);
AddCell(rowIndex, colIndex, value);
}
/// <summary>
/// Retrieves a cell by numeric coordinates.
/// </summary>
public Cell GetCell(int rowIndex, int colIndex)
=> Cells[rowIndex][colIndex];
/// <summary>
/// Retrieves a cell by rowIndex and columnName.
/// </summary>
public Cell GetCell(int rowIndex, string columnName)
{
int colIndex = ColumnNames.IndexOf(columnName);
if (colIndex < 0)
throw new ArgumentException($"Column '{columnName}' not found.");
return GetCell(rowIndex, colIndex);
}
/// <summary>
/// Writes the entire table into the given worksheet,
/// optionally including the header row of column names.
/// </summary>
public void ToWorksheet(IXLWorksheet ws, bool includeHeaders = true)
{
int startRow = 1;
if (includeHeaders)
{
for (int c = 0; c < ColumnNames.Count; c++)
ws.Cell(1, c + 1).Value = ColumnNames[c] ?? string.Empty;
startRow = 2;
}
for (int r = 0; r < Cells.Count; r++)
{
for (int c = 0; c < Cells[r].Count; c++)
{
ws.Cell(r + startRow, c + 1).Value = Cells[r][c].Value;
}
}
}
/// <summary>
/// Writes the entire table into the given worksheet,
/// optionally including the header row of column names.
/// </summary>
public void ToWorksheetWithOffset(IXLWorksheet ws, int rowsOffset = 1, int columnsOffset = 0, bool includeHeaders = true)
{
int startRow = rowsOffset;
if (includeHeaders)
{
for (int c = 0; c < ColumnNames.Count; c++)
ws.Cell(1, c + 1).Value = ColumnNames[c] ?? string.Empty;
startRow = 2;
}
for (int r = 0; r < Cells.Count; r++)
{
for (int c = 0; c < Cells[r].Count; c++)
{
if(!(Cells[r][c].Value.IsBlank || Cells[r][c].Value.Type == XLDataType.Blank))
{
ws.Cell(r + startRow, c + 1 + columnsOffset).Value = Cells[r][c].Value;
}
}
}
}
/// <summary>
/// Returns all cells in the given row (by zerobased index).
/// </summary>
public IList<Cell> GetRow(int rowIndex)
{
if (rowIndex < 0 || rowIndex >= Cells.Count)
throw new IndexOutOfRangeException($"Row {rowIndex} does not exist.");
return Cells[rowIndex];
}
/// <summary>
/// Returns all cells in the given column (by zerobased index).
/// </summary>
public IList<Cell> GetColumn(int colIndex)
{
if (colIndex < 0 || colIndex >= ColumnNames.Count)
throw new IndexOutOfRangeException($"Column {colIndex} does not exist.");
var list = new List<Cell>();
for (int r = 0; r < Cells.Count; r++)
{
// skip if that row hasnt grown that far yet
if (Cells[r].Count > colIndex)
list.Add(Cells[r][colIndex]);
}
return list;
}
}
}
-133
View File
@@ -1,133 +0,0 @@
///
/// Copyright (c) 2023 Sensus Slovensko a.s.
///
using System.Collections.Generic;
using Common;
namespace Results.Uncertainty
{
/// <summary>
/// Action of a DataEntry field
/// </summary>
public enum Ac
{
[Description("Clear")] Clear, /// Clear when the form is open, save on OK
[Description("Last from history")] HistoryLast,
[Description("Load")] Load, /// Load from water meters when the form is open, save on OK
[Description("Load (readonly)")] LoadReadOnly, /// Load from water meters when the form is open, prevent changes, do not save
[Description("Set")] Set, /// Set to 'yes' when the form is open
Count,
}
/// <summary>
/// Content of a DataEntry field
/// </summary>
public enum Ct
{
[Description("None")] None,
[Description("Serial nr.")] SerialNr,
[Description("Serial nr. aux")] SerialNrAux,
[Description("Radio address")] RadioAddress,
[Description("Year of calibration")] YearOfCalibration,
[Description("Start state")] StartState,
[Description("Start state aux")] StartStateAux,
[Description("End state")] EndState,
[Description("End state aux")] EndStateAux,
[Description("Archive path")] ArchivePath,
[Description("WM Order")] WmOrder,
[Description("Batch order")] BatchOrder,
[Description("Batch and WM order")] BatchAndWmOrder,
[Description("WM Remark")] WmRemark,
[Description("Batch remark")] BatchRemark,
[Description("Batch and WM remark")] BatchAndWmRemark,
[Description("Print label")] PrintLabel,
#if ORACLE_DB
[Description("Prefix")] Prefix,
[Description("Suffix")] Suffix,
#endif
Count
}
/// <summary>
/// Function of the multi purpose button
/// </summary>
public enum MultiPurposeBtnFunction
{
None,
AutoSN,
PrintLabelsOnOff,
}
///
/// Identifies image instance
///
public enum Tst
{
Start,
End,
Both,
Collect,
}
///
/// Image rotation
///
public enum Rotation
{
R0,
R90,
R180,
R270,
Count
}
public class DEItem
{
public readonly Ct Content;
public readonly string Caption;
public readonly Ac Action;
public readonly int Width;
public DEItem(Ct content, string caption, Ac action, int width)
{
Content = content;
Caption = caption;
Action = action;
Width = width;
}
static IList<DEItem> items = new List<DEItem>();
///
public static void ClearItems() { items.Clear(); }
public static void AddItem(DEItem item) { items.Add(item); }
public static void AddItem(Ct content, string caption, Ac action, int width)
{
items.Add(new DEItem(content, caption, action, width));
}
public static IList<DEItem> GetItems() { return items; }
static IList<DEItem> columns = new List<DEItem>();
///
public static void ClearColumns() { columns.Clear(); }
public static void AddColumn(DEItem column) { columns.Add(column); }
public static void AddColumn(Ct content, string caption, Ac action, int width)
{
columns.Add(new DEItem(content, caption, action, width));
}
public static IList<DEItem> GetColumns() { return columns; }
static IList<DEItem> summaryColumns = new List<DEItem>();
///
public static void ClearSummaryColumns() { summaryColumns.Clear(); }
public static void AddSummaryColumn(DEItem column) { summaryColumns.Add(column); }
public static void AddSummaryColumn(Ct content, string caption, Ac action, int width)
{
summaryColumns.Add(new DEItem(content, caption, action, width));
}
public static IList<DEItem> GetSummaryColumns() { return summaryColumns; }
}
}
-122
View File
@@ -1,122 +0,0 @@
///
/// Copyright (c) 2018-2023 Sensus Slovensko a.s.
///
using System.Windows.Forms;
using Results.Entities;
namespace Results.Uncertainty
{
public class Strings
{
public static string yes = "yes";
public static string no = "no";
}
public class DEUtils
{
public static string GetContent(Ct content, WaterMeter wm)
{
if (wm == null) return string.Empty;
switch (content)
{
default:
case Ct.None: return string.Empty;
case Ct.SerialNr: return (!wm.Disabled && wm.SerialNr != null) ? wm.SerialNr : string.Empty;
case Ct.SerialNrAux: return (!wm.Disabled && wm.SerialNrAux != null) ? wm.SerialNrAux : string.Empty;
case Ct.RadioAddress: return (!wm.Disabled && wm.RadioAddress != null) ? wm.RadioAddress : string.Empty;
case Ct.YearOfCalibration: return (!wm.Disabled) ? wm.YearOfProduction.ToString() : string.Empty;
case Ct.StartState: return (!wm.Disabled && wm.GetStartState() != null) ? wm.GetStartState() : string.Empty;
case Ct.StartStateAux: return string.Empty;
case Ct.EndState: return (!wm.Disabled && wm.EndState != null) ? wm.EndState : string.Empty;
case Ct.EndStateAux: return (!wm.Disabled && wm.GetEndStateAux() != null) ? wm.GetEndStateAux() : string.Empty;
case Ct.ArchivePath: return (!wm.Disabled && wm.ArchivePath != null) ? wm.ArchivePath : string.Empty;
case Ct.WmOrder: return (!wm.Disabled && wm.PurchaseOrder != null) ? wm.PurchaseOrder : string.Empty;
case Ct.BatchOrder: return (wm.Batch != null && wm.Batch.PurchaseOrder != null) ? wm.Batch.PurchaseOrder : string.Empty;
case Ct.BatchAndWmOrder: return (wm.Batch != null && wm.Batch.PurchaseOrder != null) ? wm.Batch.PurchaseOrder : string.Empty;
case Ct.WmRemark: return (!wm.Disabled && wm.Remark != null) ? wm.Remark : string.Empty;
case Ct.BatchRemark: return (wm.Batch != null && wm.Batch.Remark != null) ? wm.Batch.Remark : string.Empty;
case Ct.BatchAndWmRemark: return (wm.Batch != null && wm.Batch.Remark != null) ? wm.Batch.Remark : string.Empty;
case Ct.PrintLabel: return wm.PrintLabel ? Strings.yes : Strings.no;
#if ORACLE_DB
case Ct.Prefix: return (!wm.Disabled && wm.Prefix != null) ? wm.Prefix : string.Empty;
case Ct.Suffix: return (!wm.Disabled && wm.Suffix != null) ? wm.Suffix : string.Empty;
#endif
}
}
public static void PutContent(Ct content, WaterMeter wm, string value)
{
if (wm == null || wm.Disabled) return;
int year;
switch (content)
{
default:
case Ct.None: return;
case Ct.SerialNr: wm.SerialNr = value; return;
case Ct.SerialNrAux: wm.SerialNrAux = value; return;
case Ct.RadioAddress: wm.RadioAddress = value; return;
case Ct.YearOfCalibration: if (int.TryParse(value, out year)) wm.YearOfProduction = year; return;
case Ct.StartState: wm.SetStartState(value); return;
case Ct.StartStateAux: return;
case Ct.EndState: wm.EndState = value; return;
case Ct.EndStateAux: wm.SetEndStateAux(value); return;
case Ct.ArchivePath: wm.ArchivePath = value; return;
case Ct.WmOrder:
wm.PurchaseOrder = value;
return;
case Ct.BatchOrder:
case Ct.BatchAndWmOrder:
if (wm.Batch != null) wm.Batch.PurchaseOrder = value;
return;
case Ct.WmRemark:
wm.Remark = value;
return;
case Ct.BatchRemark:
case Ct.BatchAndWmRemark:
if (wm.Batch != null) wm.Batch.Remark = value;
return;
case Ct.PrintLabel:
wm.PrintLabel = (value == Strings.yes);
return;
#if ORACLE_DB
case Ct.Prefix: wm.Prefix = value; return;
case Ct.Suffix: wm.Suffix = value; return;
#endif
}
}
/// <summary>
/// Load Purchase order combo box items from the LocalSettings PurchaseOrderHistory array
/// </summary>
/// <param name="comboBox">Puchase order ComboBox</param>
public static void PrepareCombo(ComboBox comboBox, string[] history, bool emptyOnStart = false)
{
int historyLen = (history != null) ? history.Length : 0;
if (!emptyOnStart && (historyLen > 0))
{
comboBox.Text = history[0];
}
else
{
comboBox.Text = string.Empty;
}
for (int i = 0; i < historyLen; i++)
{
comboBox.Items.Add(history[i]);
}
}
}
}
-39
View File
@@ -1,39 +0,0 @@
using System;
using System.ComponentModel;
using System.Reflection;
namespace Results.Uncertainty
{
public enum DocumentSheets
{
[Description("RADATA")] RADATA,
[Description("DATA")] DATA,
[Description("IC")] IC,
[Description("CERTIFICATE")] CERTIFICATE,
[Description("L")] L,
[Description("REF METER CC")] REF_METER_CC,
[Description("Meter1ALL")] Meter1ALL,
[Description("UNCTABLE")] UNCTABLE,
[Description("CC")] CC,
[Description("CALINPUTS")] CALIMPUTS,
[Description("UNCTEST1")] UNCTEST1,
[Description("UNCTEST2")] UNCTEST2,
[Description("UNCTEST3")] UNCTEST3,
[Description("UNCTEST4")] UNCTEST4,
}
public static class EnumExtensions
{
public static string GetDescription(this Enum value)
{
FieldInfo field = value.GetType().GetField(value.ToString());
DescriptionAttribute attribute = field?.GetCustomAttribute<DescriptionAttribute>();
return attribute?.Description ?? value.ToString();
}
}
}
-325
View File
@@ -1,325 +0,0 @@
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Common;
using Results.Entities;
namespace Results.Uncertainty
{
public class ProcessDataLine
{
public DateTime DateTime;
public int Batch; //"B" //Batch - B
public string TestName; //"C", "Q1 (1/5)", formatStr); //Test Name - C
public int Reports; //"D", 5, formatInt); //Reports
public int RepCyc; //"E", 1, formatInt); //Rep cyc
public string TestMeth; //"F", "FlyingStartMassCollection", formatStr); //Test Meth.
public int TargetVOL; //"G", 1, formatInt); //Target VOL.
public double TargetQMin; //"H", 0.005, formatD4); //Target Q -
public double TargetQPlus; //"I", 0.0055, formatD4); //Target Q +
public int ErrLimitMin; //"J", -2, formatInt); //Err. LIMIT -
public int ErrLimitPlus; //"K", -2, formatInt); //Err. LIMIT +
public int TargetTempFrom; //"L", 15, formatInt); //Target temp from - L
public int TargetTempTo; //"M", 25, formatInt); //Target temp to - M
public int TargetPressFrom; //"N", 0, formatInt); //Target press from - N
public int TargetPressTo; //"O", 16, formatInt); //Target press to - O
public string MIDNumberName; //"P", "I4", formatStr);
public double MIDNumberValue; //"Q", 998.1848d, formatD4); //MID number - PQ
public string COR; //"R", "WT2", formatStr); //COR - R
public double TempAmbM; //"S", 20.0, formatD1); //Temp.Amb M - S
public int PressAmbM; //"T", 1010, formatInt); //Press.Amb M - T
public double HumidAmbM; //"U", 52.7, formatD1); //Humid.Amb M - U
public int PressUpME; //"V", 272, formatInt); //Press. UP ME - V
public int PressDwME; //"W", 277, formatInt); //Press. DW ME - W
public int PressDeME; //"X", 0, formatInt); //Press. DE ME - X
public int PressUpST; //"Y", 272, formatInt); //Press. UP ST - Y
public int PressDwST; //"Z", 277, formatInt); //Press. DW ST - Z
public int PressDES; //"AA", 0, formatInt); //Press. DES - AA
public int PressUpEN; //"AB", 271, formatInt); //Press UP EN - AB
public int PressDwEN; //"AC", 276, formatInt); //Press DW EN
public int PressDEE; //"AD", 0, formatInt); //Press. DEE
public double TempUpME; //"AE", 17.27103, formatD4); //Temp. UP ME
public double TempDwME; //"AF", 17.84066, formatD4); //Temp. DW ME
public double TempDiME; //"AG", 18.25793, formatD4); //Temp. DI ME
public double TempLoME; //"AH", 0, formatD4); //Temp. LO ME
public double TempHiME; //"AI", 0, formatD4); //Temp. HI ME
public double TempUpST; //"AJ", 17.18227, formatD4); //Temp. UP ST
public double TempDwST; //"AK", 17.78378, formatD4); //Temp. DW ST
public double TempDiST; //"AL", 18.1312, formatD4); //Temp. DI ST
public double TempLoST; //"AM", 0, formatD4); //Temp. LO ST
public double TempHiST; //"AN", 0, formatD4); //Temp. HI ST
public double TempUpEN; //"AO", 17.3036, formatD4); //Temp. UP EN
public double TempDwEN; //"AP", 17.88913, formatD4); //Temp. DW EN
public double TempDiEN; //"AQ", 18.35797, formatD4); //Temp. DI EN
public double TempLoEN; //"AR", 0, formatD4); //Temp. LO EN
public double TempHiEN; //"AS", 0, formatD4); //Temp. HI EN
//Mass vakues
public double MassStRaw; // "AT", iRowI, 18.104, formatD3); //Mass ST raw()
public double MassSt; // "AU", iRowI, 18.104, formatD3); //Mass ST ()
public double MassEnRaw; // "AV", iRowI, 19.087, formatD3); //Mass EN raw()
public double MassEn; // "AW", iRowI, 19.087, formatD3); //Mass EN ()
public double Mass; // "AX", iRowI, 0.983, formatD3); //Mass
//calculated values
public double RoWa; // "AY", iRowI, 999.0094727, formatD7); //Ro Wa
public double TempLnME; // "AZ", iRowI, 17.55585, formatD7); //Temp. LN ME
public double RoWat; // "BA", iRowI, 999.2654076, formatD7); //Ro Wat
public double RoAir; // "BB", iRowI, 0, formatD7); // Ro AIR
public double Kbuoyancy; // "BC", iRowI, 1.00103, formatD7); // Kbuoyancy
public int DensityOfSample; // "BD", iRowI, 998, formatInt); //Density of sample
public int TTempRO; // "BE", iRowI, 23, formatInt); //TTemp. RO()
public double QMax; // "BF", iRowI, 0.00539688, formatD7); //Q max ()
public double QMin; // "BG", iRowI, 0.005288206, formatD7); //Q min ()
public double QMean; // "BH", iRowI, 0.005257821, formatD7); //Q mean
public double Qctv; ///< "BI", iRowI, 23, formatD7); //Qctv
public double VolRI; // "BJ", iRowI, 1.00006944444444, formatD7); //Vol. RI
public double DivCorrection; // "BK", iRowI, 0, formatD3); //Div correction
public double T; // "BL", iRowI, 674.242981, formatD3); //T(s)()
public double ERelRef; ///< "BM", iRowI, 1.557125667, formatD7); //E rel.ref. ()
//CellData(worksheet, "BN", iRowI, , formatD7);
public int KMind; ///< "BO", iRowI, 14400, formatInt); //K MID ()
//CellData(worksheet, "BP", iRowI, , formatInt);//Const.MAS
//Additional values
public int DiverterStartTime; //"BQ", iRowI, 84, formatInt); //Diverter start time
public int DiverterEndTime; //"BR", iRowI, 86, formatInt); //Diverter end time
public int DiverterStartValeveOpenTime;//"BS", iRowI, 0, formatInt); // /// BS [ms] Start valve open time
public int DiverterStartValeveCloseTime;//"BT", iRowI, 0, formatInt); // /// BT [ms] Start valve close time
public double TempUpMax; //"BU", iRowI, 17.40029, formatD7); //Temp. UP max
public double TempDwMax; //"BV", iRowI, 17.91978, formatD7); // Temp DW max
public double TempUpMin; //"BW", iRowI, 17.14815, formatD7); //Temp UP min
public double TempDwMin; //"BX", iRowI, 17.74739, formatD7); //Temp DW min
public double TempT10; //"BY", iRowI, 0, formatD7); //10 - T1,2
public double TempAmbEn; //"BZ", iRowI, 20.1, formatD1); //Temp Amb En
public int PressAmbEn; //"CA", iRowI, 1010, formatInt); //Press Amb En
public double HumAmbEn; //"CB", iRowI, 52.8, formatD1); //Hum Amb En
//checking
public int RefPulses; //"CC", iRowI, 14401, formatInt); //Ref pulses()
public int DiverterTestTimeCorrection; //CellData(worksheet, "CD", iRowI, , formatInt); /// CD [ms] Diverter test time correction
public IList<ProcessDataMeterLine> processDataMeterList = new List<ProcessDataMeterLine>();
public void InitDefault()
{
DateTime = DateTime.Now;
Batch = 914;
TestName = "Q1 (1/5)";
Reports = 5;
RepCyc = 1;
TestMeth = "FlyingStartMassCollection";
TargetVOL = 1;
TargetQMin = 0.005;
TargetQPlus = 0.0055;
ErrLimitMin = -2;
ErrLimitPlus = -2;
TargetTempFrom = 15;
TargetTempTo = 25;
TargetPressFrom = 0;
TargetPressTo = 16;
MIDNumberName = "I4";
MIDNumberValue = 998.1848d;
COR = "WT2";
TempAmbM = 20.0;
PressAmbM = 1010;
HumidAmbM = 52.7;
PressUpME = 272;
PressDwME = 277;
PressDeME = 0;
PressUpST = 272;
PressDwST = 277;
PressDES = 0;
PressUpEN = 271;
PressDwEN = 276;
PressDEE = 0;
TempUpME = 17.27103;
TempDwME = 17.84066;
TempDiME = 18.25793;
TempLoME = 0;
TempHiME = 0;
TempUpST = 17.18227;
TempDwST = 17.78378;
TempDiST = 18.1312;
TempLoST = 0;
TempHiST = 0;
TempUpEN = 17.3036;
TempDwEN = 17.88913;
TempDiEN = 18.35797;
TempLoEN = 0;
TempHiEN = 0;
MassStRaw = 18.104;
MassSt = 18.104;
MassEnRaw = 19.087;
MassEn = 19.087;
Mass = 0.983;
RoWa = 999.0094727;
TempLnME = 17.55585;
RoWat = 999.2654076;
RoAir = 0;
Kbuoyancy = 1.00103;
DensityOfSample = 998;
TTempRO = 23;
QMax = 0.00539688;
QMin = 0.005288206;
QMean = 0.005257821;
Qctv = 23;
VolRI = 1.00006944444444;
DivCorrection = 0;
T = 674.242981;
ERelRef = 1.557125667;
KMind = 14400;
DiverterStartTime = 84;
DiverterEndTime = 86;
TempUpMax = 17.40029;
TempDwMax = 17.91978;
TempUpMin = 17.14815;
TempDwMin = 17.74739;
TempT10 = 0;
TempAmbEn = 20.1;
PressAmbEn = 1010;
HumAmbEn = 52.8;
RefPulses = 14401;
DiverterTestTimeCorrection = 0;
for (int i = 0; i < 3; i++)
{
ProcessDataMeterLine meterLine = new ProcessDataMeterLine();
meterLine.InitDefault();
meterLine.val[0] = $"XXXX{i}";
processDataMeterList.Add(meterLine);
}
}
public void Init(Results.Entities.TestRslt tstRslt)
{
bool isPMaxTest = tstRslt.IsPMaxTest();
bool isStartStop = tstRslt.IsStartStop();
bool isDiverter = tstRslt.IsDiverter();
bool isVolumeMethod = tstRslt.IsVolumeMethod();
DateTime =tstRslt.StartTime; /// A
Batch = tstRslt.Batch.BatchNr; /// B
/// Test information, target values, etc.
TestName = tstRslt.Name(); /// C
Reports = tstRslt.Repeats(); /// D
RepCyc = tstRslt.RepetitionNr; /// E
TestMeth = tstRslt.Method(); /// F
TargetVOL = Convert.ToInt32(tstRslt.TargetVolume()); /// G
TargetQMin = tstRslt.Qfrom(); /// H
TargetQPlus = tstRslt.Qto(); /// I
ErrLimitMin = Convert.ToInt32(tstRslt.ErrLimLo() + tstRslt.ErrLimMargin()); /// J
ErrLimitPlus = Convert.ToInt32(tstRslt.ErrLimHi() - tstRslt.ErrLimMargin()); /// K
TargetTempFrom = Convert.ToInt32(Double.Parse(string.Format("{0:F1}", tstRslt.TempLimLo()))); /// L
TargetTempTo = Convert.ToInt32(Double.Parse(string.Format("{0:F1}", tstRslt.TempLimHi()))); /// M
TargetPressFrom = 0; /// N
TargetPressTo = 16; /// O
MIDNumberName = tstRslt.RefFlowmeter(); /// P
MIDNumberValue = Double.Parse(string.Format("{0:F4}", Formulas.DistilledWaterDensityFromTemp(tstRslt.AmbTempMean))); /// Q [kg/m3] hustota vody pri teplote okolia z priemernej teploty okolia bez korekcie na realnu hustotu vody
COR = ((tstRslt.Components != null) ? tstRslt.Components.Scale : string.Empty); /// R
/// Ambient
TempAmbM = Double.Parse(string.Format("{0:F1}", Units.ConvertTo(Unit.C, tstRslt.AmbTempStart))); /// S [°C]
PressAmbM = Convert.ToInt32(Double.Parse(string.Format("{0:F0}", Units.ConvertTo(Unit.mbar, tstRslt.AmbPressStart)))); /// T [mbar]
HumidAmbM = Double.Parse(string.Format("{0:F1}", Units.ConvertTo(Unit.RPct, tstRslt.AmbHumiStart))); /// U [R%]
/// Pressure
PressUpME = Convert.ToInt32(Double.Parse(string.Format("{0:F0}", Units.ConvertTo(Unit.kPa, tstRslt.PressUpMean)))); /// V [kPa]
PressDwME = Convert.ToInt32(Double.Parse(string.Format("{0:F0}", Units.ConvertTo(Unit.kPa, tstRslt.PressDownMean)))); /// W [kPa]
PressDeME = Convert.ToInt32(Double.Parse(string.Format("{0:F1}", Units.ConvertTo(Unit.kPa, tstRslt.PressDeltaMean)))); /// X [kPa]
PressUpST = Convert.ToInt32(Double.Parse(string.Format("{0:F0}", Units.ConvertTo(Unit.kPa, tstRslt.PressUpStart)))); /// Y [kPa]
PressDwST = Convert.ToInt32(Double.Parse(string.Format("{0:F0}", Units.ConvertTo(Unit.kPa, tstRslt.PressDownStart)))); /// Z [kPa]
PressDES = Convert.ToInt32(Double.Parse(string.Format("{0:F1}", Units.ConvertTo(Unit.kPa, tstRslt.PressDeltaStart)))); /// AA [kPa]
PressUpEN = Convert.ToInt32(Double.Parse(string.Format("{0:F0}", Units.ConvertTo(Unit.kPa, tstRslt.PressUpEnd)))); /// AB [kPa]
PressDwEN = Convert.ToInt32(Double.Parse(string.Format("{0:F0}", Units.ConvertTo(Unit.kPa, tstRslt.PressDownEnd)))); /// AC [kPa]
PressDEE = Convert.ToInt32(Double.Parse(string.Format("{0:F1}", Units.ConvertTo(Unit.kPa, tstRslt.PressDeltaEnd)))); /// AD [kPa]
/// Temperature
TempUpME = (Units.ConvertTo(Unit.C, tstRslt.TempUpMean)); /// AE [°C]
TempDwME = (Units.ConvertTo(Unit.C, tstRslt.TempDownMean)); /// AF [°C]
TempDiME = (Units.ConvertTo(Unit.C, tstRslt.TempDivMean)); /// AG [°C]
TempLoME = (Units.ConvertTo(Unit.C, tstRslt.Custom1)); /// AH [°C] T hi mean
TempHiME = (Units.ConvertTo(Unit.C, tstRslt.Custom6)); /// AI [°C] T lo mean
TempUpST = (Units.ConvertTo(Unit.C, tstRslt.TempUpStart)); /// AJ [°C]
TempDwST = (Units.ConvertTo(Unit.C, tstRslt.TempDownStart)); /// AK [°C]
TempDiST = (Units.ConvertTo(Unit.C, tstRslt.TempDivStart)); /// AL [°C]
TempLoST = (Units.ConvertTo(Unit.C, tstRslt.Custom2)); /// AM [°C] T hi start
TempHiST = (Units.ConvertTo(Unit.C, tstRslt.Custom7)); /// AN [°C] T lo start
TempUpEN = (Units.ConvertTo(Unit.C, tstRslt.TempUpEnd)); /// AO [°C]
TempDwEN = (Units.ConvertTo(Unit.C, tstRslt.TempDownEnd)); /// AP [°C]
TempDiEN = (Units.ConvertTo(Unit.C, tstRslt.TempDivEnd)); /// AQ [°C]
TempLoEN = (Units.ConvertTo(Unit.C, tstRslt.Custom3)); /// AR [°C] T hi end
TempHiEN = (Units.ConvertTo(Unit.C, tstRslt.Custom8)); /// AS [°C] T lo end
/// Mass
MassStRaw = (tstRslt.MassStartRaw); /// AT [kg]
MassSt = (tstRslt.MassStart); /// AU [kg]
MassEnRaw = (tstRslt.MassEndRaw); /// AV [kg]
MassEn = (tstRslt.MassEnd); /// AW [kg]
Mass = (tstRslt.MassEnd - tstRslt.MassStart); /// AX [kg]
/// Density and buoyancy
RoWa = (tstRslt.DensityDiv); /// AY [kg/m3]
TempLnME = ((tstRslt.TempUpMean + tstRslt.TempDownMean) / 2); /// AZ [°C] Tline ... priemerna teplota v linii
RoWat = (tstRslt.DensityLine); /// BA [kg/m3]
RoAir = (tstRslt.MassOfEvapWater); /// BB [kg] mass of evaporated water
Kbuoyancy = (tstRslt.Batch.Buoyancy); /// BC Buoyancy: Sheet1 - X9
DensityOfSample = Convert.ToInt32(tstRslt.Batch.SampleDensity); /// BD
TTempRO = Convert.ToInt32(tstRslt.Batch.SampleTemp); /// BE
QMax = (tstRslt.FlowMax); /// BF pipe expansion: teraz vynechat
QMin = (tstRslt.FlowMin); /// BG [kg/h] Qm
QMean = (tstRslt.Flow); /// BH [l/h] Qv
Qctv = (tstRslt.VolumeCTV); /// BI [l] Vet .... komercne prava hodnota objemu - podla vahy
VolRI = (tstRslt.VolumeMaster); /// BJ [l] Velm ... objem podla etalonu (Prolonged: objem do vahy podla impulzov hradlovanych klapkou)
DivCorrection = (tstRslt.TestTimeCorrection); /// BK [s] test time correction (diverter correction)
/// (ori.) BK [l] Vmass .. objem podla druheho etalonu / prietokomeru pred tratou (teraz vynechavame)
T = (tstRslt.TestTime); /// BL [s]
ERelRef = (isVolumeMethod ? Formulas.ErrorFromVolumes(tstRslt.ConstMasterCorr, tstRslt.ConstMasterRaw) : tstRslt.ErrorMaster);
/// BM [%] Eelm .... chyba etalonu voci komercne pravej hodnote
KMind = Convert.ToInt32((tstRslt.ConstMasterRaw != 0) ? (1 / tstRslt.ConstMasterRaw) : 0); /// BO [pls/l] Const.MID .. konstanta etalonu
DiverterStartTime = Convert.ToInt32(Double.Parse(string.Format("{0:F0}", isDiverter ? 1000.0F * tstRslt.DiverterStart : 0))); /// BQ [ms] Diverter start time
DiverterEndTime = Convert.ToInt32(Double.Parse(string.Format("{0:F0}", isDiverter ? 1000.0F * tstRslt.DiverterEnd : 0))); /// BR [ms] Diverter end time
DiverterStartValeveOpenTime = Convert.ToInt32(Double.Parse(string.Format("{0:F0}", isStartStop ? 1000.0F * tstRslt.DiverterStart : 0))); /// BS [ms] Start valve open time
DiverterStartValeveCloseTime = Convert.ToInt32(Double.Parse(string.Format("{0:F0}", isStartStop ? 1000.0F * tstRslt.DiverterEnd : 0))); /// BT [ms] Start valve close time
TempUpMax = (tstRslt.TempUpMax); /// BU [°C]
TempDwMax = (tstRslt.TempDownMax); /// BV [°C]
TempUpMin = (tstRslt.TempUpMin); /// BW [°C]
TempDwMin = (tstRslt.TempDownMin); /// BX [°C]
TempT10 = (isPMaxTest ? tstRslt.TestTime : 0); /// BY [s] Duration of the pressure test
TempAmbEn = Double.Parse(string.Format("{0:F1}", Units.ConvertTo(Unit.C, tstRslt.AmbTempEnd))); /// BZ [°C]
PressAmbEn = Convert.ToInt32(Double.Parse(string.Format("{0:F0}", Units.ConvertTo(Unit.mbar, tstRslt.AmbPressEnd)))); /// CA [mbar]
HumAmbEn = Double.Parse(string.Format("{0:F1}", Units.ConvertTo(Unit.RPct, tstRslt.AmbHumiEnd))); /// CB [R%]
RefPulses = Convert.ToInt32(tstRslt.PulsesMaster); /// CC Celkovy pocet et. pulzov skusky (Prolonged : do vahy)
DiverterTestTimeCorrection = Convert.ToInt32(1000 * tstRslt.TestTimeCorrection); /// CD [ms] Diverter test time correction
BatchResults batchResults = BatchResults.FromBatch(tstRslt.Batch);
for (int i = 0; i < batchResults.WMPositionsCount; i++)
{
if (batchResults.Batch.WaterMeters != null &&
batchResults.Batch.WaterMeters.Count > i &&
batchResults.Batch.WaterMeters[i] != null &&
!batchResults.Batch.WaterMeters[i].Disabled)
{
ProcessDataMeterLine meterLine = new ProcessDataMeterLine(tstRslt, batchResults, i);
processDataMeterList.Add(meterLine);
}
}
}
}
}
-472
View File
@@ -1,472 +0,0 @@
using System;
using ClosedXML.Excel;
using Common;
using Results.Entities;
namespace Results.Uncertainty
{
public class ProcessDataMeterLine
{
public XLCellValue[] val = new XLCellValue[21];
/*public string SerNo; // "Diehl202415687905" , formatStr);//Position - Ser.No. - CE
public int VolMtSt; // 0 , formatInt);//Vol.Mt.st - CF
public int VolMtEn; // 0 , formatInt);//Vol.Mt.en - CG
public double VolMt; // 0.975333560911164 , formatD7);//Vol.Mt. - CH
public double VolRm; // 0.980633088, formatD7);//Vol.rm - CI
public double ERel; // -0.540418981321314 , formatD6); // E rel. - CJ
public int
IPerlCalibrationFactor; // , formatInt); // U - CK // CK iPerl calibration factor used during the test / ...
public int Pulses; // 154 , formatInt); //Pulses() - CL
public int RefPulsesNi; // 14341 , formatInt); //Ref pulses_ni() - CM
public double T; // 671.4207764 , formatD4); //T(s)()_ni -CN
public string Evaluation; // "OK" , formatStr);//evaluation - CO
public double PulsesL; // 157.8947 , formatD4);//Pulses/l - CP
public int ImpL; // 4 , formatInt);//imp/l - CQ
public int Div; // 0 , formatInt);//div - CR
public int VEnd; // 0 , formatInt);//Vend
public int TEnd; // 0 , formatInt);//T end
public string[] SmryItems = new string[5]; // - 0/// CU - 1/// CV - 2/// CW - 3/// CX - 4/// CY
*/
public ProcessDataMeterLine(TestRslt tstRslt, BatchResults batchResults, int wmNr0)
{
var wm = batchResults.Batch.WaterMeters[wmNr0];
var smryItems = DEItem.GetSummaryColumns();
{
if (!wm.Compound() && !wm.HeatMeter())
{
/// If this is a single meter
Results.Entities.MeterTestRslt mtrRslt =
batchResults.GetMeterTestRslt(tstRslt.Name(), wmNr0, CompoundMeterId.Single);
if (mtrRslt != null)
{
bool isCamera = (mtrRslt.RegReaderType == (int)RegisterReaderType.Camera);
val[0] = wm.SerialNr; /// CE WM Ser.No.
val[1] = mtrRslt
.VolumeStart; /// CF WM Vstart - pociatocny stav pri pevnom starte alebo zachyteny pri data streame
val[2] = mtrRslt
.VolumeEnd; /// CG WM Vend - konecny stav pri pevnom starte alebo zachyteny pri data streame
val[3] = mtrRslt.VolumeMeter; /// CH WM Vmer - objem namerany vodomerom
val[4] = mtrRslt.VolumeRef; /// CI WM Vref - objem namerany stanicou
val[5] = mtrRslt.Error; /// CJ WM Emt - chyba vodomerom nameraneho objemu
#if IPERL
val[6] = wm.CalibFactor; /// CK iPerl calibration factor used during the test / ...
#else
val[6] = 0; /// CK nechat prazdne
#endif
val[7] = Convert.ToInt32(mtrRslt
.PulsesMeter); /// CL WM Np met - pocet impulzov zo skusaneho meradla
val[8] = Convert.ToInt32(mtrRslt
.PulsesMaster); /// CM WM Np elm - pocet impulzov etalonu pocas merania pre prislusny vodomer
val[9] = mtrRslt.TestTime; /// CN WM Tmet - cas merania (obmedzany pri synchro skuske)
val[10] = mtrRslt.Passed
? "OK"
: "NOK"; /// CO WM Vysledok (t.j. ci je v hraniciach chyb) - OK/NOK
#if IPERL
val[11] =
mtrRslt.WaterMeter.Q2CorrRL; /// CP iPerl Q2 correction factor used during the test / AN value - hodnota z analogoveho prevodnika
#else
val[11] = mtrRslt.PulsesPerLiter; /// CP Pulses per liter
#endif
val[12] = Convert.ToInt32(isCamera
? mtrRslt.VolumeStart * mtrRslt.PulsesPerLiter /// CQ WM Phi_start (pri hodnotach z kamery)
: wm.WMPosition); /// CQ WMPosition (normalne)
val[13] = Convert.ToInt32(isCamera
? mtrRslt.VolumeEnd * mtrRslt.PulsesPerLiter /// CR WM Phi_end (pri hodnotach z kamery)
: 0); /// CR not used/spare (normalne)
//TODO - Time start is in table as VEnd ??? check it
val[14] = Convert.ToInt32(mtrRslt.TimestampStart); /// CS WM Time_start - ' ' -
val[15] = Convert.ToInt32(mtrRslt.TimestampEnd); /// CT WM Time_end - ' ' -
//sb.Append(";"); sb.Append(isCamera ? mtrRslt.PulsesPerLiter : 0); /// CU camera: WM Degree per liter
val[16] = (smryItems.Count < 1 ? "0" : DEUtils.GetContent(smryItems[0].Content, wm)); /// CU
val[17] = (smryItems.Count < 2 ? "0" : DEUtils.GetContent(smryItems[1].Content, wm)); /// CV
val[18] = (smryItems.Count < 3 ? "0" : DEUtils.GetContent(smryItems[2].Content, wm)); /// CW
val[19] = (smryItems.Count < 4 ? "0" : DEUtils.GetContent(smryItems[3].Content, wm)); /// CX
val[20] = (smryItems.Count < 5 ? "0" : DEUtils.GetContent(smryItems[4].Content, wm)); /// CY
}
}
else if (wm.Compound())
{
/// Else if this is a compound meter
for (byte b = (byte)CompoundMeterId.CompoundMain; b <= (byte)CompoundMeterId.Compound; b++)
{
var mtrRslt = batchResults.GetMeterTestRslt(tstRslt.Name(), wmNr0, (CompoundMeterId)b);
if (mtrRslt != null)
{
int iIndex = 0;
switch ((CompoundMeterId)b)
{
case CompoundMeterId.CompoundMain:
val[0] = wm.SerialNr; /// CE
break;
case CompoundMeterId.CompoundAux:
val[0] = wm.SerialNrAux; /// CE
break;
case CompoundMeterId.Compound:
val[0] = wm.SerialNr; /// CE
break;
}
val[++iIndex] =
mtrRslt
.VolumeStart; /// CF WM Vinit - pri pevnom starte pociatocny stav natukany alebo cez inteligentny system
val[++iIndex] =
mtrRslt
.VolumeEnd; /// CG WM Vfin - pri pevnom starte konecny stav natukany alebo cez inteligentny system
val[++iIndex] = mtrRslt.VolumeMeter; /// CH WM Vmer - objem namerany vodomerom
val[++iIndex] = mtrRslt.VolumeRef; /// CI WM Vet - objem namerany stanicou
val[++iIndex] = mtrRslt.Error; /// CJ WM Emt - chyba vodomerom nameraneho objemu
val[++iIndex] = 0; /// CK WM U - neistota (zatial nechat prazdne)
val[++iIndex] = mtrRslt.PulsesMeter; /// CL WM Np met - pocet impulzov zo skusaneho meradla
val[++iIndex] =
mtrRslt
.PulsesMaster; /// CM WM Np elm - pocet impulzov etalonu pocas merania pre prislusny vodomer
val[++iIndex] =
mtrRslt.TestTime; /// CN WM Tmet - cas merania (obmedzany pri synchro skuske)
val[++iIndex] =
mtrRslt.Passed
? "OK"
: "NOK"; /// CO WM Vysledok (t.j. ci je v hraniciach chyb) - OK/NOK
val[++iIndex] = " "; /// CP WM AN value - hodnota z analogoveho prevodnika (teraz nic)
bool isCamera = mtrRslt.IsCamera();
val[++iIndex] = (isCamera
? mtrRslt.VolumeStart *
mtrRslt.PulsesPerLiter /// CQ WM Phi_start (pri hodnotach z kamery)
: wm.WMPosition); /// CQ WMPosition (normalne)
val[++iIndex] = (isCamera
? mtrRslt.VolumeEnd * mtrRslt.PulsesPerLiter /// CR WM Phi_end (pri hodnotach z kamery)
: 0); /// CR not used/spare (normalne)
val[++iIndex] = (isCamera ? mtrRslt.TimestampStart : 0); /// CS WM Time_start - ' ' -
val[++iIndex] = (isCamera ? mtrRslt.TimestampEnd : 0); /// CT WM Time_end - ' ' -
val[++iIndex] = (isCamera ? mtrRslt.PulsesPerLiter : 0); /// CU WM Degree per liter
val[++iIndex] = "0"; /// CV Analog out 1 (max mA)
val[++iIndex] = "0"; /// CW Analog out 2 (V)
val[++iIndex] = "0"; /// CX Analog out 3 (min mA)
val[++iIndex] = "0"; /// CY Analog out 4 (max Q)
}
}
}
else /// if (ProcessData.BatchRslts.WaterMeters[i].HeatMeter())
{
/// Else this is a heat meter
var volumeMtr =
batchResults.GetMeterTestRslt(tstRslt.Name(), wmNr0, CompoundMeterId.HeatMeterVolume);
var energyMtr =
batchResults.GetMeterTestRslt(tstRslt.Name(), wmNr0, CompoundMeterId.HeatMeterEnergy);
if (volumeMtr != null)
{
int iIndex = 0;
val[iIndex] = wm.SerialNr; /// WM Ser.No.
val[iIndex] =
volumeMtr
.VolumeStart; /// WM Vstart - pociatocny stav pri pevnom starte alebo zachyteny pri data streame
val[iIndex] =
volumeMtr
.VolumeEnd; /// WM Vend - konecny stav pri pevnom starte alebo zachyteny pri data streame
val[iIndex] = volumeMtr.VolumeMeter; /// WM Vmer - objem namerany vodomerom
val[iIndex] = volumeMtr.VolumeRef; /// WM Vref - objem namerany stanicou
val[iIndex] = volumeMtr.Error; /// WM Emt - chyba vodomerom nameraneho objemu
#if IPERL
val[iIndex] = wm.CalibFactor; /// iPerl calibration factor used during the test / ...
#else
val[iIndex] = 0; /// nechat prazdne
#endif
val[iIndex] = volumeMtr.PulsesMeter; /// WM Np met - pocet impulzov zo skusaneho meradla
val[iIndex] =
volumeMtr
.PulsesMaster; /// WM Np elm - pocet impulzov etalonu pocas merania pre prislusny vodomer
val[iIndex] = volumeMtr.TestTime; /// WM Tmet - cas merania (obmedzany pri synchro skuske)
val[iIndex] =
volumeMtr.Passed ? "OK" : "NOK"; /// WM Vysledok (t.j. ci je v hraniciach chyb) - OK/NOK
#if IPERL
val[iIndex] =
(volumeMtr.WaterMeter.Q2CorrRL); /// iPerl Q2 correction factor used during the test / AN value - hodnota z analogoveho prevodnika
#else
val[iIndex] = " "; /// nechat prazdne
#endif
val[iIndex] =
(volumeMtr.VolumeStart); /// WM Volume_start - pri datastreamovych hodnotach (alebo kamera)
val[iIndex] = (volumeMtr.TimestampStart); /// WM Time_start - ' ' -
val[iIndex] = (volumeMtr.VolumeEnd); /// WM Volume_end - ' ' -
val[iIndex] = (volumeMtr.TimestampEnd); /// WM Time_end - ' ' -
}
if (energyMtr != null)
{
int iIndex = 0;
val[iIndex] = (wm.SerialNr); /// WM Ser.No.
val[iIndex] =
(energyMtr
.VolumeStart); /// WM Vstart - pociatocny stav pri pevnom starte alebo zachyteny pri data streame
val[iIndex] =
(energyMtr
.VolumeEnd); /// WM Vend - konecny stav pri pevnom starte alebo zachyteny pri data streame
val[iIndex] = (energyMtr.VolumeMeter); /// WM Vmer - objem namerany vodomerom
val[iIndex] = (energyMtr.VolumeRef); /// WM Vref - objem namerany stanicou
val[iIndex] = (energyMtr.Error); /// WM Emt - chyba vodomerom nameraneho objemu
#if IPERL
val[iIndex] = wm.CalibFactor; /// iPerl calibration factor used during the test / ...
#else
val[iIndex] = " "; /// nechat prazdne
#endif
val[iIndex] = (energyMtr.PulsesMeter); /// WM Np met - pocet impulzov zo skusaneho meradla
val[iIndex] =
(energyMtr
.PulsesMaster); /// WM Np elm - pocet impulzov etalonu pocas merania pre prislusny vodomer
val[iIndex] = (energyMtr.TestTime); /// WM Tmet - cas merania (obmedzany pri synchro skuske)
val[iIndex] =
(energyMtr.Passed ? "OK" : "NOK"); /// WM Vysledok (t.j. ci je v hraniciach chyb) - OK/NOK
#if IPERL
val[iIndex] =
energyMtr.WaterMeter.Q2CorrRL; /// iPerl Q2 correction factor used during the test / AN value - hodnota z analogoveho prevodnika
#else
val[iIndex] = " "; /// nechat prazdne
#endif
val[iIndex] =
energyMtr.VolumeStart; /// WM Volume_start - pri datastreamovych hodnotach (alebo kamera)
val[iIndex] = energyMtr.TimestampStart; /// WM Time_start - ' ' -
val[iIndex] = energyMtr.VolumeEnd; /// WM Volume_end - ' ' -
val[iIndex] = energyMtr.TimestampEnd; /// WM Time_end - ' ' -
}
}
}
}
// public void ProcessDataMeterLine2(TestRslt tstRslt, WaterMeter wm, BatchResults batchResults, int wmNr0)
// {
// var smryItems = DEItem.GetSummaryColumns();
// {
//
//
// if (!wm.Compound() && !wm.HeatMeter())
// {
// /// If this is a single meter
//
// Results.Entities.MeterTestRslt mtrRslt = batchResults.GetMeterTestRslt(tstRslt.Name(), wmNr0, CompoundMeterId.Single);
//
// if (mtrRslt != null)
// {
// bool isCamera = (mtrRslt.RegReaderType == (int)RegisterReaderType.Camera);
//
// SerNo = wm.SerialNr;/// CE WM Ser.No.
// VolMtSt = mtrRslt.VolumeStart; /// CF WM Vstart - pociatocny stav pri pevnom starte alebo zachyteny pri data streame
// VolMtEn = mtrRslt.VolumeEnd; /// CG WM Vend - konecny stav pri pevnom starte alebo zachyteny pri data streame
// VolMt = mtrRslt.VolumeMeter; /// CH WM Vmer - objem namerany vodomerom
// VolRm = mtrRslt.VolumeRef; /// CI WM Vref - objem namerany stanicou
// ERel = mtrRslt.Error; /// CJ WM Emt - chyba vodomerom nameraneho objemu
// #if IPERL
// IPerlCalibrationFactor = wm.CalibFactor; /// CK iPerl calibration factor used during the test / ...
// #else
// IPerlCalibrationFactor = 0; /// CK nechat prazdne
// #endif
// Pulses = Convert.ToInt32(mtrRslt.PulsesMeter); /// CL WM Np met - pocet impulzov zo skusaneho meradla
// RefPulsesNi = Convert.ToInt32(mtrRslt.PulsesMaster); /// CM WM Np elm - pocet impulzov etalonu pocas merania pre prislusny vodomer
// T = mtrRslt.TestTime; /// CN WM Tmet - cas merania (obmedzany pri synchro skuske)
// Evaluation = mtrRslt.Passed ? "OK" : "NOK"; /// CO WM Vysledok (t.j. ci je v hraniciach chyb) - OK/NOK
// #if IPERL
// PulsesL = mtrRslt.WaterMeter.Q2CorrRL; /// CP iPerl Q2 correction factor used during the test / AN value - hodnota z analogoveho prevodnika
// #else
// PulsesL = mtrRslt.PulsesPerLiter; /// CP Pulses per liter
// #endif
// ImpL = Convert.ToInt32(isCamera
// ? mtrRslt.VolumeStart * mtrRslt.PulsesPerLiter /// CQ WM Phi_start (pri hodnotach z kamery)
// : wm.WMPosition); /// CQ WMPosition (normalne)
// Div = Convert.ToInt32(isCamera
// ? mtrRslt.VolumeEnd * mtrRslt.PulsesPerLiter /// CR WM Phi_end (pri hodnotach z kamery)
// : 0); /// CR not used/spare (normalne)
//
// //TODO - Time start is in table as VEnd ??? check it
// VEnd = Convert.ToInt32(mtrRslt.TimestampStart); /// CS WM Time_start - ' ' -
// TEnd = Convert.ToInt32(mtrRslt.TimestampEnd); /// CT WM Time_end - ' ' -
//
// //sb.Append(";"); sb.Append(isCamera ? mtrRslt.PulsesPerLiter : 0); /// CU camera: WM Degree per liter
// SmryItems[0] = (smryItems.Count < 1 ? "0" : DEUtils.GetContent(smryItems[0].Content, wm)); /// CU
// SmryItems[1] = (smryItems.Count < 2 ? "0" : DEUtils.GetContent(smryItems[1].Content, wm)); /// CV
// SmryItems[2] = (smryItems.Count < 3 ? "0" : DEUtils.GetContent(smryItems[2].Content, wm)); /// CW
// SmryItems[3] = (smryItems.Count < 4 ? "0" : DEUtils.GetContent(smryItems[3].Content, wm)); /// CX
// SmryItems[4] = (smryItems.Count < 5 ? "0" : DEUtils.GetContent(smryItems[4].Content, wm)); /// CY
// }
// }
// else if (wm.Compound())
// {
// /// Else if this is a compound meter
//
// for (byte b = (byte)CompoundMeterId.CompoundMain; b <= (byte)CompoundMeterId.Compound; b++)
// {
// var mtrRslt = batchResults.GetMeterTestRslt(tstRslt.Name(), wmNr0, (CompoundMeterId)b);
//
// if (mtrRslt != null)
// {
// switch ((CompoundMeterId)b)
// {
// case CompoundMeterId.CompoundMain:
// SerNo = wm.SerialNr; /// CE
// break;
// case CompoundMeterId.CompoundAux:
// SerNo = wm.SerialNrAux; /// CE
// break;
// case CompoundMeterId.Compound:
// SerNo = wm.SerialNr; /// CE
// break;
// }
// VolMtSt = mtrRslt.VolumeStart; /// CF WM Vinit - pri pevnom starte pociatocny stav natukany alebo cez inteligentny system
// VolMtEn = mtrRslt.VolumeEnd; /// CG WM Vfin - pri pevnom starte konecny stav natukany alebo cez inteligentny system
// VolMt = mtrRslt.VolumeMeter; /// CH WM Vmer - objem namerany vodomerom
// VolRm = mtrRslt.VolumeRef; /// CI WM Vet - objem namerany stanicou
// ERel = mtrRslt.Error; /// CJ WM Emt - chyba vodomerom nameraneho objemu
// IPerlCalibrationFactor = 0; /// CK WM U - neistota (zatial nechat prazdne)
// Pulses = mtrRslt.PulsesMeter; /// CL WM Np met - pocet impulzov zo skusaneho meradla
// RefPulsesNi = mtrRslt.PulsesMaster; /// CM WM Np elm - pocet impulzov etalonu pocas merania pre prislusny vodomer
// T = mtrRslt.TestTime; /// CN WM Tmet - cas merania (obmedzany pri synchro skuske)
// Evaluation = mtrRslt.Passed ? "OK" : "NOK"; /// CO WM Vysledok (t.j. ci je v hraniciach chyb) - OK/NOK
// PulsesL = 0;//" " /// CP WM AN value - hodnota z analogoveho prevodnika (teraz nic)
//
// bool isCamera = mtrRslt.IsCamera();
// ImpL = (isCamera
// ? mtrRslt.VolumeStart * mtrRslt.PulsesPerLiter /// CQ WM Phi_start (pri hodnotach z kamery)
// : wm.WMPosition); /// CQ WMPosition (normalne)
// Div = (isCamera
// ? mtrRslt.VolumeEnd * mtrRslt.PulsesPerLiter /// CR WM Phi_end (pri hodnotach z kamery)
// : 0); /// CR not used/spare (normalne)
// VEnd = (isCamera ? mtrRslt.TimestampStart : 0); /// CS WM Time_start - ' ' -
// TEnd = (isCamera ? mtrRslt.TimestampEnd : 0); /// CT WM Time_end - ' ' -
// SmryItems[0] = (isCamera ? mtrRslt.PulsesPerLiter : 0); /// CU WM Degree per liter
//
// SmryItems[1] = "0"; /// CV Analog out 1 (max mA)
// SmryItems[2] = "0"; /// CW Analog out 2 (V)
// SmryItems[3] = "0"; /// CX Analog out 3 (min mA)
// SmryItems[4] = "0"; /// CY Analog out 4 (max Q)
// }
// }
// }
// else /// if (ProcessData.BatchRslts.WaterMeters[i].HeatMeter())
// {
// /// Else this is a heat meter
//
// var volumeMtr = batchResults.GetMeterTestRslt(tstRslt.Name(), wmNr0, CompoundMeterId.HeatMeterVolume);
// var energyMtr = batchResults.GetMeterTestRslt(tstRslt.Name(), wmNr0, CompoundMeterId.HeatMeterEnergy);
//
// if (volumeMtr != null)
// {
// SerNo = wm.SerialNr; /// WM Ser.No.
// VolMtSt = volumeMtr.VolumeStart; /// WM Vstart - pociatocny stav pri pevnom starte alebo zachyteny pri data streame
// VolMtEn = volumeMtr.VolumeEnd; /// WM Vend - konecny stav pri pevnom starte alebo zachyteny pri data streame
// VolMt = volumeMtr.VolumeMeter; /// WM Vmer - objem namerany vodomerom
// VolRm = volumeMtr.VolumeRef; /// WM Vref - objem namerany stanicou
// ERel = volumeMtr.Error; /// WM Emt - chyba vodomerom nameraneho objemu
// #if IPERL
// IPerlCalibrationFactor = wm.CalibFactor; /// iPerl calibration factor used during the test / ...
// #else
// IPerlCalibrationFactor = 0; /// nechat prazdne
// #endif
// Pulses = volumeMtr.PulsesMeter; /// WM Np met - pocet impulzov zo skusaneho meradla
// RefPulsesNi = volumeMtr.PulsesMaster; /// WM Np elm - pocet impulzov etalonu pocas merania pre prislusny vodomer
// T = volumeMtr.TestTime; /// WM Tmet - cas merania (obmedzany pri synchro skuske)
// Evaluation = volumeMtr.Passed ? "OK" : "NOK"); /// WM Vysledok (t.j. ci je v hraniciach chyb) - OK/NOK
// #if IPERL
// ImpL = (volumeMtr.WaterMeter.Q2CorrRL); /// iPerl Q2 correction factor used during the test / AN value - hodnota z analogoveho prevodnika
// #else
// ImpL = 0; //(" "); /// nechat prazdne
// #endif
// ImpL = (volumeMtr.VolumeStart); /// WM Volume_start - pri datastreamovych hodnotach (alebo kamera)
// VEnd = (volumeMtr.TimestampStart); /// WM Time_start - ' ' -
// VolMtEn = (volumeMtr.VolumeEnd); /// WM Volume_end - ' ' -
// TEnd = (volumeMtr.TimestampEnd); /// WM Time_end - ' ' -
// }
//
// if (energyMtr != null)
// {
// SerNo = (wm.SerialNr); /// WM Ser.No.
// VolMtSt = (energyMtr.VolumeStart); /// WM Vstart - pociatocny stav pri pevnom starte alebo zachyteny pri data streame
// VolMtEn = (energyMtr.VolumeEnd); /// WM Vend - konecny stav pri pevnom starte alebo zachyteny pri data streame
// VolMt = (energyMtr.VolumeMeter); /// WM Vmer - objem namerany vodomerom
// VolRm = (energyMtr.VolumeRef); /// WM Vref - objem namerany stanicou
// ERel = (energyMtr.Error); /// WM Emt - chyba vodomerom nameraneho objemu
// #if IPERL
// IPerlCalibrationFactor = wm.CalibFactor; /// iPerl calibration factor used during the test / ...
// #else
// IPerlCalibrationFactor = 0;//(" "); /// nechat prazdne
// #endif
// Pulses = (energyMtr.PulsesMeter); /// WM Np met - pocet impulzov zo skusaneho meradla
// RefPulsesNi = (energyMtr.PulsesMaster); /// WM Np elm - pocet impulzov etalonu pocas merania pre prislusny vodomer
// T = (energyMtr.TestTime); /// WM Tmet - cas merania (obmedzany pri synchro skuske)
// Evaluation = (energyMtr.Passed ? "OK" : "NOK"); /// WM Vysledok (t.j. ci je v hraniciach chyb) - OK/NOK
// #if IPERL
// sb.Append(";"); sb.Append(energyMtr.WaterMeter.Q2CorrRL); /// iPerl Q2 correction factor used during the test / AN value - hodnota z analogoveho prevodnika
// #else
// sb.Append(";"); sb.Append(" "); /// nechat prazdne
// #endif
// VolMtSt = (energyMtr.VolumeStart); /// WM Volume_start - pri datastreamovych hodnotach (alebo kamera)
// VEnd = (energyMtr.TimestampStart); /// WM Time_start - ' ' -
// VolMtEn = (energyMtr.VolumeEnd); /// WM Volume_end - ' ' -
// TEnd = (energyMtr.TimestampEnd); /// WM Time_end - ' ' -
// }
// }
// }
// }
public ProcessDataMeterLine()
{
}
/* public void InitDefault()
{
SerNo = "Diehl202415687905"; // , formatStr);//Position - Ser.No. - CE
VolMtSt = 0; // , formatInt);//Vol.Mt.st - CF
VolMtEn = 0; // , formatInt);//Vol.Mt.en - CG
VolMt = 0.975333560911164; // , formatD7);//Vol.Mt. - CH
VolRm = 0.980633088; //, formatD7);//Vol.rm - CI
ERel = -0.540418981321314; // , formatD6); // E rel. - CJ
// , formatInt); // U - CK
Pulses = 154; // , formatInt); //Pulses() -
RefPulsesNi = 14341; // , formatInt); //Ref pulses_ni()
T = 671.4207764; // , formatD4); //T(s)()_ni
Evaluation = "OK"; // , formatStr);//evaluation
PulsesL = 157.8947; // , formatD4);//Pulses/l - CP
ImpL = 4; // , formatInt);//imp/l
Div = 0; // , formatInt);//div
VEnd = 0; // , formatInt);//Vend
TEnd = 0; // , formatInt);//T end
}*/
public void InitDefault()
{
val[0] = "Diehl202415687905"; // , formatStr);//Position - Ser.No. - CE
val[1] = 0; // , formatInt);//Vol.Mt.st - CF
val[2] = 0; // , formatInt);//Vol.Mt.en - CG
val[3] = 0.975333560911164; // , formatD7);//Vol.Mt. - CH
val[4] = 0.980633088; //, formatD7);//Vol.rm - CI
val[5] = -0.540418981321314; // , formatD6); // E rel. - CJ
// , formatInt); // U - CK
val[6] = 154; // , formatInt); //Pulses() -
val[7] = 14341; // , formatInt); //Ref pulses_ni()
val[8] = 671.4207764; // , formatD4); //T(s)()_ni
val[9] = "OK"; // , formatStr);//evaluation
val[10] = 157.8947; // , formatD4);//Pulses/l - CP
val[11] = 4; // , formatInt);//imp/l
val[12] = 0; // , formatInt);//div
val[13] = 0; // , formatInt);//Vend
val[14] = 0; // , formatInt);//T end
}
}
}
File diff suppressed because it is too large Load Diff
-16
View File
@@ -1,20 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ClosedXML" version="0.105.0-rc" targetFramework="net472" />
<package id="ClosedXML.Parser" version="2.0.0-preview1" targetFramework="net472" />
<package id="SixLabors.Fonts" version="1.0.0" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.1.1" targetFramework="net472" />
<package id="DocumentFormat.OpenXml" version="3.1.1" targetFramework="net472" />
<package id="DocumentFormat.OpenXml.Framework" version="3.1.1" targetFramework="net472" />
<package id="EPPlus.Interfaces" version="8.0.0" targetFramework="net472" />
<package id="ExcelNumberFormat" version="1.1.0" targetFramework="net472" />
<package id="Microsoft.Bcl.HashCode" version="1.1.1" targetFramework="net472" />
<package id="Microsoft.IO.RecyclableMemoryStream" version="3.0.1" targetFramework="net472" />
<package id="RBush.Signed" version="4.0.0" targetFramework="net472" />
<package id="System.Buffers" version="4.6.1" targetFramework="net472" />
<package id="System.ComponentModel.Annotations" version="5.0.0" targetFramework="net472" />
<package id="System.Memory" version="4.6.2" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.6.1" targetFramework="net472" />
<package id="System.Security.Cryptography.Xml" version="8.0.2" targetFramework="net472" />
<package id="log4net" version="2.0.15" targetFramework="net472" />
</packages>
+1 -1
View File
@@ -101,7 +101,7 @@
this.Controls.Add(this.exitButton);
this.Name = "NoBenchOrDatabaseDlg";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Error";
this.Text = "Error_mass";
this.Load += new System.EventHandler(this.NoDatabaseMsgDlg_Load);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
+6 -6
View File
@@ -187,16 +187,16 @@ namespace ResultsBrowser.Resources {
}
/// <summary>
/// Looks up a localized string similar to Error.
/// Looks up a localized string similar to Error_mass.
/// </summary>
internal static string Error {
get {
return ResourceManager.GetString("Error", resourceCulture);
return ResourceManager.GetString("Error_mass", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Error displaying results.
/// Looks up a localized string similar to Error_mass displaying results.
/// </summary>
internal static string Error_displaying_results {
get {
@@ -205,7 +205,7 @@ namespace ResultsBrowser.Resources {
}
/// <summary>
/// Looks up a localized string similar to Error exporting results.
/// Looks up a localized string similar to Error_mass exporting results.
/// </summary>
internal static string Error_exporting_results {
get {
@@ -214,7 +214,7 @@ namespace ResultsBrowser.Resources {
}
/// <summary>
/// Looks up a localized string similar to Error saving file.
/// Looks up a localized string similar to Error_mass saving file.
/// </summary>
internal static string Error_saving_file {
get {
@@ -223,7 +223,7 @@ namespace ResultsBrowser.Resources {
}
/// <summary>
/// Looks up a localized string similar to Error serializing filters.
/// Looks up a localized string similar to Error_mass serializing filters.
/// </summary>
internal static string Error_serializing_filters {
get {
+1 -1
View File
@@ -21,7 +21,7 @@
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>TRACE;DEBUG;MANAGED;ORACLE_DB;TURA_IPERL</DefineConstants>
<DefineConstants>TRACE;DEBUG;MANAGED;ORACLE_DB;TURA_IPERL;HEAT_METERS</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
-1
View File
@@ -12,7 +12,6 @@ namespace SchematicDrawing
public readonly Sz Sz; /// see enum SchematicDrawing.Sz
public readonly int SzX; /// Size X in SchematicDrawing.Const.Step pixels
public readonly int SzY; /// Size Y in SchematicDrawing.Const.Step pixels
public readonly int OffsX; /// Offset of left/top coordinate of the bitmap when rendering
public readonly int OffsY; /// Offset of left/top coordinate of the bitmap when rendering
public readonly int Wid; /// Width of the bitmap when rendering, original bitmap is resized to this size
@@ -13,5 +13,6 @@ namespace SchematicDrawing
Common.Unit MsrdUnit { get; }
double MsrdValLimLo { get; }
double MsrdValLimHi { get; }
bool IsOffline { get; set; }
}
}
+15 -11
View File
@@ -672,7 +672,11 @@ namespace SchematicDrawing
SizeF size = e.Graphics.MeasureString(strVal, measuredValueFont);
Rectangle rect = new Rectangle(itm.X + itm.MsrdX, itm.Y + itm.MsrdY, (int)Math.Round(size.Width) + 4, (int)Math.Round(size.Height) + 2);
ItemElementRectangles.Add(new ItemElementRect(item, Element.MeasuredVal, rect));
if (measuredValues[msrdValIx] >= itm.MsrdValLimLo && measuredValues[msrdValIx] <= itm.MsrdValLimHi)
if ((item as IDrawingItemWithMeasuredVal).IsOffline)
{
e.Graphics.FillRectangle(measuredValueErrorBackColor, rect);
}
else if (measuredValues[msrdValIx] >= itm.MsrdValLimLo && measuredValues[msrdValIx] <= itm.MsrdValLimHi)
{
e.Graphics.FillRectangle(measuredValueBackColor, rect);
}
@@ -864,7 +868,7 @@ namespace SchematicDrawing
/// Draw the component image
Rectangle rect = dsh.GetRotatedFlippedImageRectangle(item);
if (item is IRouteBasedDrawingItem && routeBit == false /// closed
if (item is IRouteBasedDrawingItem && routeBit == false /// closed
&& item.GNodes.Count > 0 && item.GNodes[0].Dist < Const.Vacuum /// wet
&& dsh.HasClosedWet) /// has appropriate image
{
@@ -969,20 +973,20 @@ namespace SchematicDrawing
{
switch (item.Orient)
{
case Orient.R: e.Graphics.DrawImage(dsh.ImgRightFlipped, rect.X, rect.Y); break;
case Orient.Up: e.Graphics.DrawImage(dsh.ImgUpFlipped, rect.X, rect.Y); break;
case Orient.L: e.Graphics.DrawImage(dsh.ImgLeftFlipped, rect.X, rect.Y); break;
case Orient.Dn: e.Graphics.DrawImage(dsh.ImgDownFlipped, rect.X, rect.Y); break;
case Orient.R: e.Graphics.DrawImage(dsh.ImgRightFlipped, rect.X, rect.Y); break;
case Orient.Up: e.Graphics.DrawImage(dsh.ImgUpFlipped, rect.X, rect.Y); break;
case Orient.L: e.Graphics.DrawImage(dsh.ImgLeftFlipped, rect.X, rect.Y); break;
case Orient.Dn: e.Graphics.DrawImage(dsh.ImgDownFlipped, rect.X, rect.Y); break;
}
}
else
{
switch (item.Orient)
{
case Orient.R: e.Graphics.DrawImage(dsh.ImgRight, rect.X, rect.Y); break;
case Orient.Up: e.Graphics.DrawImage(dsh.ImgUp, rect.X, rect.Y); break;
case Orient.L: e.Graphics.DrawImage(dsh.ImgLeft, rect.X, rect.Y); break;
case Orient.Dn: e.Graphics.DrawImage(dsh.ImgDown, rect.X, rect.Y); break;
case Orient.R: e.Graphics.DrawImage(dsh.ImgRight, rect.X, rect.Y); break;
case Orient.Up: e.Graphics.DrawImage(dsh.ImgUp, rect.X, rect.Y); break;
case Orient.L: e.Graphics.DrawImage(dsh.ImgLeft, rect.X, rect.Y); break;
case Orient.Dn: e.Graphics.DrawImage(dsh.ImgDown, rect.X, rect.Y); break;
}
}
}
@@ -996,7 +1000,7 @@ namespace SchematicDrawing
return rect;
}
/// <summary>
/// Searches for an elemend out of 'elements' in the displayed schematic drawing.
/// </summary>
+234
View File
@@ -0,0 +1,234 @@
using System.IO.MemoryMappedFiles;
using System.Text;
namespace SharedComponents
{
public class LiveLogCache
{
/*// Staticka instancia pre singleton
private static readonly LiveLogCache _instance = new LiveLogCache();
// Uzamykaci objekt pre bezpecny pristup z viacerych vlakien
private static readonly object _lock = new object();
// Zoznam na ukladanie logov
private readonly List<string> _logs = new List<string>();
// Udalost pre notifikaciu pri zmene logov
public event Action<string> LogAdded;
// Sukromny konstruktor (singleton pattern)
private LiveLogCache() { }
// Metoda na ziskanie poctu logov
public int GetCount()
{
return _logs.Count;
}
// Staticka metoda na ziskanie instancie
public static LiveLogCache Instance
{
get
{
lock (_lock)
{
return _instance;
}
}
}
// Verejna vlastnost na ziskanie logov
public IReadOnlyList<string> Logs
{
get
{
lock (_lock)
{
return _logs.AsReadOnly();
}
}
}
// Metoda na pridanie logu
public void AddLog(string log)
{
// Ziskanie aktualneho casu v pozadovanom formate
string timeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:");
// Vytvorenie noveho logu s casovou peciatkou na zaciatku
string logWithTimeStamp = $"{timeStamp} {log}";
// Pridanie logu do zoznamu
lock (_lock)
{
_logs.Add(logWithTimeStamp);
}
// Spustenie udalosti pre notifikaciu
LogAdded?.Invoke(logWithTimeStamp);
}
// Metoda na vycistenie logov
public void ClearLogs()
{
lock (_lock)
{
_logs.Clear();
}
// Volitelne: Spusti udalost, ak by sme chceli notifikovat aj o vymazani logov
LogAdded?.Invoke("Logs were cleared.");
}
// Ziskanie vsetkych logov
public List<string> GetAllLogs()
{
return new List<string>(_logs); // Vratime kopiu logov
}
// Ziskanie logov medzi urcitou poziciou (s upravenym indexovanim)
public List<string> GetLogs(int startIndex, int count)
{
// Zabezpeci, ze indexy nebudu mimo rozsahu
return _logs.Skip(startIndex).Take(count).ToList();
}*/
// Zlepseny kod, ktory umoznuje pracu s MemoryMappedFile, namiesto len priestoru vo virtualnej pamati, navyse je tento subor velkostne obmedzeny na 1MB
// Staticka instancia pre singleton
private static readonly LiveLogCache _instance = new LiveLogCache(true);
// Uzamykaci objekt pre bezpecny pristup z viacerych vlakien
private static readonly object _lock = new object();
// Zoznam na ukladanie logov
private readonly List<string> _logs = new List<string>();
// Udalost pre notifikaciu pri zmene logov
public event Action<string> LogAdded;
// Memory-mapped file
private MemoryMappedFile _mmf;
private MemoryMappedViewAccessor _accessor;
private const int MaxLogSize = 1024 * 1024; // 1MB
// Sukromny konstruktor (singleton pattern)
private LiveLogCache(bool itsLogsCreator)
{
if (itsLogsCreator == true)
{
_mmf = MemoryMappedFile.CreateOrOpen("LiveLogCacheMMF", MaxLogSize);
}
else
{
_mmf = MemoryMappedFile.OpenExisting("LiveLogCacheMMF");
}
_accessor = _mmf.CreateViewAccessor();
}
// Metoda na ziskanie poctu logov
public int GetCount()
{
return _logs.Count;
}
// Staticka metoda na ziskanie instancie
public static LiveLogCache Instance
{
get
{
lock (_lock)
{
return _instance;
}
}
}
// Verejna vlastnost na ziskanie logov
public IReadOnlyList<string> Logs
{
get
{
lock (_lock)
{
return _logs.AsReadOnly();
}
}
}
// Metoda na pridanie logu
public void AddLog(string log)
{
// Ziskanie aktualneho casu v pozadovanom formate
string timeStamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:");
// Vytvorenie noveho logu s casovou peciatkou na zaciatku
string logWithTimeStamp = $"{timeStamp} {log}";
// Pridanie logu do zoznamu
lock (_lock)
{
_logs.Add(logWithTimeStamp);
WriteLogToMemoryMappedFile(logWithTimeStamp);
}
// Spustenie udalosti pre notifikaciu
LogAdded?.Invoke(logWithTimeStamp);
}
// Metoda na vycistenie logov
public void ClearLogs()
{
lock (_lock)
{
_logs.Clear();
ClearMemoryMappedFile();
}
// Volitelne: Spusti udalost, ak by sme chceli notifikovat aj o vymazani logov
LogAdded?.Invoke("Logs were cleared.");
}
// Ziskanie vsetkych logov
public List<string> GetAllLogs()
{
return new List<string>(_logs); // Vratime kopiu logov
}
// Ziskanie logov medzi urcitou poziciou (s upravenym indexovanim)
public List<string> GetLogs(int startIndex, int count)
{
// Zabezpeci, ze indexy nebudu mimo rozsahu
return _logs.Skip(startIndex).Take(count).ToList();
}
// Metoda na naplnenie ListView
/*public void PopulateListView(ListView listView)
{
listView.Items.Clear();
lock (_lock)
{
foreach (var log in _logs)
{
listView.Items.Add(new ListView Item(log));
}
}
}*/
// Write log to memory-mapped file
private void WriteLogToMemoryMappedFile(string log)
{
byte[] logBytes = Encoding.UTF8.GetBytes(log + Environment.NewLine);
_accessor.WriteArray(0, logBytes, 0, logBytes.Length);
}
// Clear memory-mapped file
private void ClearMemoryMappedFile()
{
byte[] emptyBytes = new byte[MaxLogSize];
_accessor.WriteArray(0, emptyBytes, 0, emptyBytes.Length);
}
}
}
+10
View File
@@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
<LangVersion>10.0</LangVersion>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
@@ -0,0 +1,6 @@
is_global = true
build_property.RootNamespace = SharedComponents
build_property.ProjectDir = C:\Users\micha\git\tbf\SharedComponents\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.CsWinRTUseWindowsUIXamlProjections = false
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\micha\.nuget\packages\</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">7.0.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\micha\.nuget\packages\" />
</ItemGroup>
</Project>
+63
View File
@@ -0,0 +1,63 @@
{
"version": 3,
"targets": {
".NETFramework,Version=v4.7.2": {}
},
"libraries": {},
"projectFileDependencyGroups": {
".NETFramework,Version=v4.7.2": []
},
"packageFolders": {
"C:\\Users\\MFRNIAK\\.nuget\\packages\\": {},
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}
},
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "C:\\Projects\\master3-Morrisville15-5-2025-HmotnostneMeradlo-Copy\\tbf - pumpa3 - release\\SharedComponents\\SharedComponents.csproj",
"projectName": "SharedComponents",
"projectPath": "C:\\Projects\\master3-Morrisville15-5-2025-HmotnostneMeradlo-Copy\\tbf - pumpa3 - release\\SharedComponents\\SharedComponents.csproj",
"packagesPath": "C:\\Users\\MFRNIAK\\.nuget\\packages\\",
"outputPath": "C:\\Projects\\master3-Morrisville15-5-2025-HmotnostneMeradlo-Copy\\tbf - pumpa3 - release\\SharedComponents\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"C:\\Users\\MFRNIAK\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net472"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net472": {
"targetAlias": "net472",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
},
"SdkAnalysisLevel": "9.0.300"
},
"frameworks": {
"net472": {
"targetAlias": "net472",
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.301\\RuntimeIdentifierGraph.json"
}
}
}
}
+8
View File
@@ -0,0 +1,8 @@
{
"version": 2,
"dgSpecHash": "BW0gNWUrWSM=",
"success": true,
"projectFilePath": "C:\\Projects\\master3-Morrisville15-5-2025-HmotnostneMeradlo-Copy\\tbf - pumpa3 - release\\SharedComponents\\SharedComponents.csproj",
"expectedPackageFiles": [],
"logs": []
}
@@ -0,0 +1 @@
"restore":{"projectUniqueName":"C:\\Users\\micha\\git\\tbf - pumpa3 - release\\SharedComponents\\SharedComponents.csproj","projectName":"SharedComponents","projectPath":"C:\\Users\\micha\\git\\tbf - pumpa3 - release\\SharedComponents\\SharedComponents.csproj","outputPath":"C:\\Users\\micha\\git\\tbf - pumpa3 - release\\SharedComponents\\obj\\","projectStyle":"PackageReference","originalTargetFrameworks":["net472"],"sources":{"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\":{},"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net472":{"targetAlias":"net472","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"direct"}}"frameworks":{"net472":{"targetAlias":"net472","runtimeIdentifierGraphPath":"C:\\Program Files\\dotnet\\sdk\\8.0.204\\RuntimeIdentifierGraph.json"}}
+1
View File
@@ -57,6 +57,7 @@ namespace SharedDatabase
Approval_info, /// 47
Certificate, /// 48
Pulses_per_liter, /// 49 Water meter constant (water meter data, not used in calculations)
Pulses_per_kilogram, /// 49 Water meter constant (water meter data, not used in calculations) //...MF
Text1, /// 50
Text2, /// 51
Text3, /// 52
+1 -1
View File
@@ -25,7 +25,7 @@
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE;LANG_PL</DefineConstants>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
+71 -10
View File
@@ -5,16 +5,18 @@ VisualStudioVersion = 17.8.34330.188
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TBF", "TBF\TBF.csproj", "{8648FD92-CDA1-4C3A-B5F9-FE547CE1FA48}"
ProjectSection(ProjectDependencies) = postProject
{7EBEEA14-91C4-48D7-AF0A-7A4BC3FF9A28} = {7EBEEA14-91C4-48D7-AF0A-7A4BC3FF9A28}
{C8939821-BA5C-4988-A3D0-BF53B74865C7} = {C8939821-BA5C-4988-A3D0-BF53B74865C7}
{211B5E3F-9996-48A7-ABDE-C878DD2D71C2} = {211B5E3F-9996-48A7-ABDE-C878DD2D71C2}
{0C0A1F4D-1363-4544-A7C5-196C76D26CCA} = {0C0A1F4D-1363-4544-A7C5-196C76D26CCA}
{0F79CA69-9DBC-41F3-A6FC-5A2937365343} = {0F79CA69-9DBC-41F3-A6FC-5A2937365343}
{439D0878-C76E-452B-B17D-209A89E91D36} = {439D0878-C76E-452B-B17D-209A89E91D36}
{9D0DCC88-DC81-47EB-9FDD-4C3907871BFB} = {9D0DCC88-DC81-47EB-9FDD-4C3907871BFB}
{743DF7DB-C7B6-42EB-986D-0F485E5588E4} = {743DF7DB-C7B6-42EB-986D-0F485E5588E4}
{46E3B0E1-209F-4550-B0DD-D7E2C039B3CE} = {46E3B0E1-209F-4550-B0DD-D7E2C039B3CE}
{211B5E3F-9996-48A7-ABDE-C878DD2D71C2} = {211B5E3F-9996-48A7-ABDE-C878DD2D71C2}
{32817BF9-E380-4467-9C7F-936F4B122BC7} = {32817BF9-E380-4467-9C7F-936F4B122BC7}
{439D0878-C76E-452B-B17D-209A89E91D36} = {439D0878-C76E-452B-B17D-209A89E91D36}
{46E3B0E1-209F-4550-B0DD-D7E2C039B3CE} = {46E3B0E1-209F-4550-B0DD-D7E2C039B3CE}
{743DF7DB-C7B6-42EB-986D-0F485E5588E4} = {743DF7DB-C7B6-42EB-986D-0F485E5588E4}
{7EBEEA14-91C4-48D7-AF0A-7A4BC3FF9A28} = {7EBEEA14-91C4-48D7-AF0A-7A4BC3FF9A28}
{8F942729-F454-4C99-BA6C-746962065AE3} = {8F942729-F454-4C99-BA6C-746962065AE3}
{9D0DCC88-DC81-47EB-9FDD-4C3907871BFB} = {9D0DCC88-DC81-47EB-9FDD-4C3907871BFB}
{C8939821-BA5C-4988-A3D0-BF53B74865C7} = {C8939821-BA5C-4988-A3D0-BF53B74865C7}
{FA9ABAD1-7184-4295-ADE8-D44F2E3DE6B2} = {FA9ABAD1-7184-4295-ADE8-D44F2E3DE6B2}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Results", "Results\Results.csproj", "{9D0DCC88-DC81-47EB-9FDD-4C3907871BFB}"
@@ -26,8 +28,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Config", "Config\Config.csp
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResultsBrowser", "ResultsBrowser\ResultsBrowser.csproj", "{07BA543A-54CA-4A59-9AD9-DDE7038E1BF9}"
ProjectSection(ProjectDependencies) = postProject
{9D0DCC88-DC81-47EB-9FDD-4C3907871BFB} = {9D0DCC88-DC81-47EB-9FDD-4C3907871BFB}
{8648FD92-CDA1-4C3A-B5F9-FE547CE1FA48} = {8648FD92-CDA1-4C3A-B5F9-FE547CE1FA48}
{9D0DCC88-DC81-47EB-9FDD-4C3907871BFB} = {9D0DCC88-DC81-47EB-9FDD-4C3907871BFB}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DeviceTest", "DeviceTest\DeviceTest.csproj", "{6D3384DC-4638-4A92-91A8-F39D900377C6}"
@@ -104,6 +106,17 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LabelPrinting", "LabelPrint
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TBFTests", "TBFTests\TBFTests.csproj", "{77EB589F-C670-4489-AAD6-2A3C02061FD1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppDiagnostic", "AppDiagnostic\AppDiagnostic.csproj", "{FA9ABAD1-7184-4295-ADE8-D44F2E3DE6B2}"
ProjectSection(ProjectDependencies) = postProject
{8F942729-F454-4C99-BA6C-746962065AE3} = {8F942729-F454-4C99-BA6C-746962065AE3}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sensus.iPerl.RfidCom", "..\iPerlHead\Sensus.iPerl.RfidCom\Sensus.iPerl.RfidCom.csproj", "{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sensus.iPerl.TestConsole", "..\iPerlHead\Sensus.iPerl.TestConsole\Sensus.iPerl.TestConsole.csproj", "{5025ED8B-A94F-4E58-8BE0-68481B061609}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NfcS5_DLL", "..\NfcS5_DLL\NfcS5_DLL.csproj", "{5954D496-CAAB-4F7A-BDE2-BDC8F47DAB19}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -127,15 +140,15 @@ Global
{8648FD92-CDA1-4C3A-B5F9-FE547CE1FA48}.Release|x86.ActiveCfg = Release|x86
{8648FD92-CDA1-4C3A-B5F9-FE547CE1FA48}.Release|x86.Build.0 = Release|x86
{9D0DCC88-DC81-47EB-9FDD-4C3907871BFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9D0DCC88-DC81-47EB-9FDD-4C3907871BFB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9D0DCC88-DC81-47EB-9FDD-4C3907871BFB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{9D0DCC88-DC81-47EB-9FDD-4C3907871BFB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{9D0DCC88-DC81-47EB-9FDD-4C3907871BFB}.Debug|x86.ActiveCfg = Debug|Any CPU
{9D0DCC88-DC81-47EB-9FDD-4C3907871BFB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9D0DCC88-DC81-47EB-9FDD-4C3907871BFB}.Release|Any CPU.Build.0 = Release|Any CPU
{9D0DCC88-DC81-47EB-9FDD-4C3907871BFB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{9D0DCC88-DC81-47EB-9FDD-4C3907871BFB}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{9D0DCC88-DC81-47EB-9FDD-4C3907871BFB}.Release|x86.ActiveCfg = Release|Any CPU
{9D0DCC88-DC81-47EB-9FDD-4C3907871BFB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9D0DCC88-DC81-47EB-9FDD-4C3907871BFB}.Release|Any CPU.Build.0 = Release|Any CPU
{743DF7DB-C7B6-42EB-986D-0F485E5588E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{743DF7DB-C7B6-42EB-986D-0F485E5588E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{743DF7DB-C7B6-42EB-986D-0F485E5588E4}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
@@ -464,6 +477,54 @@ Global
{77EB589F-C670-4489-AAD6-2A3C02061FD1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{77EB589F-C670-4489-AAD6-2A3C02061FD1}.Release|x86.ActiveCfg = Release|Any CPU
{77EB589F-C670-4489-AAD6-2A3C02061FD1}.Release|x86.Build.0 = Release|Any CPU
{FA9ABAD1-7184-4295-ADE8-D44F2E3DE6B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FA9ABAD1-7184-4295-ADE8-D44F2E3DE6B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FA9ABAD1-7184-4295-ADE8-D44F2E3DE6B2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{FA9ABAD1-7184-4295-ADE8-D44F2E3DE6B2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{FA9ABAD1-7184-4295-ADE8-D44F2E3DE6B2}.Debug|x86.ActiveCfg = Debug|Any CPU
{FA9ABAD1-7184-4295-ADE8-D44F2E3DE6B2}.Debug|x86.Build.0 = Debug|Any CPU
{FA9ABAD1-7184-4295-ADE8-D44F2E3DE6B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FA9ABAD1-7184-4295-ADE8-D44F2E3DE6B2}.Release|Any CPU.Build.0 = Release|Any CPU
{FA9ABAD1-7184-4295-ADE8-D44F2E3DE6B2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{FA9ABAD1-7184-4295-ADE8-D44F2E3DE6B2}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{FA9ABAD1-7184-4295-ADE8-D44F2E3DE6B2}.Release|x86.ActiveCfg = Release|Any CPU
{FA9ABAD1-7184-4295-ADE8-D44F2E3DE6B2}.Release|x86.Build.0 = Release|Any CPU
{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}.Debug|x86.ActiveCfg = Debug|Any CPU
{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}.Debug|x86.Build.0 = Debug|Any CPU
{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}.Release|Any CPU.Build.0 = Release|Any CPU
{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}.Release|x86.ActiveCfg = Release|Any CPU
{A3E14180-7F00-42E5-94A9-8DB62EAD6EE8}.Release|x86.Build.0 = Release|Any CPU
{5025ED8B-A94F-4E58-8BE0-68481B061609}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5025ED8B-A94F-4E58-8BE0-68481B061609}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5025ED8B-A94F-4E58-8BE0-68481B061609}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{5025ED8B-A94F-4E58-8BE0-68481B061609}.Debug|Mixed Platforms.Build.0 = Debug|x86
{5025ED8B-A94F-4E58-8BE0-68481B061609}.Debug|x86.ActiveCfg = Debug|x86
{5025ED8B-A94F-4E58-8BE0-68481B061609}.Debug|x86.Build.0 = Debug|x86
{5025ED8B-A94F-4E58-8BE0-68481B061609}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5025ED8B-A94F-4E58-8BE0-68481B061609}.Release|Any CPU.Build.0 = Release|Any CPU
{5025ED8B-A94F-4E58-8BE0-68481B061609}.Release|Mixed Platforms.ActiveCfg = Release|x86
{5025ED8B-A94F-4E58-8BE0-68481B061609}.Release|Mixed Platforms.Build.0 = Release|x86
{5025ED8B-A94F-4E58-8BE0-68481B061609}.Release|x86.ActiveCfg = Release|x86
{5025ED8B-A94F-4E58-8BE0-68481B061609}.Release|x86.Build.0 = Release|x86
{5954D496-CAAB-4F7A-BDE2-BDC8F47DAB19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5954D496-CAAB-4F7A-BDE2-BDC8F47DAB19}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5954D496-CAAB-4F7A-BDE2-BDC8F47DAB19}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{5954D496-CAAB-4F7A-BDE2-BDC8F47DAB19}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{5954D496-CAAB-4F7A-BDE2-BDC8F47DAB19}.Debug|x86.ActiveCfg = Debug|Any CPU
{5954D496-CAAB-4F7A-BDE2-BDC8F47DAB19}.Debug|x86.Build.0 = Debug|Any CPU
{5954D496-CAAB-4F7A-BDE2-BDC8F47DAB19}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5954D496-CAAB-4F7A-BDE2-BDC8F47DAB19}.Release|Any CPU.Build.0 = Release|Any CPU
{5954D496-CAAB-4F7A-BDE2-BDC8F47DAB19}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{5954D496-CAAB-4F7A-BDE2-BDC8F47DAB19}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{5954D496-CAAB-4F7A-BDE2-BDC8F47DAB19}.Release|x86.ActiveCfg = Release|Any CPU
{5954D496-CAAB-4F7A-BDE2-BDC8F47DAB19}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
+8 -41
View File
@@ -1,25 +1,8 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AAssert_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fd08b5425b14a4a129bfa8e447a81395e12190_003Fae_003F94d308d8_003FAssert_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AControl_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fbb93580b829e4f7d9c8d742286f27f7d5b8648_003F2d_003F54df0719_003FControl_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AICollection_00601_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F4290c01eea7748b3aa477ca831e6a387531830_003F80_003Fe38b444d_003FICollection_00601_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ALoader_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F8210282bc4024c02ab1c8fa84c45a21e32a600_003F0d_003F48a17bd3_003FLoader_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATabControl_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fbb93580b829e4f7d9c8d742286f27f7d5b8648_003F0e_003F5c4249c2_003FTabControl_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATestMethodInfo_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F4472e9d6a19b4c92bcc9a80bd60ca17d26da8_003Fad_003F4c8a6929_003FTestMethodInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATestMethodInfo_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F4472e9d6a19b4c92bcc9a80bd60ca17d26da8_003F98_003F3ffb6d31_003FTestMethodInfo_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F9c2967a135e648bdb993c5397a44991b573620_003Fd7_003F14d417af_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AUserControl_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fbb93580b829e4f7d9c8d742286f27f7d5b8648_003Fa3_003F8eb63727_003FUserControl_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AXLRangeBase_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003Fb48983f97d522ed19b681bf6f133c9baafae03ce9d864ed711a5aa8752bf_003FXLRangeBase_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AXLWorksheet_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FSourcesCache_003F95dc236c6854d515fec2d9794746c52171e52b19e7f2ca0fcc6a6636bb4ed18_003FXLWorksheet_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AXmlSerializer_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F9e4992465ee24dc8915fd9be20badb7d281d48_003F5e_003F4df5856e_003FXmlSerializer_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/Environment/AssemblyExplorer/XmlDocument/@EntryValue">&lt;AssemblyExplorer&gt;&#xD;
&lt;Assembly Path="C:\Users\micha\git\tbf\packages\FluentNHibernate.2.0.3.0\lib\net40\FluentNHibernate.dll" /&gt;&#xD;
&lt;/AssemblyExplorer&gt;</s:String>
<s:String x:Key="/Default/Environment/Hierarchy/Build/BuildTool/CustomBuildToolPath/@EntryValue">C:\Program Files\JetBrains\JetBrains Rider 2024.1.6\tools\MSBuild\Current\Bin\amd64\MSBuild.exe</s:String>
<s:Int64 x:Key="/Default/Environment/Hierarchy/Build/BuildTool/MsbuildVersion/@EntryValue">1114112</s:Int64>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AListViewItem_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F842e321b8a9b41deb8ae4f08b8882c8a5b8998_003Fc4_003F40fa24bf_003FListViewItem_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:Boolean x:Key="/Default/Environment/UnitTesting/CreateUnitTestDialog/ShowAdvancedOptions/@EntryValue">True</s:Boolean>
<s:String x:Key="/Default/Environment/UnitTesting/CreateUnitTestDialog/TestProjectMapping/=743DF7DB_002DC7B6_002D42EB_002D986D_002D0F485E5588E4/@EntryIndexedValue">77EB589F-C670-4489-AAD6-2A3C02061FD1</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/CreateUnitTestDialog/TestProjectMapping/=8648FD92_002DCDA1_002D4C3A_002DB5F9_002DFE547CE1FA48/@EntryIndexedValue">77EB589F-C670-4489-AAD6-2A3C02061FD1</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/CreateUnitTestDialog/TestProjectMapping/=9D0DCC88_002DDC81_002D47EB_002D9FDD_002D4C3907871BFB/@EntryIndexedValue">77EB589F-C670-4489-AAD6-2A3C02061FD1</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/CreateUnitTestDialog/TestTemplateMapping/=MSTest/@EntryIndexedValue">d6790ab7-33c2-4425-b2c9-51480cd1a852</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=311ca613_002Da634_002D4e0f_002Db9fb_002D4b7af9b7abb2/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" Name="GetCorrection" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
&lt;TestAncestor&gt;&#xD;
@@ -27,25 +10,12 @@
&lt;TestId&gt;MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Rig.Modbus.Meret.AdjustableScale.AdjustableMeterTest.GetCorrection&lt;/TestId&gt;&#xD;
&lt;TestId&gt;MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Rig.Network.Camera.KeyenceIV3G120.CameraTest.RtpListener&lt;/TestId&gt;&#xD;
&lt;TestId&gt;MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Rig.Network.Camera.KeyenceIV3G120.CameraTest.Initialize&lt;/TestId&gt;&#xD;
&lt;TestId&gt;MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.RigUncertaintyTest.OpenDocument_SuccessfullyOpensDocument_RaisesNoExceptions&lt;/TestId&gt;&#xD;
&lt;TestId&gt;MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Uncertainty.Calculation.MathTest.AritmeticMeanTest&lt;/TestId&gt;&#xD;
&lt;TestId&gt;MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Uncertainty.Calculation.BatchProcessTableTest&lt;/TestId&gt;&#xD;
&lt;TestId&gt;MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Uncertainty.Calculation.CalculationTableTest&lt;/TestId&gt;&#xD;
&lt;TestId&gt;MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Uncertainty.CommonTable.TableTest.CrateTableTest&lt;/TestId&gt;&#xD;
&lt;/TestAncestor&gt;&#xD;
&lt;/SessionState&gt;</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=fee81c72_002D0b13_002D439c_002D8921_002D12878bb8cd86/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="Initialize" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
&lt;TestAncestor&gt;&#xD;
&lt;TestId&gt;MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Rig.Network.Camera.KeyenceIV3G120.CameraTest.Initialize&lt;/TestId&gt;&#xD;
&lt;TestId&gt;MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.RigUncertaintyTest.OpenDocument_SuccessfullyOpensDocument_RaisesNoExceptions&lt;/TestId&gt;&#xD;
&lt;TestId&gt;MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.RigUncertaintyTest.OpenDocument_Sheets&lt;/TestId&gt;&#xD;
&lt;TestId&gt;MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.RigUncertaintyTest.OpenDocument_Sheets_InsertValues&lt;/TestId&gt;&#xD;
&lt;TestId&gt;MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.RigUncertaintyTest.ExcelColumnsTools&lt;/TestId&gt;&#xD;
&lt;TestId&gt;MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.RigUncertaintyTest&lt;/TestId&gt;&#xD;
&lt;TestId&gt;MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Uncertainty.Calculation.MathTest&lt;/TestId&gt;&#xD;
&lt;TestId&gt;MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Uncertainty.CommonTable.TableTest.CrateTableTest&lt;/TestId&gt;&#xD;
&lt;TestId&gt;MSTest::77EB589F-C670-4489-AAD6-2A3C02061FD1::.NETFramework,Version=v4.7.2::TBFTests.Uncertainty.CommonTable.TableTest.CrateTableOnPositionTest&lt;/TestId&gt;&#xD;
&lt;/TestAncestor&gt;&#xD;
&lt;/SessionState&gt;</s:String>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=Config_002FResources_002FStrings/@EntryIndexedValue">False</s:Boolean>
@@ -55,21 +25,18 @@
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=Miscellaneous_0020Files_002FWyqupug/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FResources_002FStrings/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FRig_002FDataEntry_002FStandartCameraPurchaseOrder_002FCycleBeginningForm/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FRig_002FDataEntry_002FStandartCameraPurchaseOrder_002FCycleEndForm/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FRig_002FDataEntry_002FStandartCameraPurchaseOrder_002FCycleEndForm/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FRig_002FDataEntry_002FStandartCameraPurchaseOrder_002FTestStartEndForm/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FRig_002FNetwork_002FAdapterFTP_002FNetadapterCfgCtrl/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FRig_002FNetwork_002FCamera_002FKeyenceIV3G120_002FCameraCfgCtrl/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FRig_002FNetwork_002FCamera_002FRoiForFixedStartKeyence_002FRoiCfgCtrl/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FRig_002FNetwork_002FAdapterFTP_002FNetadapterCfgCtrl/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FRig_002FNetwork_002FCamera_002FKeyenceIV3G120_002FCameraCfgCtrl/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FRig_002FNetwork_002FCamera_002FRoiForFixedStartKeyence_002FRoiCfgCtrl/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FRig_002FNetwork_002FRestAPI_002FRestApiCfgCtrl/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FRig_002FNetwork_002FRestAPI_002FRestApiCfgCtrl/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FRig_002FOutput_002FPrinters_002FGroupPrinting_002FSingle_002FPrinterCfgCtrl/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FRig_002FOutput_002FPrinters_002FGroupPrinting_002FSingle_002FPrinterTestBenchComponentSelectorDlg/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FRig_002FOutput_002FPrinters_002FGroupPrinting_002FSingle_002FPrinterTestBenchComponentSelectorDlg/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FRig_002FRegisterReaders_002FFrequencyMeterFromUniCB_002FRRCfgCtrl/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FUI_002FBench_002FComponents_002FComponentsManagerDlg/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FUI_002FBench_002FMetrology_002FCalibCertificateExtendedCtrl/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FUI_002FBench_002FMetrology_002FMetrologyDlgAdjustableScaleTab/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FUI_002FBench_002FMetrology_002FMetrologyDlgAdjustableScaleTab/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FUI_002FBench_002FMetrology_002FMetrologyDlgPressMeterTab/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FUI_002FBench_002FMetrology_002FMetrologyDlgTempMeterTab/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/CheckedGroups/=TBF_002FUI_002FResultsMI_002FPreviousResultsDlgUncertainty/@EntryIndexedValue">False</s:Boolean>
<s:Boolean x:Key="/Default/ResxEditorPersonal/Initialized/@EntryValue">True</s:Boolean></wpf:ResourceDictionary>
+1 -1
View File
@@ -76,7 +76,7 @@ namespace TBF.Boxes
}
else
{
return string.Format(string.Format("{{0:{0}}}", Format), Val * Factor);
return string.Format(Format, Val * Factor);
}
}
+3 -3
View File
@@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Sensus")]
[assembly: AssemblyProduct("TestBenchFramework")]
[assembly: AssemblyCopyright("Copyright © 2013 - 2023 Sensus Slovensko, a.s.")]
[assembly: AssemblyCopyright("Copyright © 2013 - 2025 Sensus Slovensko, a.s.")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
[assembly: AssemblyVersion("3.9.2144.1")]
[assembly: AssemblyFileVersion("3.9.2144.1")]
[assembly: AssemblyVersion("3.9.2211.1")]
[assembly: AssemblyFileVersion("3.9.2011.1")]
-14
View File
@@ -1,14 +0,0 @@
# Information about new inserted functionality
## Version
Document start on version `3.9.2144.1`
### v3.9.2144 Uncertainty
#### Database update
```
use wrc2swindon298;
alter table measurementcorrection add Uncertainty float null;
alter table measurementcorrection add Readability float null;
```
+128 -9
View File
@@ -1,6 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -401,6 +402,24 @@ namespace TBF.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Application diagnostic.
/// </summary>
internal static string AppDiagnostic {
get {
return ResourceManager.GetString("AppDiagnostic", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Application diagnostic.
/// </summary>
internal static string Application_Diagnostic {
get {
return ResourceManager.GetString("Application_Diagnostic", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Approval.
/// </summary>
@@ -2318,6 +2337,15 @@ namespace TBF.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Flow Meter.
/// </summary>
internal static string Flow_Meter {
get {
return ResourceManager.GetString("Flow_Meter", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Flow meter temperature range does not fit this test conditions.
/// </summary>
@@ -2354,6 +2382,16 @@ namespace TBF.Resources {
}
}
/// <summary>
/// Looks up a localized resource of type System.Object.
/// </summary>
internal static object Focus {
get {
object obj = ResourceManager.GetObject("Focus", resourceCulture);
return ((object)(obj));
}
}
/// <summary>
/// Looks up a localized string similar to Footer.
/// </summary>
@@ -2948,6 +2986,15 @@ namespace TBF.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Mass and error limit selection.
/// </summary>
internal static string Mass_and_error_selection {
get {
return ResourceManager.GetString("Mass_and_error_selection", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Mass diff. [kg]:.
/// </summary>
@@ -4397,6 +4444,51 @@ namespace TBF.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Pulses quantity.
/// </summary>
internal static string Pulses_quantity {
get {
return ResourceManager.GetString("Pulses_quantity", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Quant. amount.
/// </summary>
internal static string Pulses_quantity_amount {
get {
return ResourceManager.GetString("Pulses_quantity_amount", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Impulse/kg.
/// </summary>
internal static string PulsesKilogram {
get {
return ResourceManager.GetString("PulsesKilogram", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Impulse/l.
/// </summary>
internal static string PulsesLiter {
get {
return ResourceManager.GetString("PulsesLiter", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Pulses per kilogram.
/// </summary>
internal static string PulsesPerKilogram {
get {
return ResourceManager.GetString("PulsesPerKilogram", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Pulses per kWh.
/// </summary>
@@ -4415,6 +4507,15 @@ namespace TBF.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Pulses per unit.
/// </summary>
internal static string PulsesPerUnit {
get {
return ResourceManager.GetString("PulsesPerUnit", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Pump.
/// </summary>
@@ -4622,15 +4723,6 @@ namespace TBF.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Readability.
/// </summary>
internal static string Readability {
get {
return ResourceManager.GetString("Readability", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Reading from the production tracing DB failed.
/// </summary>
@@ -4784,6 +4876,15 @@ namespace TBF.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Reg. min step.
/// </summary>
internal static string RegulMinStep {
get {
return ResourceManager.GetString("RegulMinStep", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Relative Q from.
/// </summary>
@@ -6650,6 +6751,15 @@ namespace TBF.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Units.
/// </summary>
internal static string Units {
get {
return ResourceManager.GetString("Units", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Unlock.
/// </summary>
@@ -6893,6 +7003,15 @@ namespace TBF.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Volume/Mass.
/// </summary>
internal static string VolumeOrMass {
get {
return ResourceManager.GetString("VolumeOrMass", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Wait please.
/// </summary>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+21
View File
@@ -123,4 +123,25 @@
<data name="Project_number" xml:space="preserve">
<value>Número de proyecto</value>
</data>
<data name="PulsesPerKilogram" xml:space="preserve">
<value />
</data>
<data name="PulsesKilogram" xml:space="preserve">
<value />
</data>
<data name="PulsesLiter" xml:space="preserve">
<value />
</data>
<data name="PulsesPerUnit" xml:space="preserve">
<value />
</data>
<data name="Units" xml:space="preserve">
<value />
</data>
<data name="Pulses_quantity" xml:space="preserve">
<value />
</data>
<data name="Pulses_quantity_amount" xml:space="preserve">
<value />
</data>
</root>
+61 -34
View File
@@ -117,9 +117,6 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Activity" xml:space="preserve">
<value>Activité</value>
</data>
<data name="Confirmation" xml:space="preserve">
<value>Confirmation</value>
</data>
@@ -399,9 +396,6 @@
<data name="Tol_red_pct_chdr" xml:space="preserve">
<value>Toler rouge. [%]</value>
</data>
<data name="Test_time_s_chdr" xml:space="preserve">
<value>Temps test [s]</value>
</data>
<data name="Error_while_creating_DB_Reason" xml:space="preserve">
<value>Erreur lors de la création de la base de données. Raison:</value>
</data>
@@ -525,9 +519,6 @@
<data name="RelativeQto" xml:space="preserve">
<value>Q relatif à</value>
</data>
<data name="TargetQ" xml:space="preserve">
<value>Q cible [m3/h]</value>
</data>
<data name="Compound_meters" xml:space="preserve">
<value>Mètres composés</value>
</data>
@@ -558,6 +549,9 @@
<data name="Volume_and_error_selection" xml:space="preserve">
<value>Sélection volume et erreurs</value>
</data>
<data name="Mass_and_error_selection" xml:space="preserve">
<value>Sélection volume et erreurs</value>
</data>
<data name="Clear_results" xml:space="preserve">
<value>Effacer les résultats</value>
</data>
@@ -618,6 +612,9 @@
<data name="Switching_flow_detection" xml:space="preserve">
<value>Détection flux commutation</value>
</data>
<data name="Activity" xml:space="preserve">
<value>Activité</value>
</data>
<data name="Progress" xml:space="preserve">
<value>Progrès</value>
</data>
@@ -789,9 +786,6 @@
<data name="Stopping_flow_for_the_fixed_start" xml:space="preserve">
<value>Arrêter flux pour fixer départ</value>
</data>
<data name="Water_Meter" xml:space="preserve">
<value>Compteur eau</value>
</data>
<data name="Water_Meter_SNs_States" xml:space="preserve">
<value>Compteurs eau SNs États</value>
</data>
@@ -888,7 +882,7 @@
<data name="Qrise" xml:space="preserve">
<value>Q hausse</value>
</data>
<data name="Serial_Number" xml:space="preserve">
<data name="Serial_number" xml:space="preserve">
<value>Numéro série</value>
</data>
<data name="State" xml:space="preserve">
@@ -939,6 +933,9 @@
<data name="Purchase_order" xml:space="preserve">
<value>Commande</value>
</data>
<data name="Project_number" xml:space="preserve">
<value>Numéro de projet</value>
</data>
<data name="Ambient_humidity" xml:space="preserve">
<value>Humidité ambiante</value>
</data>
@@ -1245,9 +1242,6 @@
<data name="Target_ref_pulses_" xml:space="preserve">
<value>Cible ref impulsions:</value>
</data>
<data name="Target_volume_l_" xml:space="preserve">
<value>Volume cible [l]:</value>
</data>
<data name="Save_column_widths" xml:space="preserve">
<value>Enregistrer largeurs colonne</value>
</data>
@@ -1386,9 +1380,6 @@
<data name="Last_changed_by" xml:space="preserve">
<value>Dernier changement dby</value>
</data>
<data name="Meter_types_tested" xml:space="preserve">
<value>Types compteurs testés</value>
</data>
<data name="Notes" xml:space="preserve">
<value>Remarques</value>
</data>
@@ -1671,6 +1662,9 @@
<data name="Protected_procedure" xml:space="preserve">
<value>Procédure protégée</value>
</data>
<data name="Empty" xml:space="preserve">
<value>Vidanger</value>
</data>
<data name="Session" xml:space="preserve">
<value>Session</value>
</data>
@@ -1713,9 +1707,6 @@
<data name="RFID_communication_failed" xml:space="preserve">
<value>Échec communication RFID</value>
</data>
<data name="Opto_head_was_disabled_by_the_user" xml:space="preserve">
<value>tête désactivée par utilisateur</value>
</data>
<data name="failed_0_1_exclamation" xml:space="preserve">
<value>{0}' exclamation échoué ({1}) !!!</value>
</data>
@@ -1803,9 +1794,6 @@
<data name="Refresh" xml:space="preserve">
<value>Rafraîchir</value>
</data>
<data name="current" xml:space="preserve">
<value>actuel</value>
</data>
<data name="Flow" xml:space="preserve">
<value>Couler</value>
</data>
@@ -1905,7 +1893,7 @@
<data name="Import" xml:space="preserve">
<value>Importation</value>
</data>
<data name="repetition" xml:space="preserve">
<data name="Repetition" xml:space="preserve">
<value>répétition</value>
</data>
<data name="Result" xml:space="preserve">
@@ -1989,6 +1977,9 @@
<data name="End_session" xml:space="preserve">
<value>Terminer le cycle</value>
</data>
<data name="Fill" xml:space="preserve">
<value>Inonder</value>
</data>
<data name="Pipeline" xml:space="preserve">
<value>Pipeline</value>
</data>
@@ -2001,22 +1992,58 @@
<data name="Q_tg" xml:space="preserve">
<value>Q obj.</value>
</data>
<data name="Empty" xml:space="preserve">
<value>Vidanger</value>
</data>
<data name="Empty_the_tank" xml:space="preserve">
<value>Vidanger réservoir</value>
</data>
<data name="Fill" xml:space="preserve">
<value>Inonder</value>
</data>
<data name="Current" xml:space="preserve">
<value>Curren</value>
</data>
<data name="Voltage" xml:space="preserve">
<value>Tension</value>
</data>
<data name="Project_number" xml:space="preserve">
<value>Numéro de projet</value>
<data name="VolumeOrMass" xml:space="preserve">
<value>Volume</value>
</data>
<data name="Water_Meter" xml:space="preserve">
<value>Compteur eau</value>
</data>
<data name="Flow_Meter" xml:space="preserve">
<value>Compteur eau</value>
</data>
<data name="PulsesPerKilogram" xml:space="preserve">
<value />
</data>
<data name="PulsesKilogram" xml:space="preserve">
<value />
</data>
<data name="PulsesLiter" xml:space="preserve">
<value />
</data>
<data name="PulsesPerUnit" xml:space="preserve">
<value />
</data>
<data name="Units" xml:space="preserve">
<value />
</data>
<data name="Meter_types_tested" xml:space="preserve">
<value>Types compteurs testés</value>
</data>
<data name="TargetQ" xml:space="preserve">
<value>Q cible [m3/h]</value>
</data>
<data name="Target_volume_l_" xml:space="preserve">
<value>Volume cible [l]:</value>
</data>
<data name="Opto_head_was_disabled_by_the_user" xml:space="preserve">
<value>tête désactivée par utilisateur</value>
</data>
<data name="Test_time_s_chdr" xml:space="preserve">
<value>Temps test [s]</value>
</data>
<data name="Pulses_quantity" xml:space="preserve">
<value />
</data>
<data name="Pulses_quantity_amount" xml:space="preserve">
<value />
</data>
</root>
+90 -60
View File
@@ -117,9 +117,6 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Activity" xml:space="preserve">
<value>Attività</value>
</data>
<data name="Confirmation" xml:space="preserve">
<value>conferma</value>
</data>
@@ -252,9 +249,6 @@
<data name="Nr" xml:space="preserve">
<value>numero</value>
</data>
<data name="Mass" xml:space="preserve">
<value>massa</value>
</data>
<data name="AddBtnText" xml:space="preserve">
<value>Aggiunta</value>
</data>
@@ -276,12 +270,6 @@
<data name="OkBtnText" xml:space="preserve">
<value>Ok</value>
</data>
<data name="Flow" xml:space="preserve">
<value>flusso</value>
</data>
<data name="Pressure" xml:space="preserve">
<value>pressione</value>
</data>
<data name="Invalid_username_or_password" xml:space="preserve">
<value>Username o password non validi</value>
</data>
@@ -399,12 +387,6 @@
<data name="Output_chdr" xml:space="preserve">
<value>Uscite</value>
</data>
<data name="Q_from_lph" xml:space="preserve">
<value>Qda [l/h]</value>
</data>
<data name="Q_to_lph" xml:space="preserve">
<value>Q a [l/h]</value>
</data>
<data name="Red_type_chdr" xml:space="preserve">
<value>tipo rosso</value>
</data>
@@ -414,9 +396,6 @@
<data name="Tol_red_pct_chdr" xml:space="preserve">
<value>tolleranza rossa [%]</value>
</data>
<data name="Test_time_s_chdr" xml:space="preserve">
<value>test time [s]</value>
</data>
<data name="Error_while_creating_DB_Reason" xml:space="preserve">
<value>errore durante la creazione del data base. ragioni:</value>
</data>
@@ -540,9 +519,6 @@
<data name="RelativeQto" xml:space="preserve">
<value>Q relativo a</value>
</data>
<data name="TargetQ" xml:space="preserve">
<value>target Q [m3/h]</value>
</data>
<data name="Compound_meters" xml:space="preserve">
<value>metri composti</value>
</data>
@@ -573,6 +549,9 @@
<data name="Volume_and_error_selection" xml:space="preserve">
<value>selezione dei limiti di volume</value>
</data>
<data name="Mass_and_error_selection" xml:space="preserve">
<value>selezione dei limiti di volume</value>
</data>
<data name="Clear_results" xml:space="preserve">
<value>cancellare i risultati</value>
</data>
@@ -633,6 +612,9 @@
<data name="Switching_flow_detection" xml:space="preserve">
<value>rilevamento del flusso di commutazione</value>
</data>
<data name="Activity" xml:space="preserve">
<value>Attività</value>
</data>
<data name="Progress" xml:space="preserve">
<value>progressi</value>
</data>
@@ -804,9 +786,6 @@
<data name="Stopping_flow_for_the_fixed_start" xml:space="preserve">
<value>Arresto del flusso prima del test di avviamento fisso</value>
</data>
<data name="Water_Meter" xml:space="preserve">
<value>contatore acqua</value>
</data>
<data name="Water_Meter_SNs_States" xml:space="preserve">
<value>numerazione dei numeri di serie</value>
</data>
@@ -903,7 +882,7 @@
<data name="Qrise" xml:space="preserve">
<value>Qalta</value>
</data>
<data name="Serial_Number" xml:space="preserve">
<data name="Serial_number" xml:space="preserve">
<value>Numero Seriale</value>
</data>
<data name="State" xml:space="preserve">
@@ -954,6 +933,9 @@
<data name="Purchase_order" xml:space="preserve">
<value>ordine acquisto</value>
</data>
<data name="Project_number" xml:space="preserve">
<value>Numero del progetto</value>
</data>
<data name="Ambient_humidity" xml:space="preserve">
<value>Umidità dell'ambiente</value>
</data>
@@ -981,9 +963,6 @@
<data name="Start" xml:space="preserve">
<value>Inizio</value>
</data>
<data name="AtTemperature_C" xml:space="preserve">
<value>@temperatura [°C]</value>
</data>
<data name="Density" xml:space="preserve">
<value>densità</value>
</data>
@@ -1125,15 +1104,15 @@
<data name="ID" xml:space="preserve">
<value>ID </value>
</data>
<data name="Focus" xml:space="preserve">
<value>messa a fuoco</value>
</data>
<data name="Grab" xml:space="preserve">
<value>afferrare</value>
</data>
<data name="Live" xml:space="preserve">
<value>dal vivo</value>
</data>
<data name="Camera" xml:space="preserve">
<value>Fotocamera</value>
</data>
<data name="Closing_the_tank" xml:space="preserve">
<value>chiusura del serbatoio</value>
</data>
@@ -1212,15 +1191,15 @@
<data name="Compound_meter_0" xml:space="preserve">
<value>misuratore composto {0}</value>
</data>
<data name="Error_" xml:space="preserve">
<value>Errore:</value>
</data>
<data name="Estimated_time_s_" xml:space="preserve">
<value>tempo stimato [s]:</value>
</data>
<data name="Mass_diff_kg_" xml:space="preserve">
<value>mass diff [kg]:</value>
</data>
<data name="Mass" xml:space="preserve">
<value>massa</value>
</data>
<data name="Meter" xml:space="preserve">
<value>metri</value>
</data>
@@ -1260,9 +1239,6 @@
<data name="Target_ref_pulses_" xml:space="preserve">
<value>Target ref. count:</value>
</data>
<data name="Target_volume_l_" xml:space="preserve">
<value>target volume [l]:</value>
</data>
<data name="Save_column_widths" xml:space="preserve">
<value>salva larghezza colonne</value>
</data>
@@ -1314,6 +1290,9 @@
<data name="Print_watermeter_results" xml:space="preserve">
<value>stampare i risultati dei contatori</value>
</data>
<data name="Save_again" xml:space="preserve">
<value>inviato</value>
</data>
<data name="Sent" xml:space="preserve">
<value>inviato</value>
</data>
@@ -1398,9 +1377,6 @@
<data name="Last_changed_by" xml:space="preserve">
<value>ultimo cambiato da </value>
</data>
<data name="Meter_types_tested" xml:space="preserve">
<value>tipi di contatori testati</value>
</data>
<data name="Notes" xml:space="preserve">
<value>note</value>
</data>
@@ -1572,9 +1548,6 @@
<data name="User_code" xml:space="preserve">
<value>codice utente</value>
</data>
<data name="Save_again" xml:space="preserve">
<value>inviato</value>
</data>
<data name="Failed_to_initialize_device_0_1_2" xml:space="preserve">
<value>Errore dispositivo '{0}':{1}{2}</value>
</data>
@@ -1686,8 +1659,8 @@
<data name="Protected_procedure" xml:space="preserve">
<value>Procedura protetta</value>
</data>
<data name="Drain" xml:space="preserve">
<value>Drenare</value>
<data name="Empty" xml:space="preserve">
<value>Svuotare</value>
</data>
<data name="Session" xml:space="preserve">
<value>Sessione</value>
@@ -1740,14 +1713,17 @@
<data name="Correction" xml:space="preserve">
<value>correzione</value>
</data>
<data name="Camera" xml:space="preserve">
<value>Fotocamera</value>
<data name="Start_the_test_bench" xml:space="preserve">
<value>Avvio del banco prova</value>
</data>
<data name="Finish_the_session_please" xml:space="preserve">
<value>Finire la misurazione perfavore</value>
</data>
<data name="Start_the_test_bench" xml:space="preserve">
<value>Avvio del banco prova</value>
<data name="Flow" xml:space="preserve">
<value>flusso</value>
</data>
<data name="Pressure" xml:space="preserve">
<value>pressione</value>
</data>
<data name="Flow_adjustment_failed" xml:space="preserve">
<value>Errore impostazione del flusso</value>
@@ -1761,12 +1737,6 @@
<data name="Abort_session" xml:space="preserve">
<value>Interrompere</value>
</data>
<data name="Empty" xml:space="preserve">
<value>Svuotare</value>
</data>
<data name="Empty_the_tank" xml:space="preserve">
<value>Svuotare il serbatoio</value>
</data>
<data name="End_session" xml:space="preserve">
<value>Finire il ciclo</value>
</data>
@@ -1779,13 +1749,73 @@
<data name="Start_cycle" xml:space="preserve">
<value>Avviare il ciclo</value>
</data>
<data name="Empty_the_tank" xml:space="preserve">
<value>Svuotare il serbatoio</value>
</data>
<data name="Current" xml:space="preserve">
<value>Corrente</value>
</data>
<data name="Voltage" xml:space="preserve">
<value>Voltaggio</value>
</data>
<data name="Project_number" xml:space="preserve">
<value>Numero del progetto</value>
<data name="Focus" xml:space="preserve">
<value>messa a fuoco</value>
</data>
<data name="VolumeOrMass" xml:space="preserve">
<value>Volume</value>
</data>
<data name="Water_Meter" xml:space="preserve">
<value>contatore acqua</value>
</data>
<data name="Flow_Meter" xml:space="preserve">
<value>contatore acqua</value>
</data>
<data name="PulsesPerKilogram" xml:space="preserve">
<value />
</data>
<data name="PulsesKilogram" xml:space="preserve">
<value />
</data>
<data name="PulsesLiter" xml:space="preserve">
<value />
</data>
<data name="PulsesPerUnit" xml:space="preserve">
<value />
</data>
<data name="Units" xml:space="preserve">
<value />
</data>
<data name="Meter_types_tested" xml:space="preserve">
<value>tipi di contatori testati</value>
</data>
<data name="Q_from_lph" xml:space="preserve">
<value>Qda [l/h]</value>
</data>
<data name="Q_to_lph" xml:space="preserve">
<value>Q a [l/h]</value>
</data>
<data name="TargetQ" xml:space="preserve">
<value>target Q [m3/h]</value>
</data>
<data name="Target_volume_l_" xml:space="preserve">
<value>target volume [l]:</value>
</data>
<data name="Test_time_s_chdr" xml:space="preserve">
<value>test time [s]</value>
</data>
<data name="AtTemperature_C" xml:space="preserve">
<value>@temperatura [°C]</value>
</data>
<data name="Error_" xml:space="preserve">
<value>Errore:</value>
</data>
<data name="Drain" xml:space="preserve">
<value>Drenare</value>
</data>
<data name="Pulses_quantity" xml:space="preserve">
<value />
</data>
<data name="Pulses_quantity_amount" xml:space="preserve">
<value />
</data>
</root>
File diff suppressed because it is too large Load Diff
+45 -6
View File
@@ -198,6 +198,12 @@
<data name="Reg_valve" xml:space="preserve">
<value>Reg. valve</value>
</data>
<data name="RegulMinStep" xml:space="preserve">
<value>Reg. min step</value>
</data>
<data name="Application_Diagnostic" xml:space="preserve">
<value>Application diagnostic</value>
</data>
<data name="Balance" xml:space="preserve">
<value>Scale</value>
</data>
@@ -555,6 +561,9 @@
<data name="Volume_and_error_selection" xml:space="preserve">
<value>Volume and error limit selection</value>
</data>
<data name="Mass_and_error_selection" xml:space="preserve">
<value>Mass and error limit selection</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="testFailedImage" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>testFailedImage.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@@ -799,9 +808,6 @@
<data name="Stopping_flow_for_the_fixed_start" xml:space="preserve">
<value>Stopping flow before the fixed start test</value>
</data>
<data name="Water_Meter" xml:space="preserve">
<value>Water Meter</value>
</data>
<data name="Water_Meter_SNs_States" xml:space="preserve">
<value>Water Meter Serial Numbers ans States</value>
</data>
@@ -2050,9 +2056,6 @@
<data name="Uncertainty" xml:space="preserve">
<value>Uncertainty</value>
</data>
<data name="Readability" xml:space="preserve">
<value>Readability</value>
</data>
<data name="No_info_available" xml:space="preserve">
<value>No info available</value>
</data>
@@ -2446,6 +2449,9 @@
<data name="Upgrade_DB" xml:space="preserve">
<value>Upgrade database</value>
</data>
<data name="AppDiagnostic" xml:space="preserve">
<value>Application diagnostic</value>
</data>
<data name="About" xml:space="preserve">
<value>About</value>
</data>
@@ -2461,4 +2467,37 @@
<data name="Voltage" xml:space="preserve">
<value>Voltage</value>
</data>
<data name="Focus" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="VolumeOrMass" xml:space="preserve">
<value>Volume/Mass</value>
</data>
<data name="Water_Meter" xml:space="preserve">
<value>Water Meter</value>
</data>
<data name="Flow_Meter" xml:space="preserve">
<value>Flow Meter</value>
</data>
<data name="PulsesPerKilogram" xml:space="preserve">
<value>Pulses per kilogram</value>
</data>
<data name="PulsesKilogram" xml:space="preserve">
<value>Impulse/kg</value>
</data>
<data name="PulsesLiter" xml:space="preserve">
<value>Impulse/l</value>
</data>
<data name="PulsesPerUnit" xml:space="preserve">
<value>Pulses per unit</value>
</data>
<data name="Units" xml:space="preserve">
<value>Units</value>
</data>
<data name="Pulses_quantity" xml:space="preserve">
<value>Pulses quantity</value>
</data>
<data name="Pulses_quantity_amount" xml:space="preserve">
<value>Quant. amount</value>
</data>
</root>
File diff suppressed because it is too large Load Diff
+110 -80
View File
@@ -117,9 +117,6 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Activity" xml:space="preserve">
<value>Активность</value>
</data>
<data name="Confirmation" xml:space="preserve">
<value>Подтверждение</value>
</data>
@@ -183,6 +180,12 @@
<data name="P_out" xml:space="preserve">
<value>P вниз</value>
</data>
<data name="Q_from" xml:space="preserve">
<value>Q от</value>
</data>
<data name="Q_to" xml:space="preserve">
<value>Q до</value>
</data>
<data name="Reference" xml:space="preserve">
<value>Ссылка</value>
</data>
@@ -240,9 +243,6 @@
<data name="Nr" xml:space="preserve">
<value>№</value>
</data>
<data name="Mass" xml:space="preserve">
<value>Масса</value>
</data>
<data name="AddBtnText" xml:space="preserve">
<value>Добавить</value>
</data>
@@ -264,12 +264,6 @@
<data name="OkBtnText" xml:space="preserve">
<value>OK</value>
</data>
<data name="Flow" xml:space="preserve">
<value>Расход</value>
</data>
<data name="Pressure" xml:space="preserve">
<value>Давление</value>
</data>
<data name="Username" xml:space="preserve">
<value>Имя пользователя</value>
</data>
@@ -384,12 +378,6 @@
<data name="Output_chdr" xml:space="preserve">
<value>Выход</value>
</data>
<data name="Q_from_lph" xml:space="preserve">
<value>Q от [л/ч]</value>
</data>
<data name="Q_to_lph" xml:space="preserve">
<value>Q до [л/ч]</value>
</data>
<data name="Red_type_chdr" xml:space="preserve">
<value>Тип сокращ.</value>
</data>
@@ -399,9 +387,6 @@
<data name="Tol_red_pct_chdr" xml:space="preserve">
<value>Toler. red. [%]</value>
</data>
<data name="Test_time_s_chdr" xml:space="preserve">
<value>Время теста [с]</value>
</data>
<data name="Error_while_creating_DB_Reason" xml:space="preserve">
<value>Ошибка при создании базы данных. Причина:</value>
</data>
@@ -525,9 +510,6 @@
<data name="RelativeQto" xml:space="preserve">
<value>Относительный Q до</value>
</data>
<data name="TargetQ" xml:space="preserve">
<value>Заданный Q [м3/ч]</value>
</data>
<data name="Compound_meters" xml:space="preserve">
<value>Комбинированные счетчики</value>
</data>
@@ -558,6 +540,9 @@
<data name="Volume_and_error_selection" xml:space="preserve">
<value>Объем и предел погрешности</value>
</data>
<data name="Mass_and_error_selection" xml:space="preserve">
<value>Объем и предел погрешности</value>
</data>
<data name="Clear_results" xml:space="preserve">
<value>Очистить результаты</value>
</data>
@@ -618,6 +603,9 @@
<data name="Switching_flow_detection" xml:space="preserve">
<value>Переключение потока</value>
</data>
<data name="Activity" xml:space="preserve">
<value>Активность</value>
</data>
<data name="Progress" xml:space="preserve">
<value>Прогресс</value>
</data>
@@ -789,9 +777,6 @@
<data name="Stopping_flow_for_the_fixed_start" xml:space="preserve">
<value>Остановка расхода перед испытанием с фиксированным стартом</value>
</data>
<data name="Water_Meter" xml:space="preserve">
<value>Счетчик воды</value>
</data>
<data name="Water_Meter_SNs_States" xml:space="preserve">
<value>Счетчик воды серийный номер и состояние</value>
</data>
@@ -888,7 +873,7 @@
<data name="Qrise" xml:space="preserve">
<value>Qпониж</value>
</data>
<data name="Serial_Number" xml:space="preserve">
<data name="Serial_number" xml:space="preserve">
<value>Серийный номер</value>
</data>
<data name="State" xml:space="preserve">
@@ -939,6 +924,9 @@
<data name="Purchase_order" xml:space="preserve">
<value>Заказ</value>
</data>
<data name="Project_number" xml:space="preserve">
<value>Номер проекта</value>
</data>
<data name="Ambient_humidity" xml:space="preserve">
<value>Относительная влажность окружающей среды</value>
</data>
@@ -966,9 +954,6 @@
<data name="Start" xml:space="preserve">
<value>Старт</value>
</data>
<data name="AtTemperature_C" xml:space="preserve">
<value>температура [°C]</value>
</data>
<data name="Density" xml:space="preserve">
<value>Плотность</value>
</data>
@@ -996,12 +981,6 @@
<data name="Qt" xml:space="preserve">
<value>Qt</value>
</data>
<data name="cold" xml:space="preserve">
<value>холодный</value>
</data>
<data name="hot" xml:space="preserve">
<value>горячий</value>
</data>
<data name="Water" xml:space="preserve">
<value>Вода</value>
</data>
@@ -1110,9 +1089,6 @@
<data name="ID" xml:space="preserve">
<value>ID</value>
</data>
<data name="Focus" xml:space="preserve">
<value>Сфокусировать</value>
</data>
<data name="Grab" xml:space="preserve">
<value>Захватить</value>
</data>
@@ -1203,6 +1179,9 @@
<data name="Mass_diff_kg_" xml:space="preserve">
<value>Mass diff. [kg]:</value>
</data>
<data name="Mass" xml:space="preserve">
<value>Масса</value>
</data>
<data name="Meter" xml:space="preserve">
<value>Счетчик</value>
</data>
@@ -1242,9 +1221,6 @@
<data name="Target_ref_pulses_" xml:space="preserve">
<value>Target ref. count:</value>
</data>
<data name="Target_volume_l_" xml:space="preserve">
<value>Заданный объем [л]:</value>
</data>
<data name="Save_column_widths" xml:space="preserve">
<value>Сохранить ширину столбцов</value>
</data>
@@ -1296,9 +1272,6 @@
<data name="Print_watermeter_results" xml:space="preserve">
<value>Печатать результатов водосчетчиков</value>
</data>
<data name="Again" xml:space="preserve">
<value>Снова</value>
</data>
<data name="Sent" xml:space="preserve">
<value>Отправлено</value>
</data>
@@ -1383,9 +1356,6 @@
<data name="Last_changed_by" xml:space="preserve">
<value>Изменено</value>
</data>
<data name="Meter_types_tested" xml:space="preserve">
<value>Типы испытываемых счетчиков</value>
</data>
<data name="Notes" xml:space="preserve">
<value>Заметки</value>
</data>
@@ -1557,6 +1527,84 @@
<data name="User_code" xml:space="preserve">
<value>Код пользователя</value>
</data>
<data name="Resetting_scales" xml:space="preserve">
<value>Сброс весов</value>
</data>
<data name="Correction" xml:space="preserve">
<value>Коррекция</value>
</data>
<data name="Flow" xml:space="preserve">
<value>Расход</value>
</data>
<data name="Pressure" xml:space="preserve">
<value>Давление</value>
</data>
<data name="Result" xml:space="preserve">
<value>Результат</value>
</data>
<data name="Evaporation" xml:space="preserve">
<value>испарение</value>
</data>
<data name="String1" xml:space="preserve">
<value>Строка 1</value>
</data>
<data name="Current" xml:space="preserve">
<value>Current</value>
</data>
<data name="Voltage" xml:space="preserve">
<value>Voltage</value>
</data>
<data name="Focus" xml:space="preserve">
<value>Сфокусировать</value>
</data>
<data name="VolumeOrMass" xml:space="preserve">
<value>Объем</value>
</data>
<data name="Water_Meter" xml:space="preserve">
<value>Счетчик воды</value>
</data>
<data name="Flow_Meter" xml:space="preserve">
<value>Счетчик воды</value>
</data>
<data name="PulsesPerKilogram" xml:space="preserve">
<value />
</data>
<data name="PulsesKilogram" xml:space="preserve">
<value />
</data>
<data name="PulsesLiter" xml:space="preserve">
<value />
</data>
<data name="PulsesPerUnit" xml:space="preserve">
<value />
</data>
<data name="Units" xml:space="preserve">
<value />
</data>
<data name="cold" xml:space="preserve">
<value>холодный</value>
</data>
<data name="hot" xml:space="preserve">
<value>горячий</value>
</data>
<data name="Test_method2" xml:space="preserve">
<value>Метод испытаний 2</value>
</data>
<data name="Meter_types_tested" xml:space="preserve">
<value>Типы испытываемых счетчиков</value>
</data>
<data name="Short_dercription" xml:space="preserve">
<value>Краткое описание</value>
</data>
<data name="Q_from_lph" xml:space="preserve">
<value>Q от [л/ч]</value>
</data>
<data name="Q_to_lph" xml:space="preserve">
<value>Q до [л/ч]</value>
</data>
<data name="TargetQ" xml:space="preserve">
<value>Заданный Q [м3/ч]</value>
</data>
<data name="P_in_end" xml:space="preserve">
<value>P вверх конец</value>
</data>
@@ -1569,43 +1617,25 @@
<data name="P_out_start" xml:space="preserve">
<value>P вниз начало</value>
</data>
<data name="Q_from" xml:space="preserve">
<value>Q от</value>
<data name="Target_volume_l_" xml:space="preserve">
<value>Заданный объем [л]:</value>
</data>
<data name="Q_to" xml:space="preserve">
<value>Q до</value>
<data name="Test_time_s_chdr" xml:space="preserve">
<value>Время теста [с]</value>
</data>
<data name="AtTemperature_C" xml:space="preserve">
<value>температура [°C]</value>
</data>
<data name="ROI_Detection_in_ProgressROI_Detection_in_Progress" xml:space="preserve">
<value>Продолжается распознавание</value>
</data>
<data name="String1" xml:space="preserve">
<value>Строка 1</value>
<data name="Again" xml:space="preserve">
<value>Снова</value>
</data>
<data name="Test_method2" xml:space="preserve">
<value>Метод испытаний 2</value>
<data name="Pulses_quantity" xml:space="preserve">
<value />
</data>
<data name="Short_dercription" xml:space="preserve">
<value>Краткое описание</value>
</data>
<data name="Correction" xml:space="preserve">
<value>Коррекция</value>
</data>
<data name="Resetting_scales" xml:space="preserve">
<value>Сброс весов</value>
</data>
<data name="Result" xml:space="preserve">
<value>Результат</value>
</data>
<data name="Evaporation" xml:space="preserve">
<value>испарение</value>
</data>
<data name="Current" xml:space="preserve">
<value>Current</value>
</data>
<data name="Voltage" xml:space="preserve">
<value>Voltage</value>
</data>
<data name="Project_number" xml:space="preserve">
<value>Номер проекта</value>
<data name="Pulses_quantity_amount" xml:space="preserve">
<value />
</data>
</root>
+46 -25
View File
@@ -117,33 +117,51 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Activity" xml:space="preserve">
<value>Činnosť</value>
<data name="Error" xml:space="preserve">
<value>Chyba</value>
</data>
<data name="Sensor" xml:space="preserve">
<value>Senzor</value>
</data>
<data name="CancelBtnText" xml:space="preserve">
<value>Zrušiť</value>
</data>
<data name="Compound" xml:space="preserve">
<value>Združený</value>
<data name="OkBtnText" xml:space="preserve">
<value>Áno</value>
</data>
<data name="Exit" xml:space="preserve">
<value>Ukončiť</value>
</data>
<data name="Compound_meters" xml:space="preserve">
<value>Združené vodomery</value>
</data>
<data name="Error" xml:space="preserve">
<value>Chyba</value>
<data name="Activity" xml:space="preserve">
<value>Činnosť</value>
</data>
<data name="Compound" xml:space="preserve">
<value>Združený</value>
</data>
<data name="Serial_number" xml:space="preserve">
<value>Sériové číslo</value>
</data>
<data name="Project_number" xml:space="preserve">
<value>Číslo projektu</value>
</data>
<data name="Language" xml:space="preserve">
<value>Jazyk</value>
</data>
<data name="OkBtnText" xml:space="preserve">
<value>Áno</value>
<data name="Paths" xml:space="preserve">
<value>Cesty</value>
</data>
<data name="Head_was_disabled_by_the_user" xml:space="preserve">
<value>Hlavica bola vypnutá používateľom</value>
<data name="Meter" xml:space="preserve">
<value>Merač</value>
</data>
<data name="RFID_communication_failed" xml:space="preserve">
<value>Zlyhala RFID komunikácia</value>
</data>
<data name="Head_was_disabled_by_the_user" xml:space="preserve">
<value>Hlavica bola vypnutá používateľom</value>
</data>
<data name="Level" xml:space="preserve">
<value>Hladina</value>
</data>
@@ -156,15 +174,9 @@
<data name="Side" xml:space="preserve">
<value>Strana</value>
</data>
<data name="Meter" xml:space="preserve">
<value>Merač</value>
</data>
<data name="Result" xml:space="preserve">
<value>Výsledok</value>
</data>
<data name="Sensor" xml:space="preserve">
<value>Senzor</value>
</data>
<data name="Mute_alarm" xml:space="preserve">
<value>Stlmiť sirénu</value>
</data>
@@ -217,9 +229,6 @@
<data name="Production_order_and_serial_numbers" xml:space="preserve">
<value>Výrobná zákazka a sériové čísla</value>
</data>
<data name="Serial_number" xml:space="preserve">
<value>Sériové číslo</value>
</data>
<data name="Serial_numbers" xml:space="preserve">
<value>Sériové čísla</value>
</data>
@@ -235,13 +244,25 @@
<data name="Do_you_really_want_to_delete_all_codes_Q" xml:space="preserve">
<value>Naozaj chcete vymazať všetky kódy ?</value>
</data>
<data name="Exit" xml:space="preserve">
<value>Ukončiť</value>
<data name="PulsesPerKilogram" xml:space="preserve">
<value />
</data>
<data name="Paths" xml:space="preserve">
<value>Cesty</value>
<data name="PulsesKilogram" xml:space="preserve">
<value />
</data>
<data name="Project_number" xml:space="preserve">
<value>Číslo projektu</value>
<data name="PulsesLiter" xml:space="preserve">
<value />
</data>
<data name="PulsesPerUnit" xml:space="preserve">
<value />
</data>
<data name="Units" xml:space="preserve">
<value />
</data>
<data name="Pulses_quantity" xml:space="preserve">
<value />
</data>
<data name="Pulses_quantity_amount" xml:space="preserve">
<value />
</data>
</root>
+3 -3
View File
@@ -942,11 +942,11 @@ namespace TBF.Resources {
}
/// <summary>
/// Looks up a localized string similar to 错误 Error.
/// Looks up a localized string similar to 错误 Error_mass.
/// </summary>
internal static string Error {
get {
return ResourceManager.GetString("Error", resourceCulture);
return ResourceManager.GetString("Error_mass", resourceCulture);
}
}
@@ -3178,7 +3178,7 @@ namespace TBF.Resources {
/// </summary>
internal static string Volume {
get {
return ResourceManager.GetString("Volume", resourceCulture);
return ResourceManager.GetString("Meter_volume", resourceCulture);
}
}
File diff suppressed because it is too large Load Diff
+8 -5
View File
@@ -73,8 +73,11 @@ namespace TBF.Rig.Ambient.Comet
[XmlIgnore]
public IList<GNode> GNodes { get; set; }
/// Private parameterless constructor invoked by all other (public) constructors
AmbientCfg()
[XmlIgnore]
public bool IsOffline { get; set; }
/// Private parameterless constructor invoked by all other (public) constructors
AmbientCfg()
{
GNodes = new List<GNode>();
Format = string.Empty;
@@ -128,15 +131,15 @@ namespace TBF.Rig.Ambient.Comet
"Stop bits", /// 4
"Handshake", /// 5
"Set DTR to one", /// 6
"Unit of temperature", /// 7
"Units of temperature", /// 7
"Temperature limit Lo", /// 8
"Temperature limit Hi", /// 9
"Default temperature", /// 10
"Unit of pressure", /// 11
"Units of pressure", /// 11
"Pressure limit Lo", /// 12
"Pressure limit Hi", /// 13
"Default pressure", /// 14
"Unit of rel. humidity", /// 15
"Units of rel. humidity", /// 15
"Rel. humidity limit Lo", /// 16
"Rel. humidity limit Hi", /// 17
"Default retl. humidity", /// 18
+6 -3
View File
@@ -72,6 +72,9 @@ namespace TBF.Rig.Ambient.Greco
[XmlIgnore]
public IList<GNode> GNodes { get; set; }
[XmlIgnore]
public bool IsOffline { get; set; }
/// Private parameterless constructor invoked by all other (public) constructors
AmbientCfg()
{
@@ -125,15 +128,15 @@ namespace TBF.Rig.Ambient.Greco
"Data bits", /// 3
"Stop bits", /// 4
"Handshake", /// 5
"Unit of temperature", /// 6
"Units of temperature", /// 6
"Temperature limit Lo", /// 7
"Temperature limit Hi", /// 8
"Default temperature", /// 9
"Unit of pressure", /// 10
"Units of pressure", /// 10
"Pressure limit Lo", /// 11
"Pressure limit Hi", /// 12
"Default pressure", /// 13
"Unit of rel. humidity", /// 14
"Units of rel. humidity", /// 14
"Rel. humidity limit Lo", /// 15
"Rel. humidity limit Hi", /// 16
"Default retl. humidity", /// 17
+2
View File
@@ -67,11 +67,13 @@ namespace TBF.Rig.BuiltIn.PumpTandem
if (pump1 is BuiltIn.Pump.Pump) { mask1 = (pump1 as BuiltIn.Pump.Pump).Mask; }
else if (pump1 is Danfoss.VLT2800.Pump) { mask1 = (pump1 as Danfoss.VLT2800.Pump).Mask; }
else if (pump1 is Modbus.PumpFM.DanfossVLT.Pump) { mask1 = (pump1 as Modbus.PumpFM.DanfossVLT.Pump).Mask; }
else if (pump1 is Modbus.PumpFM.Grundfoss.Pump) { mask1 = (pump1 as Modbus.PumpFM.Grundfoss.Pump).Mask; }
else { mask1 = 0; }
if (pump2 is BuiltIn.Pump.Pump) { mask2 = (pump2 as BuiltIn.Pump.Pump).Mask; }
else if (pump2 is Danfoss.VLT2800.Pump) { mask2 = (pump2 as Danfoss.VLT2800.Pump).Mask; }
else if (pump2 is Modbus.PumpFM.DanfossVLT.Pump) { mask2 = (pump2 as Modbus.PumpFM.DanfossVLT.Pump).Mask; }
else if (pump2 is Modbus.PumpFM.Grundfoss.Pump) { mask2 = (pump2 as Modbus.PumpFM.Grundfoss.Pump).Mask; }
else { mask2 = 0; }
log.FatalFormat("{0} initialized: {1}", Name, this);
@@ -44,6 +44,7 @@ namespace TBF.Rig.BuiltIn.PumpTandem
if (TbfComponents.CmpntFactoryFromClassName(cmpnt.ClassName) is BuiltIn.Pump.PumpFactory ||
TbfComponents.CmpntFactoryFromClassName(cmpnt.ClassName) is Danfoss.VLT2800.PumpFactory ||
TbfComponents.CmpntFactoryFromClassName(cmpnt.ClassName) is Modbus.PumpFM.DanfossVLT.Factory ||
TbfComponents.CmpntFactoryFromClassName(cmpnt.ClassName) is Modbus.PumpFM.Grundfoss.Factory ||
TbfComponents.CmpntFactoryFromClassName(cmpnt.ClassName) is BuiltIn.PumpTandem.PumpFactory)
{
pump1ComboBox.Items.Add(cmpnt.Name);
+70 -70
View File
@@ -3,12 +3,12 @@
///
using System;
using System.Collections.Generic;
using Common;
using log4net;
using Dirichlet.Numerics;
using TBF.Boxes;
using TBF.Rig.ControlBoard;
using TBF.Rig.GenericDevices;
using System.Windows.Forms;
namespace TBF.Rig.BuiltIn
{
@@ -119,7 +119,8 @@ namespace TBF.Rig.BuiltIn
if (valve is PumpTandem.Pump) point.MasksOpen |= (valve as PumpTandem.Pump).Mask;
if (valve is Danfoss.VLT2800.Pump) point.MasksOpen |= (valve as Danfoss.VLT2800.Pump).Mask;
if (valve is Modbus.PumpFM.DanfossVLT.Pump) point.MasksOpen |= (valve as Modbus.PumpFM.DanfossVLT.Pump).Mask;
}
if (valve is Modbus.PumpFM.Grundfoss.Pump) point.MasksOpen |= (valve as Modbus.PumpFM.Grundfoss.Pump).Mask;
}
point.MasksClose = 0;
foreach (var valve in point.VClose)
{
@@ -128,7 +129,8 @@ namespace TBF.Rig.BuiltIn
if (valve is PumpTandem.Pump) point.MasksClose |= (valve as PumpTandem.Pump).Mask;
if (valve is Danfoss.VLT2800.Pump) point.MasksClose |= (valve as Danfoss.VLT2800.Pump).Mask;
if (valve is Modbus.PumpFM.DanfossVLT.Pump) point.MasksClose |= (valve as Modbus.PumpFM.DanfossVLT.Pump).Mask;
}
if (valve is Modbus.PumpFM.Grundfoss.Pump) point.MasksClose |= (valve as Modbus.PumpFM.Grundfoss.Pump).Mask;
}
point.TimeSec += timeShift;
}
}
@@ -195,76 +197,84 @@ namespace TBF.Rig.BuiltIn
/// <remarks>Only Elde.Valve valves are used, other valves on the lists are ignored</remarks>
public SetValvesOp(IControlBoard cb, bool open, OutputPath outPath, DateTimeBox timeStamp, FloatBox switchTime)
{
this.cb = cb;
if (this.cb == null) throw new ArgumentNullException("ctrlBoard");
this.timeStamp = timeStamp;
this.switchTime = switchTime;
this.startStopValveBitNr = outPath.StartValve1 is Valve.Valve ? (outPath.StartValve1 as Valve.Valve).BitPosition : 0;
IList<IValve> none = new List<IValve>(); /// An empty list of valves
switchPointsRaw = new List<SwitchPoint>();
if (open)
try
{
if (outPath.InvertSV1)
AddSwitchPoints(switchPointsRaw, none, ValveBase.MakeList(outPath.StartValve1), 0); /// close SV1
this.cb = cb;
if (this.cb == null) throw new ArgumentNullException("ctrlBoard");
this.timeStamp = timeStamp;
this.switchTime = switchTime;
this.startStopValveBitNr = outPath.StartValve1 is Valve.Valve ? (outPath.StartValve1 as Valve.Valve).BitPosition : 0;
IList<IValve> none = new List<IValve>(); /// An empty list of valves
switchPointsRaw = new List<SwitchPoint>();
if (open)
{
if (outPath.InvertSV1)
AddSwitchPoints(switchPointsRaw, none, ValveBase.MakeList(outPath.StartValve1), 0); /// close SV1
else
AddSwitchPoints(switchPointsRaw, ValveBase.MakeList(outPath.StartValve1), none, 0); /// open SV1
if (outPath.StartValve2 != null)
{
if (outPath.InvertSV2)
AddSwitchPoints(switchPointsRaw, none, ValveBase.MakeList(outPath.StartValve2), -outPath.LagSV2); /// close SV2 after lag
else
AddSwitchPoints(switchPointsRaw, ValveBase.MakeList(outPath.StartValve2), none, -outPath.LagSV2); /// open SV2 after lag
}
if (outPath.StartValve3 != null)
{
if (outPath.InvertSV3)
AddSwitchPoints(switchPointsRaw, none, ValveBase.MakeList(outPath.StartValve3), -outPath.LagSV3); /// close SV3 after lag
else
AddSwitchPoints(switchPointsRaw, ValveBase.MakeList(outPath.StartValve3), none, -outPath.LagSV3); /// open SV3 after lag
}
}
else
AddSwitchPoints(switchPointsRaw, ValveBase.MakeList(outPath.StartValve1), none, 0); /// open SV1
if (outPath.StartValve2 != null)
{
if (outPath.InvertSV2)
AddSwitchPoints(switchPointsRaw, none, ValveBase.MakeList(outPath.StartValve2), -outPath.LagSV2); /// close SV2 after lag
if (outPath.InvertSV1)
AddSwitchPoints(switchPointsRaw, ValveBase.MakeList(outPath.StartValve1), none, 0); /// open SV1
else
AddSwitchPoints(switchPointsRaw, ValveBase.MakeList(outPath.StartValve2), none, -outPath.LagSV2); /// open SV2 after lag
AddSwitchPoints(switchPointsRaw, none, ValveBase.MakeList(outPath.StartValve1), 0); /// close SV1
if (outPath.StartValve2 != null)
{
if (outPath.InvertSV2)
AddSwitchPoints(switchPointsRaw, ValveBase.MakeList(outPath.StartValve2), none, outPath.LagSV2); /// open SV2 after lag
else
AddSwitchPoints(switchPointsRaw, none, ValveBase.MakeList(outPath.StartValve2), outPath.LagSV2); /// close SV2 after lag
}
if (outPath.StartValve3 != null)
{
if (outPath.InvertSV3)
AddSwitchPoints(switchPointsRaw, ValveBase.MakeList(outPath.StartValve3), none, outPath.LagSV3); /// open SV3 after lag
else
AddSwitchPoints(switchPointsRaw, none, ValveBase.MakeList(outPath.StartValve3), outPath.LagSV3); /// close SV3 after lag
}
}
if (outPath.StartValve3 != null)
{
if (outPath.InvertSV3)
AddSwitchPoints(switchPointsRaw, none, ValveBase.MakeList(outPath.StartValve3), -outPath.LagSV3); /// close SV3 after lag
else
AddSwitchPoints(switchPointsRaw, ValveBase.MakeList(outPath.StartValve3), none, -outPath.LagSV3); /// open SV3 after lag
}
switchPoints = SortAndMergeSwitchPoints(switchPointsRaw);
timeShift = -switchPoints[0].TimeSec;
MakeMasks(switchPoints, timeShift);
}
else
catch (Exception ex)
{
if (outPath.InvertSV1)
AddSwitchPoints(switchPointsRaw, ValveBase.MakeList(outPath.StartValve1), none, 0); /// open SV1
else
AddSwitchPoints(switchPointsRaw, none, ValveBase.MakeList(outPath.StartValve1), 0); /// close SV1
if (outPath.StartValve2 != null)
{
if (outPath.InvertSV2)
AddSwitchPoints(switchPointsRaw, ValveBase.MakeList(outPath.StartValve2), none, outPath.LagSV2); /// open SV2 after lag
else
AddSwitchPoints(switchPointsRaw, none, ValveBase.MakeList(outPath.StartValve2), outPath.LagSV2); /// close SV2 after lag
}
if (outPath.StartValve3 != null)
{
if (outPath.InvertSV3)
AddSwitchPoints(switchPointsRaw, ValveBase.MakeList(outPath.StartValve3), none, outPath.LagSV3); /// open SV3 after lag
else
AddSwitchPoints(switchPointsRaw, none, ValveBase.MakeList(outPath.StartValve3), outPath.LagSV3); /// close SV3 after lag
}
MessageBox.Show(
$"Chyba počas zastavenia regulácie prietoku, v ramci SetValvesOp():\n{ex.Message}\n\nStack trace:\n{ex.StackTrace}",
"Chyba",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
throw;
}
switchPoints = SortAndMergeSwitchPoints(switchPointsRaw);
timeShift = -switchPoints[0].TimeSec;
MakeMasks(switchPoints, timeShift);
}
/// <summary>Start this operation</summary>
public void Start()
{
if (cb.DebugLevel == DebugMode.Simulate)
{
return ;
}
UInt128 changed = cb.SetValves(switchPoints[0].MasksOpen, switchPoints[0].MasksClose, StateMachine.LogicalFnValves);
if (timeStamp != null && switchPoints[0].TimeSec == timeShift)
@@ -283,12 +293,7 @@ namespace TBF.Rig.BuiltIn
/// </returns>
public Event Run()
{
if (cb.DebugLevel == DebugMode.Simulate)
{
return Event.ValvesSet;
}
if (nextIx >= switchPoints.Count)
if (nextIx >= switchPoints.Count)
{
return (StateMachine.Time >= swStartTime + maxDelayTime + waitOnCBDelay) ? Event.ValvesSet : Event.ValvesBusy;
}
@@ -317,11 +322,6 @@ namespace TBF.Rig.BuiltIn
/// <summary>Start this operation</summary>
public void Stop()
{
if (cb.DebugLevel == DebugMode.Simulate)
{
return;
}
if (switchTime != null && startStopValveBitNr >= 16 && startStopValveBitNr <= 23 && cb is ControlBoard.Uni.UniCB)
{
switchTime.Val = (cb as ControlBoard.Uni.UniCB).Data.ValveSwitchTime[startStopValveBitNr - 16];
+2
View File
@@ -35,6 +35,7 @@ namespace TBF.Rig.BuiltIn
if (vlv is Pump.Pump && ((vlv as Pump.Pump).Mask & changed) == 0) continue;
if (vlv is Danfoss.VLT2800.Pump && ((vlv as Danfoss.VLT2800.Pump).Mask & changed) == 0) continue;
if (vlv is Modbus.PumpFM.DanfossVLT.Pump && ((vlv as Modbus.PumpFM.DanfossVLT.Pump).Mask & changed) == 0) continue;
if (vlv is Modbus.PumpFM.Grundfoss.Pump && ((vlv as Modbus.PumpFM.Grundfoss.Pump).Mask & changed) == 0) continue;
if ((vlv != null) && (vlv.Delay > max)) max = vlv.Delay;
}
@@ -45,6 +46,7 @@ namespace TBF.Rig.BuiltIn
if (vlv is Pump.Pump && ((vlv as Pump.Pump).Mask & changed) == 0) continue;
if (vlv is Danfoss.VLT2800.Pump && ((vlv as Danfoss.VLT2800.Pump).Mask & changed) == 0) continue;
if (vlv is Modbus.PumpFM.DanfossVLT.Pump && ((vlv as Modbus.PumpFM.DanfossVLT.Pump).Mask & changed) == 0) continue;
if (vlv is Modbus.PumpFM.Grundfoss.Pump && ((vlv as Modbus.PumpFM.Grundfoss.Pump).Mask & changed) == 0) continue;
if ((vlv != null) && (vlv.Delay > max)) max = vlv.Delay;
}
+1 -1
View File
@@ -93,7 +93,7 @@ namespace TBF.Rig.ControlBoard
/// <returns>Operation</returns>
IOperation QueryMeasurementEndOp();
void StopFlowControl(bool isFromUI, int regVId);
void StopFlowControl(bool isFromUI, int regVId, int regulationMinStep = 0);
void StopAll(bool isFromUI);
}

Some files were not shown because too many files have changed in this diff Show More