Example #1
0
 private void ConnectionFailed(string type, string exceptionMessage)
 {
     ClientScript?.connectionFailed();
     UpdateStatus($"Failed to connect to device using {type}: {exceptionMessage}", UpdateType.Alarm);
 }
Example #2
0
        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;
            }));
        }