Beispiel #1
0
        private void Do()
        {
            if (!Connect())
            {
                return;
            }

            while (!thread_terminated_single)
            {
                int resNo = 0;

                for (int i = 0; i < devices.Count; i++)
                {
                    buffer = new byte[devices[i].BufferSize];

                    try
                    {
                        resNo =
                            CS7TcpClient.ReadBlockAsByte(
                                plcHandle,
                                0x84,
                                devices[i].DBNumber,
                                0,
                                buffer.Length,
                                buffer);

                        if (resNo != 0)
                        {
                            Console.WriteLine($"{devices[i].DBNumber}.ResNo={resNo}");
                        }

                        devices[i].DoSomething(buffer);
                    }
                    catch (Exception error)
                    {
                        Console.WriteLine(error.Message);
                    }

                    if (devices[i].COMM.MES_Heart_Beat.Used)
                    {
                        DateTime now          = DateTime.Now;
                        DateTime lastCallTime = devices[i].LastMESHeartBeatTime;
                        if ((now - lastCallTime).TotalMilliseconds >= 2000)
                        {
                            devices[i].LastMESHeartBeatTime = now;
                            //devices[i].COMM.MES_Heart_Beat.Value =
                            //    !(devices[i].COMM.MES_Heart_Beat.Value);
                            CS7TcpClient.WriteBool(
                                plcHandle,
                                0x84,
                                devices[i].DBNumber,
                                devices[i].COMM.MES_Heart_Beat.DB_Offset,
                                devices[i].COMM.MES_Heart_Beat.Position,
                                Convert.ToUInt16(!devices[i].COMM.MES_Heart_Beat.Value));
                        }
                    }
                }

                Thread.Sleep(10);
            }
        }