Пример #1
0
        private void LoadHeader()
        {
            try
            {
                foreach (string data in ReadFile(HeaderFile))
                {
                    if (string.IsNullOrEmpty(data))
                    {
                        continue;
                    }
                    Log.Info(data);

                    var parts = data.Split(',');
                    if (parts.Length < 7)
                    {
                        throw new ApplicationException("Incorrect Header file");
                    }

                    if (string.IsNullOrEmpty(parts[0]))
                    {
                        continue;
                    }

                    var header = new CutterDataHeader(parts, _table);
                    _dataHeaders.Add(header.Legend, header);
                }

                DumpTableHeader("Header", _table);
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("{0}\nPlease contact help desk.", ex.Message));
            }
        }
Пример #2
0
        private void SetTime(string[] parts, CutterDataHeader dataHeader, DataRow row)
        {
            var data = parts[dataHeader.Index].Trim();

            if (!string.IsNullOrEmpty(data))
            {
                _lastTime = new DateTime(TimeSpan.Parse(data).Ticks);
                if (_firstTime == DateTime.MinValue)
                {
                    _firstTime = _lastTime;
                }
            }

            row[dataHeader.Index] = _lastTime;
        }
Пример #3
0
        private void SetDataRealtime(CutterDataHeader dataHeader, string[] parts, DataRow row)
        {
            switch (dataHeader.Type)
            {
            case "Date":
                SetDateRealtime(parts, dataHeader, row);
                break;

            case "Time":
                SetTimeRealtime(parts, dataHeader, row);
                break;

            default:
                SetString(parts, dataHeader, row);
                break;
            }
        }
Пример #4
0
        private CutterData SetString(CutterDataHeader dataHeader, DataRow row)
        {
            var valueString = row.Field <string>(dataHeader.Legend);

            if (string.IsNullOrEmpty(valueString))
            {
                return(null);
            }

            var data = new CutterData
            {
                Date        = row.Field <DateTime>("Date"),
                Value       = 0.0,
                ValueString = valueString
            };

            return(data);
        }
Пример #5
0
        private void SetTimeRealtime(string[] parts, CutterDataHeader dataHeader, DataRow row)
        {
            var data = parts[dataHeader.Index].Trim();

            if (!string.IsNullOrEmpty(data))
            {
                _lastRealtimeTime     = new DateTime(TimeSpan.Parse(data).Ticks);
                row[dataHeader.Index] = _lastRealtimeTime;

                return;
            }

            if (_lastRealtimeTime == DateTime.MinValue)
            {
                throw new IndexOutOfRangeException("Invalid Last Time");
            }

            row[dataHeader.Index] = _lastRealtimeTime;
        }
Пример #6
0
        private void SetDate(string[] parts, CutterDataHeader dataHeader, DataRow row)
        {
            var data = parts[dataHeader.Index].Trim();

            if (!string.IsNullOrEmpty(data))
            {
                DateTime date;
                if (DateTime.TryParseExact(data, DateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out date) ||
                    DateTime.TryParseExact(data, "yyyy/MM/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out date) ||
                    DateTime.TryParseExact(data, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
                {
                    _lastDate = date;
                    if (_firstDate == DateTime.MinValue)
                    {
                        _firstDate = _lastDate;
                    }
                }
            }
            row[dataHeader.Index] = _lastDate;
        }
Пример #7
0
        private CutterData SetDouble(CutterDataHeader dataHeader, DataRow row, CutterData lastData)
        {
            var valueString = row.Field <string>(dataHeader.Legend);

            if (string.IsNullOrEmpty(valueString))
            {
                if (lastData == null)
                {
                    return(null);
                }

                valueString = lastData.ValueString;
            }

            return(new CutterData
            {
                Date = row.Field <DateTime>("Date"),
                Value = Double.Parse(valueString),
                ValueString = valueString
            });
        }
Пример #8
0
        private CutterData SetStatus(CutterDataHeader dataHeader, DataRow row)
        {
            var valueString = row.Field <string>(dataHeader.Legend);

            if (string.IsNullOrEmpty(valueString))
            {
                return(null);
            }

            int value = int.Parse(valueString);

            if (value == 0)
            {
                return(null);
            }

            var list = new List <string>();

            foreach (var code in _codes)
            {
                if ((value & code.Value) == code.Value)
                {
                    list.Add(code.Key);
                }
            }

            if (list.Count > 0)
            {
                return(new CutterData
                {
                    Date = row.Field <DateTime>("Date"),
                    Value = value,
                    ValueString = string.Join(", ", list)
                });
            }

            return(null);
        }
Пример #9
0
        private void SetDateRealtime(string[] parts, CutterDataHeader dataHeader, DataRow row)
        {
            var data = parts[dataHeader.Index].Trim();

            if (!string.IsNullOrEmpty(data))
            {
                DateTime date;
                if (DateTime.TryParseExact(data, DateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out date) ||
                    DateTime.TryParseExact(data, "yyyy/MM/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out date) ||
                    DateTime.TryParseExact(data, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
                {
                    _lastRealtimeDate     = date;
                    row[dataHeader.Index] = date;
                    return;
                }
            }

            if (_lastRealtimeDate == DateTime.MinValue)
            {
                throw new IndexOutOfRangeException("Invalid Last Date");
            }

            row[dataHeader.Index] = _lastRealtimeDate;
        }
Пример #10
0
        private DataRow AddRow(string data, bool realtime = false)
        {
            if (string.IsNullOrEmpty(data))
            {
                return(null);
            }

            if (data.IndexOf("Time", StringComparison.OrdinalIgnoreCase) >= 0 &&
                data.IndexOf("Commands", StringComparison.OrdinalIgnoreCase) >= 0)
            {
                return(null);
            }

            if (data.IndexOf("Datalog", StringComparison.OrdinalIgnoreCase) >= 0)
            {
                SetDataLog(data);
                return(null);
            }

            CutterDataHeader dataHeader = null;

            try
            {
                //Log.InfoFormat("AddRow Data: {0}", data);

                var row = _table.NewRow();

                var parts = data.Split(',');

                foreach (var header in _dataHeaders)
                {
                    dataHeader = header.Value;
                    if (realtime)
                    {
                        SetDataRealtime(dataHeader, parts, row);
                    }
                    else
                    {
                        SetData(dataHeader, parts, row);
                    }
                }

                if (realtime)
                {
                    AdjustRow(row);
                }

                if (Verbose)
                {
                    DumpRow("AddRow", row);
                }

                lock (_tableSync)
                {
                    _table.Rows.Add(row);
                }

                return(row);
            }
            catch (IndexOutOfRangeException)
            {
                Log.WarnFormat("Missing Last Date or Time: {0}", data);
            }
            catch (Exception)
            {
                Error++;
                if (dataHeader != null)
                {
                    Log.WarnFormat("Exception Column: {0}", dataHeader);
                }
                Log.WarnFormat("Exception Data: {0}", data);
                //throw;
            }

            return(null);
        }
Пример #11
0
        private CutterData SetError(CutterDataHeader dataHeader, DataRow row)
        {
            var valueString = row.Field <string>(dataHeader.Legend);

            if (string.IsNullOrEmpty(valueString))
            {
                return(null);
            }

            int value = int.Parse(valueString);

            if (value == 0)
            {
                return(null);
            }

            // Status index is one less than the Error Index
            CutterDataHeader statusHeader = null;

            foreach (var header in _dataHeaders)
            {
                if (header.Value.Index == dataHeader.Index - 1)
                {
                    statusHeader = header.Value;
                    break;
                }
            }

            if (statusHeader == null)
            {
                return(null);
            }

            var statusString = row.Field <string>(statusHeader.Legend);

            if (string.IsNullOrEmpty(statusString))
            {
                return(null);
            }
            int status = int.Parse(statusString);

            if (status == 0)
            {
                return(null);
            }

            var error = "Unknown";

            if ((status & StartFault) == StartFault)
            {
                error = _startErrors[value];
            }
            else if ((status & StopFault) == StopFault)
            {
                error = _stopErrors[value];
            }

            try
            {
                var data = new CutterData
                {
                    Date        = row.Field <DateTime>("Date"),
                    Value       = Double.Parse(valueString),
                    ValueString = error
                };

                return(data);
            }
            catch (Exception)
            {
                Log.ErrorFormat("Invalid Error code for {0} = {1}", dataHeader.Legend, value);
            }

            return(null);
        }
Пример #12
0
 private static void SetString(string[] parts, CutterDataHeader dataHeader, DataRow row)
 {
     row[dataHeader.Index] = parts[dataHeader.Index].Trim();
 }