123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- using BroadcastModule;
- using DatabaseDLL;
- using Monitor;
- using NumMachine;
- using PLCS7;
- using System;
- using System.Collections.Generic;
- using System.Threading;
- using System.Threading.Tasks;
- using WebServer;
- namespace Monitor
- {
- public class Monitor : IMonitor
- {
- /// <summary>
- /// 监控模块单例
- /// </summary>
- public static Monitor ins { get; set; }
- /// <summary>
- /// 中控系统总状态
- /// </summary>
- public static bool globalStatus = false;
- /// <summary>
- /// 初始化步骤
- /// </summary>
- public static int initializeState = 0;
- /// <summary>
- /// PLC对象句柄
- /// </summary>
- public static AbstractPLCLinker PLC = null;
- public static string plcIPAddr { get; set; }
- public static int plcRack { get; set; }
- public static int plcSlot { get; set; }
- public static string[] plcDatablockConfig { get; set; }
- public static int plcTerminalCount { get; set; }
- public static int plcParkingSpaceCount { get; set; }
- public static int plcRefreshInterval { get; set; }
- public static MainBlockStru mainBlockInfo { get; set; }
- public static List<ParkingSpaceStru> parkingSpaceInfo { get; set; }
- /// <summary>
- /// 远程数据库操作句柄
- /// </summary>
- public static DBOperation remoteDBOper;
- /// <summary>
- /// 本地数据库操作句柄
- /// </summary>
- public static DBOperation localDBOper;
- /// <summary>
- /// 显示板操作对象句柄
- /// </summary>
- public static BroadcastBoard allInOneMachine;
- public static string allInOneMachineIP { get; set; }
- public static int allInOneMachinePort { get; set; }
- /// <summary>
- /// 号牌机操作句柄
- /// </summary>
- public static INumMachineLinker numMachineLinker;
- public static IntPtr flpHandle;
- /// <summary>
- /// 本地web操作句柄
- /// </summary>
- public static IWebServer webServer;
- public static int webPort { get; set; }
- /// <summary>
- /// 系统初始化器句柄
- /// </summary>
- internal static SystemInitializer sysInitializer;
- /// <summary>
- /// 系统关闭状态
- /// </summary>
- bool isClosing;
- /// <summary>
- /// 车库ID
- /// </summary>
- public static int garageID;
- private void PLCUpdate()
- {
- while (!isClosing)
- {
- if (PLC != null && PLC.isConnected)
- {
- List<object> received = PLC.ReadFromPLC(PLCDataType.terminal, 0);
- //首先获取所有终端信息
- try
- {
- //终端总数相同
- if (Terminal.Terminal.terminalInfo.Count == plcTerminalCount)
- {
- for (int i = 0; i < plcTerminalCount; i++)
- {
- //一旦发现差异立刻更新
- if (!Terminal.Terminal.terminalInfo[i].Equals(received[i]))
- {
- Terminal.Terminal.terminalInfo[i] = (TerminalStru)received[i];
- }
- }
- }
- else
- {
- Terminal.Terminal.terminalInfo.Clear();
- for (int i = 0; i < plcTerminalCount; i++)
- {
- Terminal.Terminal.terminalInfo.Add((TerminalStru)received[i]);
- }
- }
- }
- catch (Exception e) { Console.WriteLine("PLC监控终端数据," + e.Message); }
- //接下来获取中控监控信息
- try
- {
- received = PLC.ReadFromPLC(PLCDataType.central, 0);
- if (received.Count>0&&!mainBlockInfo.Equals(received[0]))
- {
- mainBlockInfo = (MainBlockStru)received[0];
- }
- }catch(Exception e) { Console.WriteLine("PLC监控中控数据," + e.Message); }
- //最后获得所有车位信息
- try
- {
- received = PLC.ReadFromPLC(PLCDataType.parkingSpace, 0);
- //车位总数相同
- if (parkingSpaceInfo.Count == plcParkingSpaceCount)
- {
- for (int i = 0; i < plcParkingSpaceCount; i++)
- {
- //一旦发现差异立刻更新
- if (!parkingSpaceInfo[i].Equals(received[i]))
- {
- parkingSpaceInfo[i] = (ParkingSpaceStru)received[i];
- }
- }
- }
- else
- {
- parkingSpaceInfo.Clear();
- for (int i = 0; i < plcParkingSpaceCount; i++)
- {
- parkingSpaceInfo.Add((ParkingSpaceStru)received[i]);
- }
- }
- }
- catch (Exception e) { Console.WriteLine("PLC监控车位数据," + e.Message); }
- }
- Thread.Sleep(500);
- }
- }
- //************************************ 公有方法 **********************************
- public Monitor(IntPtr flpHandle)
- {
- Monitor.flpHandle = flpHandle;
- parkingSpaceInfo = new List<ParkingSpaceStru>();
- mainBlockInfo = new MainBlockStru();
- }
- public void DisplayPLCInfo()
- {
- }
- public void DisplayTerminalState()
- {
- }
- public void DisplayLicensePlate()
- {
- }
- public void DisplayImage()
- {
- }
- public void Start()
- {
- if (flpHandle != IntPtr.Zero)
- {
- //初始化系统
- if (sysInitializer == null)
- {
- sysInitializer = new SystemInitializer();
- }
- Task.Factory.StartNew(() =>
- {
- sysInitializer.Init(flpHandle);
- });
-
- //更新PLC数据
- Task.Factory.StartNew(()=> {
- PLCUpdate();
- });
- }
- }
- public void Stop()
- {
- sysInitializer.Stop();
- }
- }
- }
|