public ModbusMaster(Device device, ICoreLogger coreLogger) { logger = coreLogger ?? throw new ArgumentNullException(nameof(coreLogger)); if (device == null) { logger.Fatal(null, "Device is NULL"); return; } myDevice = device; IpAddress = myDevice.Ip; ModbusPort = myDevice.Port; logger.Info($"ModbusMaster is creating - {device.Name}"); myTimer.Interval = myDevice.RefreshRate; myTimer.Elapsed += MyTimer_Tick; }
private static bool ParseFile(string filename) { if (!File.Exists(filename)) { logger.Fatal(null, $"File not found - {filename}"); return(false); } HashSet <string> taglist = new HashSet <string>(); string[] allLines; try { allLines = File.ReadAllLines(filename); } catch (IOException ex) { logger.Fatal(ex, "IO Exception"); return(false); } foreach (var line in allLines) { if (line.StartsWith("//")) { continue; } string[] splittedLine = line.Split(_Seperator_); if (splittedLine.Length == 0) { continue; } if (splittedLine[0].ToLower() == "device") { if (splittedLine.Length < 7) { continue; } string devicename = splittedLine[1]; string ip = splittedLine[2]; int.TryParse(splittedLine[3], out int port); byte.TryParse(splittedLine[4], out byte deviceid); int refreshrate = _RefreshRate_; int.TryParse(splittedLine[5], out refreshrate); bool isactive = splittedLine[6] == "1" ? true : false; Device aDevice = new Device( devicename, ip, port, deviceid, refreshrate, isactive, logger ); myDevices.Add(aDevice.Name, aDevice); } else if (splittedLine[0].ToLower() == "tag") { taglist.Add(line); } } foreach (var tagstring in taglist) { string[] splittedLine = tagstring.Split(_Seperator_); if (splittedLine.Length < 10) { continue; } string tagname = splittedLine[1]; string devicename = splittedLine[2]; string addressstring = splittedLine[3]; string modbustype = splittedLine[4].ToLower(); string direction = splittedLine[5].ToLower(); string valuetype = splittedLine[6].ToLower(); string masktype = splittedLine[7].ToLower(); string mask = splittedLine[8].ToLower(); string mergetype = splittedLine[9].ToLower(); string range = splittedLine[10].ToLower(); Tag aTag = new Tag(tagname); if (modbustype == "cs") { bool.TryParse(mask, out bool boolmask); aTag.DefineBoolTag( StatusFunction.CoilStatus, ConvertStringToMaskType(masktype), boolmask, ConvertStringToMergeType(mergetype)); } else if (modbustype == "is") { bool.TryParse(mask, out bool boolmask); aTag.DefineBoolTag( StatusFunction.InputStatus, ConvertStringToMaskType(masktype), boolmask, ConvertStringToMergeType(mergetype)); } else if (modbustype == "hr") { if (valuetype == "ushort") { ushort ushortmask = ushort.MaxValue; ushort.TryParse(mask, out ushortmask); ushort ushortrange = ushort.MinValue; ushort.TryParse(range, out ushortrange); aTag.DefineUshortTag( RegisterFunction.HoldingRegister, ConvertStringToMaskType(masktype), ushortmask, ConvertStringToMergeType(mergetype), ushortrange); } else if (valuetype == "lsrf") { ushort ushortrange = ushort.MinValue; ushort.TryParse(range, out ushortrange); aTag.DefineFloatTag( RegisterFunction.HoldingRegister, LSRF, ushortrange); } else if (valuetype == "msrf") { ushort ushortrange = ushort.MinValue; ushort.TryParse(range, out ushortrange); aTag.DefineFloatTag( RegisterFunction.HoldingRegister, MSRF, ushortrange); } } else if (modbustype == "ir") { if (valuetype == "ushort") { ushort ushortmask = ushort.MaxValue; ushort.TryParse(mask, out ushortmask); ushort ushortrange = ushort.MinValue; ushort.TryParse(range, out ushortrange); aTag.DefineUshortTag( RegisterFunction.HoldingRegister, ConvertStringToMaskType(masktype), ushortmask, ConvertStringToMergeType(mergetype), ushortrange); } else if (valuetype == "lsrf") { ushort ushortrange = ushort.MinValue; ushort.TryParse(range, out ushortrange); aTag.DefineFloatTag( RegisterFunction.HoldingRegister, LSRF, ushortrange); } else if (valuetype == "msrf") { ushort ushortrange = ushort.MinValue; ushort.TryParse(range, out ushortrange); aTag.DefineFloatTag( RegisterFunction.HoldingRegister, MSRF, ushortrange); } } aTag.TagDirection = direction == "write" ? Direction.Write : Direction.Read; ushort[] addresses = ParseAddressString(addressstring); foreach (var anaddress in addresses) { aTag.InnerTag.AddAddress(anaddress); } if (myDevices.ContainsKey(devicename)) { myDevices[devicename].Collection.AddTag(aTag); } } return(true); }