public FetchWriteConnection(TCPFunctionsAsync tcp, byte PLCConnectionID, bool UseIsoProtokoll)
        {
            this.tcp = tcp;

            this.PLCConnectionID = PLCConnectionID;

            tcp.DataRecieved += tcp_DataRecieved;
        }
Exemplo n.º 2
0
        private void cmdConnect_Click(object sender, RoutedEventArgs e)
        {
            if (tcpFunc != null)
            {
                tcpFunc.AutoReConnect = false;
                tcpFunc.Dispose();
                tcpFunc = null;
                cmdConnect.Background = null;
            }
            else
            {
                IPAddress ip;

                if (!Properties.Settings.Default.Active)
                {
                    ip = IPAddress.Any;
                }
                else
                {
                    if (!IPAddress.TryParse(Properties.Settings.Default.IP, out ip))
                    {
                        IPAddress[] addresslist = Dns.GetHostAddresses(Properties.Settings.Default.IP);
                        foreach (var ipAddress in addresslist)
                        {
                            if (ipAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                            {
                                ip = ipAddress;
                                break;
                            }
                        }
                    }
                }

                try
                {
                    if (Properties.Settings.Default.RecieveFixedLength > 0)
                    {
                        tcpFunc = new TCPFunctionsAsync(SynchronizationContext.Current, ip, Int32.Parse(Properties.Settings.Default.Port), Properties.Settings.Default.Active, Properties.Settings.Default.RecieveFixedLength);
                    }
                    else
                    {
                        tcpFunc = new TCPFunctionsAsync(SynchronizationContext.Current, ip, Int32.Parse(Properties.Settings.Default.Port), Properties.Settings.Default.Active);
                    }

                    tcpFunc.DataRecieved          += tcpFunc_DataRecieved;
                    tcpFunc.ConnectionEstablished += tcpFunc_ConnectionEstablished;
                    tcpFunc.ConnectionClosed      += tcpFunc_ConnectionClosed;
                    tcpFunc.AutoReConnect          = true;
                    cmdConnect.Background          = Brushes.Orange;
                    tcpFunc.Start();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Fehler Creating Connection:" + ex.Message);
                }
            }
        }
        protected override void OnStart(string[] args)
        {
            tcp1 = new TCPFunctionsAsync(null, IPAddress.Parse(Settings.Default.SourceIP), Settings.Default.SourcePort,
                                         Settings.Default.SourceActive);
            tcp2 = new TCPFunctionsAsync(null, IPAddress.Parse(Settings.Default.DestinationIP), Settings.Default.DestinationPort,
                                         Settings.Default.DestinationActive);

            tcp1.DataRecieved += (data, tcpClient) => tcp2.SendData(data);
            tcp2.DataRecieved += (data, tcpClient) => tcp1.SendData(data);

            tcp1.Start();
            tcp2.Start();
        }
        private void Disconnect()
        {
            picConnection1.BackColor = Color.Red;
            picConnection2.BackColor = Color.Red;

            if (myTCP_send != null)
            {
                myTCP_send.Dispose();
                myTCP_send = null;
            }

            if (myTCP_rec != null)
            {
                myTCP_rec.Dispose();
                myTCP_rec = null;
            }
        }
        private void cmdConnect_Click(object sender, EventArgs e)
        {
            if (myTCP_send != null)
            {
                myTCP_send.Dispose();
            }

            if (myTCP_rec != null)
            {
                myTCP_rec.Dispose();
            }

            myTCP_send = null;
            myTCP_rec  = null;


            picConnection1.BackColor = Color.Orange;
            picConnection2.BackColor = Color.Orange;

            quittConf = new TCPFunctions.QuittConfig();
            quittConf.QuittReplacmentBytes.AddRange(Settings.Default.QuittData.ToArray());
            quittConf.SequenceNumberPosition = Convert.ToInt32(Settings.Default.SequenceNumberPosition);
            quittConf.LengthSequenceNumber   = Convert.ToInt32(Settings.Default.SequenceNumberLength);
            quittConf.AutomaticQuitt         = Settings.Default.AutomaticQuitt;

            myTCP_send = new TCPFunctionsAsync(SynchronizationContext.Current, Settings.Default.SendConnectionActive ? IPAddress.Parse(Settings.Default.IpAddress) : null, Convert.ToInt32(Settings.Default.SendPort), Settings.Default.SendConnectionActive);
            myTCP_send.DataRecieved          += myTCP_TelegrammRecievedSend;
            myTCP_send.ConnectionEstablished += (c) => myTCP_ConnectionEstablished(1);
            myTCP_send.ConnectionClosed      += (c) => myTCP_ConnectionClosed(1);
            myTCP_send.Start();


            if (!Settings.Default.UseOnlyOneConnection)
            {
                myTCP_rec = new TCPFunctionsAsync(SynchronizationContext.Current, Settings.Default.RecieveConnectionActive ? IPAddress.Parse(Settings.Default.IpAddress) : null, Convert.ToInt32(Settings.Default.RecievePort), Settings.Default.RecieveConnectionActive);
                myTCP_rec.DataRecieved          += myTCP_TelegrammRecievedRecieve;
                myTCP_rec.ConnectionEstablished += (c) => myTCP_ConnectionEstablished(2);
                myTCP_rec.ConnectionClosed      += (c) => myTCP_ConnectionClosed(2);
                myTCP_rec.Start();
            }
            else
            {
                //myTCP_send.DataRecieved += myTCP_TelegrammRecievedRecieve;
            }
        }
Exemplo n.º 6
0
 private void cmdConnect_Click(object sender, EventArgs e)
 {
     if (tcpFunc != null)
     {
         tcpFunc.AutoReConnect = false;
         tcpFunc.Dispose();
         tcpFunc = null;
         cmdConnect.BackColor = Color.FromArgb(224, 224, 224);
     }
     else
     {
         tcpFunc = new TCPFunctionsAsync(SynchronizationContext.Current, IPAddress.Parse(txtIP.Text), Int32.Parse(txtPort.Text), chkActive.Checked);
         tcpFunc.DataRecieved          += tcpFunc_DataRecieved;
         tcpFunc.ConnectionEstablished += tcpFunc_ConnectionEstablished;
         tcpFunc.ConnectionClosed      += tcpFunc_ConnectionClosed;
         tcpFunc.AutoReConnect          = true;
         cmdConnect.BackColor           = Color.Orange;
         tcpFunc.Start();
     }
 }
Exemplo n.º 7
0
 public FetchWriteConnection(PLCConnectionConfiguration configuration)
 {
     this._tcp = new TCPFunctionsAsync(null, IPAddress.Parse(configuration.CpuIP), configuration.Port, true);
     _tcp.ConnectionEstablished += _tcp_ConnectionEstablished;
     _tcp.ConnectionClosed      += _tcp_ConnectionClosed;
     _tcp.DoNotUseRecieveEvent   = true;
     _tcp.UseKeepAlive           = true;
     if (configuration.WritePort != 0)
     {
         if (configuration.WritePort == configuration.Port)
         {
             _tcpWrite = _tcp;
         }
         else
         {
             this._tcpWrite = new TCPFunctionsAsync(null, IPAddress.Parse(configuration.CpuIP), configuration.WritePort, true);
             _tcpWrite.DoNotUseRecieveEvent = true;
             _tcpWrite.UseKeepAlive         = true;
         }
         _tcpWrite.ConnectionEstablished += _tcpWrite_ConnectionEstablished;
         _tcpWrite.ConnectionClosed      += _tcpWrite_ConnectionClosed;
     }
 }
Exemplo n.º 8
0
        private void OpenStoragesAndCreateTriggers(bool CreateTriggers, bool StartedAsService)
        {
            foreach (DatasetConfig datasetConfig in akConfig.Datasets)
            {
                try
                {
                    IDBInterface akDBInterface = null;

                    akDBInterface = StorageHelper.GetStorage(datasetConfig, RemotingServer.ClientComms.CallNotifyEvent);
                    akDBInterface.ThreadExceptionOccured += new ThreadExceptionEventHandler(tmpTrigger_ThreadExceptionOccured);

                    DatabaseInterfaces.Add(datasetConfig, akDBInterface);

                    Logging.LogText("DB Interface: " + datasetConfig.Name + " is starting...", Logging.LogLevel.Information);

                    akDBInterface.Initiate(datasetConfig);

                    if (CreateTriggers)
                    {
                        if (datasetConfig.Trigger == DatasetTriggerType.Tags_Handshake_Trigger)
                        {
                            PLCTagTriggerThread tmpTrigger = new PLCTagTriggerThread(akDBInterface, datasetConfig, ConnectionList, StartedAsService);
                            tmpTrigger.StartTrigger();
                            tmpTrigger.ThreadExceptionOccured += tmpTrigger_ThreadExceptionOccured;
                            myDisposables.Add(tmpTrigger);
                        }
                        else if (datasetConfig.Trigger == DatasetTriggerType.Time_Trigger)
                        {
                            TimeTriggerThread tmpTrigger = new TimeTriggerThread(akDBInterface, datasetConfig, ConnectionList, StartedAsService);
                            tmpTrigger.StartTrigger();
                            tmpTrigger.ThreadExceptionOccured += tmpTrigger_ThreadExceptionOccured;
                            myDisposables.Add(tmpTrigger);
                        }
                        else if (datasetConfig.Trigger == DatasetTriggerType.Time_Trigger_With_Value_Comparison)
                        {
                            TimeTriggerWithCheckForChangesThread tmpTrigger = new TimeTriggerWithCheckForChangesThread(akDBInterface, datasetConfig, ConnectionList, StartedAsService);
                            tmpTrigger.StartTrigger();
                            tmpTrigger.ThreadExceptionOccured += tmpTrigger_ThreadExceptionOccured;
                            myDisposables.Add(tmpTrigger);
                        }
                        else if (datasetConfig.Trigger == DatasetTriggerType.Quartz_Trigger)
                        {
                            QuartzTriggerThread tmpTrigger = new QuartzTriggerThread(akDBInterface, datasetConfig, ConnectionList, StartedAsService);
                            tmpTrigger.StartTrigger();
                            tmpTrigger.ThreadExceptionOccured += tmpTrigger_ThreadExceptionOccured;
                            myDisposables.Add(tmpTrigger);
                        }
                        else if (datasetConfig.Trigger == DatasetTriggerType.Triggered_By_Incoming_Data_On_A_TCPIP_Connection)
                        {
                            TCPIPConfig tcpipConnConf = datasetConfig.TriggerConnection as TCPIPConfig;

                            tcpipConnConf.MultiTelegramme = tcpipConnConf.MultiTelegramme <= 0 ? 1 : tcpipConnConf.MultiTelegramme;

                            if (tcpipConnConf.MultiTelegramme == 0)
                            {
                                tcpipConnConf.MultiTelegramme = 1;
                            }
                            TCPFunctionsAsync tmpConn = new TCPFunctionsAsync(null, tcpipConnConf.IPasIPAddress, tcpipConnConf.Port, !tcpipConnConf.PassiveConnection, tcpipConnConf.DontUseFixedTCPLength ? -1 : ReadData.GetCountOfBytesToRead(datasetConfig.DatasetConfigRows) * tcpipConnConf.MultiTelegramme);
                            tmpConn.AllowMultipleClients          = tcpipConnConf.AcceptMultipleConnections;
                            tmpConn.UseKeepAlive                  = tcpipConnConf.UseTcpKeepAlive;
                            tmpConn.AsynchronousExceptionOccured += tmpTrigger_ThreadExceptionOccured;
                            tmpConn.AutoReConnect                 = true;
                            var conf = datasetConfig;
                            tmpConn.DataRecieved += (bytes, tcpClient) =>
                            {
                                if (tcpipConnConf.MultiTelegramme == 0)
                                {
                                    tcpipConnConf.MultiTelegramme = 1;
                                }
                                for (int j = 1; j <= tcpipConnConf.MultiTelegramme; j++)
                                {
                                    var    ln     = bytes.Length / tcpipConnConf.MultiTelegramme;
                                    byte[] tmpArr = new byte[ln];
                                    Array.Copy(bytes, ((j - 1) * ln), tmpArr, 0, ln);

                                    IEnumerable <object> values = ReadData.ReadDataFromByteBuffer(conf, conf.DatasetConfigRows, tmpArr, StartedAsService);
                                    if (values != null)
                                    {
                                        akDBInterface.Write(values);
                                    }
                                }
                            };
                            tmpConn.ConnectionEstablished += (TcpClient tcp) =>
                            {
                                Logging.LogText("Connection established: " + tcpipConnConf.IPasIPAddress + ", " + tcpipConnConf.Port, Logging.LogLevel.Information);
                            };
                            tmpConn.ConnectionClosed += (TcpClient tcp) =>
                            {
                                Logging.LogText("Connection closed: " + tcpipConnConf.IPasIPAddress + ", " + tcpipConnConf.Port, Logging.LogLevel.Information);
                            };
                            Logging.LogText("Connection prepared: " + tcpipConnConf.IPasIPAddress + ", " + tcpipConnConf.Port, Logging.LogLevel.Information);
                            tmpConn.Start();
                            ConnectionList.Add(tcpipConnConf, tmpConn);
                            myDisposables.Add(tmpConn);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logging.LogText("Error in OpenStorragesAndCreateTriggers occured!", ex, Logging.LogLevel.Error);
                }
            }
        }