private void ConnectionFailed(string type, string exceptionMessage) { ClientScript?.connectionFailed(); UpdateStatus($"Failed to connect to device using {type}: {exceptionMessage}", UpdateType.Alarm); }
public Task <bool> Connect(string connectionString) { return(Task.Factory.StartNew(() => { try { Dictionary <string, string> parameters = connectionString.ParseKeyValuePairs(); string frameFormat, transport, setting; if (!parameters.TryGetValue("frameFormat", out frameFormat) || string.IsNullOrWhiteSpace(frameFormat)) { throw new ArgumentException("Connection string is missing \"frameFormat\"."); } if (!parameters.TryGetValue("transport", out transport) || string.IsNullOrWhiteSpace(transport)) { throw new ArgumentException("Connection string is missing \"transport\"."); } if (!parameters.TryGetValue("unitID", out setting) || !byte.TryParse(setting, out m_unitID)) { throw new ArgumentException("Connection string is missing \"unitID\" or value is invalid."); } bool useIP = false; bool useRTU = false; switch (frameFormat.ToUpperInvariant()) { case "RTU": useRTU = true; break; case "TCP": useIP = true; break; } if (useIP) { int port; if (!parameters.TryGetValue("port", out setting) || !int.TryParse(setting, out port)) { throw new ArgumentException("Connection string is missing \"port\" or value is invalid."); } if (transport.ToUpperInvariant() == "TCP") { string hostName; if (!parameters.TryGetValue("hostName", out hostName) || string.IsNullOrWhiteSpace(hostName)) { throw new ArgumentException("Connection string is missing \"hostName\"."); } return ConnectTcpModbusMaster(hostName, port); } string interfaceIP; if (!parameters.TryGetValue("interface", out interfaceIP)) { interfaceIP = "0.0.0.0"; } return ConnectUdpModbusMaster(interfaceIP, port); } string portName; int baudRate; int dataBits; Parity parity; StopBits stopBits; if (!parameters.TryGetValue("portName", out portName) || string.IsNullOrWhiteSpace(portName)) { throw new ArgumentException("Connection string is missing \"portName\"."); } if (!parameters.TryGetValue("baudRate", out setting) || !int.TryParse(setting, out baudRate)) { throw new ArgumentException("Connection string is missing \"baudRate\" or value is invalid."); } if (!parameters.TryGetValue("dataBits", out setting) || !int.TryParse(setting, out dataBits)) { throw new ArgumentException("Connection string is missing \"dataBits\" or value is invalid."); } if (!parameters.TryGetValue("parity", out setting) || !Enum.TryParse(setting, out parity)) { throw new ArgumentException("Connection string is missing \"parity\" or value is invalid."); } if (!parameters.TryGetValue("stopBits", out setting) || !Enum.TryParse(setting, out stopBits)) { throw new ArgumentException("Connection string is missing \"stopBits\" or value is invalid."); } return ConnectSerialModbusMaster(useRTU, portName, baudRate, dataBits, parity, stopBits); } catch (Exception ex) { ClientScript?.connectionFailed(); UpdateStatus($"Failed to connect to device: {ex.Message}", UpdateType.Alarm); } return false; })); }