| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- using GSG.NET.Excel;
- using GSG.NET.LINQ;
- using GSG.NET.Logging;
- using GSG.NET.PLC;
- using GSG.NET.PLC.Model;
- using GSG.NET.PLC.SLMP;
- using NPOI.SS.Formula.Functions;
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Windows.Forms;
- namespace PLCLogger
- {
- public partial class Form1 : Form
- {
- static Logger logger = Logger.GetLogger();
- public string PLCAddress { get; }
- public int PLCPort { get; }
- IList<TargetPLC> targetPLCs;
- MultiFpc plc = new MultiFpc();
- public Form1()
- {
- InitializeComponent();
- this.Load += Form1_Load;
- this.FormClosing += Form1_FormClosing;
- }
- private void Form1_FormClosing(object sender, FormClosingEventArgs e)
- {
- this.plc.Disconnect();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- InitPLC();
- this.lvwPLC.Columns.Add("Name", 50);
- this.lvwPLC.Columns.Add("Address", 100);
- this.lvwPLC.Columns.Add("PortNo", 50);
- this.lvwPLC.Columns.Add("Dec", 100);
- this.lvwPLC.Columns.Add("State", 100);
- this.lvwPLC.Items.Clear();
- this.lvwPLC.View = View.Details;
- this.lvwPLC.HideSelection = false;
- this.targetPLCs.ToList().ForEach(p =>
- {
- ListViewItem item = new ListViewItem();
- item.Text = p.Name;
- item.SubItems.Add(p.Addr);
- item.SubItems.Add(p.PortNo.ToString());
- item.SubItems.Add(p.Dec);
- item.SubItems.Add("UNKOWN");
- item.EnsureVisible();
- this.lvwPLC.Items.Add(item);
- });
- }
- void InitPLC()
- {
- this.targetPLCs = new ExcelMapper(Path.Combine(System.Environment.CurrentDirectory) + @"\Config\PLC_Config.xlsx").Fetch<TargetPLC>().ToList();
- //Add Logger
- this.targetPLCs.FwEach(x =>
- {
- LogUtils.AddAppender(x.Name, new FileAppender { File = $@"C:\LOG\PLCLogger\{x.Name}\PLC.log", });
- var grpL = new SlmpGroup { Name = "L1", Device = SlmpDevice.L };
- var grpD = new SlmpGroup { Name = "D1", Device = SlmpDevice.D };
- MakeBitMap(x.Name, grpL, x.Name);
- MakeWordMap(x.Name, grpD, x.Name);
- var miz = new SlmpManager();
- miz.Config.Id = x.Name;
- miz.Config.IpAddress = x.Addr;
- miz.Config.Port = x.PortNo;
- miz.Config.RollingCount = 1;
- miz.AddGroup(grpL);
- miz.AddGroup(grpD);
- this.plc.Add(miz);
- });
- this.plc.OnConnect += Plc_OnConnect;
- this.plc.OnDisconnect += Plc_OnDisconnect;
- this.plc.OnBitChanged += Plc_OnBitChanged;
- this.plc.OnWordChanged += Plc_OnWordChanged;
- this.plc.OnCollected += Plc_OnCollected;
- this.plc.Connect();
- }
- private void Plc_OnCollected(GSG.NET.PLC.Support.MapScan scan)
- {
- //foreach (ListViewItem row in this.lvwPLC.Items)
- //{
- // row.SubItems[3].Text = scan.CollectTime.ToString();
- //}
- }
- bool MakeBitMap(string unitName, SlmpGroup grpB, string sheet)
- {
- var ll = new ExcelMapper(Path.Combine(System.Environment.CurrentDirectory) + @"\Config\PLC_Config.xlsx").Fetch<XlsB>($"{sheet}_L");
- if (ll == null || !(ll.Count() > 0))
- return false;
- ll = ll.Where(x => !string.IsNullOrEmpty(x.TagName)).ToList();
- foreach (var item in ll)
- {
- grpB.AddBitBlock(new SlmpBitBlock
- {
- Name = unitName + item.TagName,
- Address = item.Addr,
- KindE = item.Kind,
- SubText = item.SubText,
- SubNo = item.SubNo,
- CallbackOrder = item.CallbackOrder,
- Comment = item.Comment,
- });
- }
- return true;
- }
- bool MakeWordMap(string unitName, SlmpGroup grpW, string sheet)
- {
- var ll = new ExcelMapper(Path.Combine(System.Environment.CurrentDirectory) + @"\Config\PLC_Config.xlsx").Fetch<XlsW>($"{sheet}_D");
- if (ll == null || !ll.Any())
- return false;
- ll = ll.Where(x => !string.IsNullOrEmpty(x.TagName)).ToList();
- foreach (var item in ll)
- {
- grpW.AddWordBlock(new SlmpWordBlock
- {
- Name = unitName + item.TagName,
- Address = item.Addr,
- SubText = item.SubText,
- SubNo = item.SubNo,
- Point = item.Point,
- Format = item.Format,
- Multiple = item.MultipleV,
- MultipleFormatter = item.MultipleFormat,
- IsWatch = item.Watch,
- KindE = item.Kind,
- CallbackOrder = item.CallbackOrder,
- Comment = item.Comment,
- });
- }
- return true;
- }
- #region Event
- private void Plc_OnDisconnect(string id)
- {
- Logger.GetLogger(id).I("Disconnected");
- foreach (ListViewItem row in this.lvwPLC.Items)
- {
- if (row.Text.Equals(id))
- {
- row.BackColor = Color.Red;
- row.SubItems[4].Text = "Discontected";
- }
- }
- }
- private void Plc_OnConnect(string id)
- {
- Logger.GetLogger(id).I("Connected");
- foreach (ListViewItem row in this.lvwPLC.Items)
- {
- if (row.Text.Equals(id))
- {
- row.BackColor = Color.Green;
- row.SubItems[4].Text = "Connected";
- }
- }
- }
- private void Plc_OnWordChanged(GSG.NET.PLC.Model.WordBlock block)
- {
- Logger.GetLogger(block.ConfigID).I("WordChd {0} {1}", block.ConfigID, block);
- }
- private void Plc_OnBitChanged(GSG.NET.PLC.Model.BitBlock block)
- {
- Logger.GetLogger(block.ConfigID).I("BitChd {0} {1}", block.ConfigID, block);
- }
- private void Plc_OnLog(string log)
- {
- logger.I(log);
- }
- #endregion
- }
- }
|