Browse Source

plc与核心完善,plc类库项目构建

yc_t 6 years ago
parent
commit
b997943d8e

+ 10 - 0
NumMachineManager/Class1.cs

@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace NumMachineManager
+{
+ 
+}

+ 53 - 0
NumMachineManager/NumMachineManager.csproj

@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>bf6fd30a-11dc-478d-b728-dc3b979e48d2</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>NumMachineManager</RootNamespace>
+    <AssemblyName>NumMachineManager</AssemblyName>
+    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System"/>
+    
+    <Reference Include="System.Core"/>
+    <Reference Include="System.Xml.Linq"/>
+    <Reference Include="System.Data.DataSetExtensions"/>
+    
+    
+    <Reference Include="Microsoft.CSharp"/>
+    
+    <Reference Include="System.Data"/>
+    
+    <Reference Include="System.Net.Http"/>
+    
+    <Reference Include="System.Xml"/>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Class1.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ </Project>

+ 36 - 0
NumMachineManager/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("NumMachineManager")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("NumMachineManager")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2018")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("bf6fd30a-11dc-478d-b728-dc3b979e48d2")]
+
+// 程序集的版本信息由下列四个值组成: 
+//
+//      主版本
+//      次版本
+//      生成号
+//      修订号
+//
+// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
+//通过使用 "*",如下所示:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 232 - 0
PLCLinker/AbstractMessage.cs

@@ -0,0 +1,232 @@
+using System;
+using System.Collections.Generic;
+
+namespace PLCLinker
+{
+    /// <summary>
+    /// 抽象消息类
+    /// </summary>
+    public abstract class AbstractMessage
+    {
+    }
+
+    //********************************************* plc ************************************************
+    /// <summary>
+    /// plc节点类
+    /// </summary>
+    public class PLCNode : AbstractMessage
+    {
+        public string Address { get; set; }
+        public string Value { get; set; }
+
+        public PLCNode()
+        {
+            Address = "";
+            Value = "";
+        }
+        public PLCNode(string addr, string v)
+        {
+            Address = addr;
+            Value = v;
+        }
+
+        public override bool Equals(System.Object obj)
+        {
+            if (this == obj)
+                return true;
+            if (obj == null || obj.GetType() != this.GetType())
+                return false;
+            PLCNode p = obj as PLCNode;
+            return (Address == p.Address) && (Value == p.Value);
+        }
+
+        public override int GetHashCode()
+        {
+            int hash = 7;
+            return 31 * hash + Address.GetHashCode() + Value.GetHashCode();
+        }
+
+    }
+
+    /// <summary>
+    /// plc消息类
+    /// </summary>
+    public class PLCMessage : AbstractMessage, ICloneable
+    {
+        public List<PLCNode> extendedPlcList { get; set; }
+        public List<PLCNode> originalPlcList { get; set; }
+        public List<LaserMessage> laserMsgList { get; set; }
+
+        public PLCMessage()
+        {
+            extendedPlcList = new List<PLCNode>();
+            originalPlcList = new List<PLCNode>();
+            laserMsgList = new List<LaserMessage>();
+        }
+
+        public object Clone()
+        {
+            PLCMessage plcClone = new PLCMessage();
+            foreach (PLCNode pn in extendedPlcList)
+            {
+                plcClone.extendedPlcList.Add(pn);
+            }
+            foreach (PLCNode pn in originalPlcList)
+            {
+                plcClone.originalPlcList.Add(pn);
+            }
+            foreach (LaserMessage lm in laserMsgList)
+            {
+                plcClone.laserMsgList.Add(lm);
+            }
+            return plcClone;
+        }
+    }
+    //********************************************** laser ************************************************
+    /// <summary>
+    /// 激光消息类
+    /// </summary>
+    public class LaserMessage : AbstractMessage, ICloneable
+    {
+        public int id { get; set; }
+        public int status { get; set; }
+        public bool recorded { get; set; }
+        public bool abort_rescan { get; set; }
+        public bool occupied { get; set; }
+        public bool disconnected { get; set; }
+        public string licenseNum { get; set; }
+        public Data data;
+        public LaserMessage()
+        {
+            data = new Data();
+            licenseNum = "";
+        }
+        public LaserMessage(int id, int status)
+        {
+            this.id = id;
+            this.status = status;
+            abort_rescan = false;
+            disconnected = false;
+            data = new Data();
+        }
+
+        public object Clone()
+        {
+            LaserMessage lm = new LaserMessage();
+            lm.id = id;
+            lm.status = status;
+            lm.data = (Data)data.Clone();
+            lm.recorded = recorded;
+            lm.abort_rescan = abort_rescan;
+            lm.licenseNum = licenseNum;
+            lm.disconnected = disconnected;
+            return lm;
+        }
+    }
+
+    /// <summary>
+    /// 激光数据类
+    /// </summary>
+    public class Data : ICloneable
+    {
+        public int centerX { get; set; }
+        public int centerY { get; set; }
+        public int angleA { get; set; }
+        public int length { get; set; }
+        public int width { get; set; }
+        public int height { get; set; }
+
+        public Data() : this(0, 0, 0, 0, 0, 0) { }
+        public Data(int cx, int cy, int aa, int l, int w, int h)
+        {
+            centerX = cx;
+            centerY = cy;
+            angleA = aa;
+            length = l;
+            width = w;
+            height = h;
+        }
+
+        public object Clone()
+        {
+            Data d = new Data(centerX, centerY, angleA, length, width, height);
+            return d;
+        }
+    }
+
+    //********************************************** command **********************************************
+    /// <summary>
+    /// 命令类,由队列线程处理号牌与指令后产生
+    /// </summary>
+    public class Command : AbstractMessage, ICloneable
+    {
+        public char commandType { get; set; }
+        public string LicenseNum { get; set; }
+        public string userID { get; set; }
+        public int garageID { get; set; }
+        public int parkingRecordsID { get; set; }
+        public string TimeRecord { get; set; }
+        public string ip { get; set; }//新添加,用于定位号牌机
+        public int returnedCount { get; set; }//标记被返回的命令
+        public int id { get; set; }
+        public bool manual { get; set; }//判断是否手动停取
+
+        public Command()
+        {
+            LicenseNum = "";
+            TimeRecord = "";
+            userID = "";
+            garageID = 0;
+            parkingRecordsID = 0;
+            ip = "";
+            returnedCount = 0;
+            id = 0;
+            manual = false;
+        }
+
+        public object Clone()
+        {
+            Command cmdClone = new Command();
+            cmdClone.commandType = commandType;
+            cmdClone.LicenseNum = LicenseNum;
+            cmdClone.userID = userID;
+            cmdClone.garageID = garageID;
+            cmdClone.parkingRecordsID = parkingRecordsID;
+            cmdClone.TimeRecord = TimeRecord;
+            cmdClone.ip = ip;
+            cmdClone.id = id;
+            cmdClone.returnedCount = returnedCount;
+            cmdClone.manual = manual;
+            return cmdClone;
+        }
+    }
+
+    /// <summary>
+    /// 控制信息类,核心在不同阶段发至plc
+    /// 1: 停车startLaser--park_command_address
+    /// 2: 停车激光的6个数据,startRobot,车位信息4个
+    /// 3:停车完成,归零--park_completed_address
+    /// 4:取车startRobot,车位信息4个
+    /// 5: 取车完成,归零-fetch_completed_address
+    /// </summary>
+    public class ControlMessage : AbstractMessage
+    {
+        public int status { get; set; }
+        public string LicenseNum { get; set; }
+        public int laserID { get; set; }//激光地址
+        public string parkingSpaceID { get; set; }
+        public string parkingSpaceX { get; set; }
+        public string parkingSpaceY { get; set; }
+        public string parkingSpaceZ { get; set; }
+        public string centerX { get; set; }
+        public string centerY { get; set; }
+        public string angleA { get; set; }
+        public string length { get; set; }
+        public string width { get; set; }
+        public string height { get; set; }
+        public int fetchPosition { get; set; }//取车放置位置(临时缓冲位)
+        public int RobotID { get; set; }//机械手编号
+        public int frontWheelbase { get; set; }
+        public int rearWheelbase { get; set; }
+    }
+}

+ 17 - 0
PLCLinker/IEquipments.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PLCLinker
+{
+    public interface IEquipments
+    {
+        IEquipments ins { get; set; }
+        AbstractMessage GetMessage();
+        void SetMessage(AbstractMessage message);
+        void Start();
+        void Stop();
+    }
+}

+ 66 - 0
PLCLinker/Jsonhelper.cs

@@ -0,0 +1,66 @@
+using Newtonsoft.Json;
+using System.Collections.Generic;
+using System.IO;
+
+namespace PLCLinker
+{
+    /// <summary>
+    /// Json帮助类
+    /// </summary>
+    public class JsonHelper
+    {
+        /// <summary>
+        /// 将对象序列化为JSON格式
+        /// </summary>
+        /// <param name="o">对象</param>
+        /// <returns>json字符串</returns>
+        public static string SerializeObject(object o)
+        {
+            string json = JsonConvert.SerializeObject(o);
+            return json;
+        }
+
+        /// <summary>
+        /// 解析JSON字符串生成对象实体
+        /// </summary>
+        /// <typeparam name="T">对象类型</typeparam>
+        /// <param name="json">json字符串(eg.{"Adress":"0","Value":"125"})</param>
+        /// <returns>对象实体</returns>
+        public static T DeserializeJsonToObject<T>(string json) where T : class
+        {
+            JsonSerializer serializer = new JsonSerializer();
+            StringReader sr = new StringReader(json);
+            object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T));
+            T t = o as T;
+            return t;
+        }
+
+        /// <summary>
+        /// 解析JSON数组生成对象实体集合
+        /// </summary>
+        /// <typeparam name="T">对象类型</typeparam>
+        /// <param name="json">json数组字符串(eg.[{"Adress":"0","Value":"125"}])</param>
+        /// <returns>对象实体集合</returns>
+        public static List<T> DeserializeJsonToList<T>(string json) where T : class
+        {
+            JsonSerializer serializer = new JsonSerializer();
+            StringReader sr = new StringReader(json);
+            object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>));
+            List<T> list = o as List<T>;
+            return list;
+        }
+
+        /// <summary>
+        /// 反序列化JSON到给定的匿名对象.
+        /// </summary>
+        /// <typeparam name="T">匿名对象类型</typeparam>
+        /// <param name="json">json字符串</param>
+        /// <param name="anonymousTypeObject">匿名对象</param>
+        /// <returns>匿名对象</returns>
+        public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject)
+        {
+            T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject);
+            return t;
+        }
+    }
+}

+ 114 - 0
PLCLinker/MyTimer.cs

@@ -0,0 +1,114 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PLCLinker
+{
+    /// <summary>
+    /// 计时器类,提供计算时间间隔与判断时长方法
+    /// </summary>
+    class MyTimer
+    {
+        public static bool restart { get; set; }
+        public bool rolledBack { get; set; }
+        private DateTime startTime;
+        private DateTime endTime;
+        private bool recorded;
+        private bool displayed;
+        private int activationCount;
+        private TimeSpan timeSpan;
+        /// <summary>
+        /// 构造函数
+        /// </summary>
+        public MyTimer()
+        {
+            restart = false;
+            recorded = false;
+            displayed = false;
+            rolledBack = false;
+            activationCount = 0;
+        }
+        /// <summary>
+        /// 开始计时
+        /// </summary>
+        public void StartTiming()
+        {
+            recorded = false;
+            startTime = DateTime.Now;
+        }
+        /// <summary>
+        /// 结束计时
+        /// </summary>
+        public void EndTiming()
+        {
+            endTime = DateTime.Now;
+            timeSpan = endTime - startTime;
+            recorded = true;
+        }
+        /// <summary>
+        /// 获取时间间隔
+        /// </summary>
+        /// <returns>返回TimeSpan对象</returns>
+        public TimeSpan GetInterval()
+        {
+            if (recorded)
+                return timeSpan;
+            else
+                return new TimeSpan();
+        }
+        /// <summary>
+        /// 判断时长是否在范围内
+        /// </summary>
+        /// <param name="minCount">最小单位个数</param>
+        /// <param name="maxCount">最大单位个数</param>
+        /// <param name="secondsInUnit">一单位对应秒数</param>
+        /// /// <param name="displayOnlyOnce">是否只在外界输出一次</param>
+        /// <returns>判断结果</returns>
+        public bool IsInBetween(int minCount, int maxCount, double secondsInUnit, bool displayOnlyOnce)
+        {
+            TimeSpan ts = GetInterval();
+            if (ts.TotalSeconds >= minCount * secondsInUnit && ts.TotalSeconds <= maxCount * secondsInUnit)
+            {
+                if (displayOnlyOnce && displayed)
+                    return false;
+                else
+                {
+                    displayed = true;
+                    return true;
+                }
+            }
+            else
+                return false;
+        }
+        /// /// <summary>
+        /// 判断时长是否在范围内
+        /// </summary>
+        /// <param name="minCount">最小单位个数</param>
+        /// <param name="secondsInUnit">一单位对应秒数</param>
+        /// /// <param name="displayOnlyOnce">是否只在外界激活一次</param>
+        /// /// <param name="activationCount">记录被激活次数</param>
+        /// <returns>判断结果</returns>
+        public bool IsLonger(int minCount, double secondsInUnit, bool displayOnlyOnce, out int activationCount)
+        {
+            TimeSpan ts = GetInterval();
+            activationCount = this.activationCount;
+            if (ts.TotalSeconds >= minCount * secondsInUnit)
+            {
+                if (displayOnlyOnce && displayed)
+                    return false;
+                else
+                {
+                    this.activationCount += 1;
+                    activationCount = this.activationCount;
+                    displayed = true;
+                    return true;
+                }
+            }
+            else
+                return false;
+        }
+
+    }
+}

File diff suppressed because it is too large
+ 1425 - 0
PLCLinker/PLCLinker.cs


+ 58 - 0
PLCLinker/PLCLinker.csproj

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{E574C9C3-B320-4DBC-B1B5-C5CEEA1A0D7D}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>PLCLinker</RootNamespace>
+    <AssemblyName>PLCLinker</AssemblyName>
+    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="HslCommunication">
+      <HintPath>..\parkMonitor\sdk\HslCommunication\HslCommunication.dll</HintPath>
+    </Reference>
+    <Reference Include="Newtonsoft.Json">
+      <HintPath>..\parkMonitor\sdk\HslCommunication\Newtonsoft.Json.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="AbstractMessage.cs" />
+    <Compile Include="IEquipments.cs" />
+    <Compile Include="Jsonhelper.cs" />
+    <Compile Include="MyTimer.cs" />
+    <Compile Include="PLCLinker.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>

+ 36 - 0
PLCLinker/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("PLCLinker")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("PLCLinker")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2018")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("e574c9c3-b320-4dbc-b1b5-c5ceea1a0d7d")]
+
+// 程序集的版本信息由下列四个值组成: 
+//
+//      主版本
+//      次版本
+//      生成号
+//      修订号
+//
+// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
+//通过使用 "*",如下所示:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 30 - 2
parkMonitor.sln

@@ -1,10 +1,14 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0.21005.1
+# Visual Studio 15
+VisualStudioVersion = 15.0.27130.2026
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "parkMonitor", "parkMonitor\parkMonitor.csproj", "{DD3DCAB1-41A7-4EED-ADEE-9E4BBCE6B4C0}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PLCLinker", "PLCLinker\PLCLinker.csproj", "{E574C9C3-B320-4DBC-B1B5-C5CEEA1A0D7D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NumMachineManager", "NumMachineManager\NumMachineManager.csproj", "{BF6FD30A-11DC-478D-B728-DC3B979E48D2}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -27,6 +31,30 @@ Global
 		{DD3DCAB1-41A7-4EED-ADEE-9E4BBCE6B4C0}.Release|x64.Build.0 = Release|Any CPU
 		{DD3DCAB1-41A7-4EED-ADEE-9E4BBCE6B4C0}.Release|x86.ActiveCfg = Release|Any CPU
 		{DD3DCAB1-41A7-4EED-ADEE-9E4BBCE6B4C0}.Release|x86.Build.0 = Release|Any CPU
+		{E574C9C3-B320-4DBC-B1B5-C5CEEA1A0D7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E574C9C3-B320-4DBC-B1B5-C5CEEA1A0D7D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E574C9C3-B320-4DBC-B1B5-C5CEEA1A0D7D}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{E574C9C3-B320-4DBC-B1B5-C5CEEA1A0D7D}.Debug|x64.Build.0 = Debug|Any CPU
+		{E574C9C3-B320-4DBC-B1B5-C5CEEA1A0D7D}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{E574C9C3-B320-4DBC-B1B5-C5CEEA1A0D7D}.Debug|x86.Build.0 = Debug|Any CPU
+		{E574C9C3-B320-4DBC-B1B5-C5CEEA1A0D7D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E574C9C3-B320-4DBC-B1B5-C5CEEA1A0D7D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E574C9C3-B320-4DBC-B1B5-C5CEEA1A0D7D}.Release|x64.ActiveCfg = Release|Any CPU
+		{E574C9C3-B320-4DBC-B1B5-C5CEEA1A0D7D}.Release|x64.Build.0 = Release|Any CPU
+		{E574C9C3-B320-4DBC-B1B5-C5CEEA1A0D7D}.Release|x86.ActiveCfg = Release|Any CPU
+		{E574C9C3-B320-4DBC-B1B5-C5CEEA1A0D7D}.Release|x86.Build.0 = Release|Any CPU
+		{BF6FD30A-11DC-478D-B728-DC3B979E48D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{BF6FD30A-11DC-478D-B728-DC3B979E48D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{BF6FD30A-11DC-478D-B728-DC3B979E48D2}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{BF6FD30A-11DC-478D-B728-DC3B979E48D2}.Debug|x64.Build.0 = Debug|Any CPU
+		{BF6FD30A-11DC-478D-B728-DC3B979E48D2}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{BF6FD30A-11DC-478D-B728-DC3B979E48D2}.Debug|x86.Build.0 = Debug|Any CPU
+		{BF6FD30A-11DC-478D-B728-DC3B979E48D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{BF6FD30A-11DC-478D-B728-DC3B979E48D2}.Release|Any CPU.Build.0 = Release|Any CPU
+		{BF6FD30A-11DC-478D-B728-DC3B979E48D2}.Release|x64.ActiveCfg = Release|Any CPU
+		{BF6FD30A-11DC-478D-B728-DC3B979E48D2}.Release|x64.Build.0 = Release|Any CPU
+		{BF6FD30A-11DC-478D-B728-DC3B979E48D2}.Release|x86.ActiveCfg = Release|Any CPU
+		{BF6FD30A-11DC-478D-B728-DC3B979E48D2}.Release|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 1 - 0
parkMonitor/server/CoreThread/CoreThreadTest2.cs

@@ -133,6 +133,7 @@ namespace parkMonitor.server.CoreThread
                                         queueCmd.returnedCount = 1;
                                         queuingThread.SetMessage((Command)queueCmd.Clone());
                                         Thread.Sleep(5000);
+                                        continue;
                                     }
                                     //判断当前计数是否允许线程创建,机械手资源争抢严重则将指令丢回队列
                                     else if (queueCmd.id / 6 + 1 == Robot.robot1.id)

+ 2 - 0
parkMonitor/server/PLCLinker/PLCLinker.cs

@@ -1154,6 +1154,7 @@ namespace parkMonitor.server
                                         mt.rolledBack = true;
                                         UILogServer.ins.error("记录数据前超时未获得心跳,请检查设备");
                                         Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "记录数据前超时未获得心跳");
+                                        return;
                                     }
                                     Thread.Sleep(100);
                                 }
@@ -1210,6 +1211,7 @@ namespace parkMonitor.server
                                                         mt.rolledBack = true;
                                                         UILogServer.ins.error("发起重测前超时未能获取摆扫激光心跳,请检查设备");
                                                         Log.WriteLog(LogType.NOT_DATABASE, LogFile.ERROR, "发起重测前超时未能获取摆扫激光心跳");
+                                                        return;
                                                     }
                                                     Thread.Sleep(100);
                                                 }