kazelee
2025-05-14 cd92df8b7b383a6a3218f50b3b62264db8332899
引入NETSDKCS,修复版本兼容问题;完成拍照逻辑开发,跑通待调试
15个文件已添加
14个文件已修改
5个文件已删除
156244 ■■■■■ 已修改文件
.idea/.idea.HH.WCS.Mobox3.AnGang/.idea/.gitignore 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/.idea.HH.WCS.Mobox3.AnGang/.idea/.name 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/.idea.HH.WCS.Mobox3.AnGang/.idea/encodings.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/.idea.HH.WCS.Mobox3.AnGang/.idea/indexLayout.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/.idea.HH.WCS.Mobox3.AnGang/.idea/vcs.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/50517d0d-5669-4550-a9e0-16e8cf245074.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/53a0c388-cbc5-4b2b-b4eb-cd92a4ce794b.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/751eaf15-0a04-4bab-a16d-9f01e4e7f818.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/76260fe3-41d2-41f5-aa6c-8c9e109555f6.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/8840fa70-8c16-4a47-a95b-02e5437b8c55.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/8c43b3a9-b113-4587-b0a9-056dfab442ea.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/c1b1f263-3564-477c-bc41-41a75528f80c.vsidx 补丁 | 查看 | 原始文档 | blame | 历史
AppStart/Config.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
AppStart/Settings.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Controllers/ApiModel.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Controllers/ErpController.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Devices/ScanCodeHelper.cs 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Devices/SnapDevice.cs 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Devices/SnapManager.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Dispatch/GZRobot.cs 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.AnGang.csproj 78 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HH.WCS.Mobox3.AnGang.sln 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Helpers/LogHelper.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Models/TN_CG_Detail.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
NetSDKCS/NetSDK.cs 9411 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
NetSDKCS/NetSDKCS.csproj 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
NetSDKCS/NetSDKStruct.cs 144495 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
NetSDKCS/OriginalSDK.cs 1427 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
NetSDKCS/Properties/AssemblyInfo.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Program.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ServiceCore/Monitor.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Services/AgvService.cs 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
config/config.json 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages.config 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/.idea.HH.WCS.Mobox3.AnGang/.idea/.gitignore
New file
@@ -0,0 +1,13 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# Rider 忽略的文件
/modules.xml
/projectSettingsUpdater.xml
/contentModel.xml
/.idea.HH.WCS.Mobox3.AnGang.iml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
.idea/.idea.HH.WCS.Mobox3.AnGang/.idea/.name
New file
@@ -0,0 +1 @@
HH.WCS.Mobox3.AnGang
.idea/.idea.HH.WCS.Mobox3.AnGang/.idea/encodings.xml
New file
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
</project>
.idea/.idea.HH.WCS.Mobox3.AnGang/.idea/indexLayout.xml
New file
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="UserContentModel">
    <attachedFolders />
    <explicitIncludes />
    <explicitExcludes />
  </component>
</project>
.idea/.idea.HH.WCS.Mobox3.AnGang/.idea/vcs.xml
New file
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="VcsDirectoryMappings">
    <mapping directory="" vcs="Git" />
  </component>
</project>
.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/50517d0d-5669-4550-a9e0-16e8cf245074.vsidx
Binary files differ
.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/53a0c388-cbc5-4b2b-b4eb-cd92a4ce794b.vsidx
Binary files differ
.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/751eaf15-0a04-4bab-a16d-9f01e4e7f818.vsidx
Binary files differ
.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/76260fe3-41d2-41f5-aa6c-8c9e109555f6.vsidx
Binary files differ
.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/8840fa70-8c16-4a47-a95b-02e5437b8c55.vsidx
Binary files differ
.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/8c43b3a9-b113-4587-b0a9-056dfab442ea.vsidx
Binary files differ
.vs/HH.WCS.Mobox3.AnGang/FileContentIndex/c1b1f263-3564-477c-bc41-41a75528f80c.vsidx
Binary files differ
AppStart/Config.cs
@@ -21,6 +21,16 @@
        public string TCPServerIP { get; set; }
        public int TCPServerPort { get; set; }
        public List<Area> Areas { get; set; }
        public List<Snap> Snap { get; set; }
        public string CaptureUrl { get; set; }
    }
    public class Snap {
        public string Ip { get; set; }
        public int Port { get; set; }
        public string Name { get; set; }
        public string Pwd { get; set; }
    }
}
AppStart/Settings.cs
@@ -19,12 +19,18 @@
        /// </summary>
        public static Dictionary<string, List<string>> AreaMap { get; set; } = new Dictionary<string, List<string>>();
        //public static Snap Snap { get; set; }
        public static string CaptureUrl { get; set; }
        public static void Init() {
            // 加载配置文件
            LoadJson();
            // 针对 Areas 进行转换:将 Config 的 List 加载到 Dict 中
            LoadAreas();
            //Snap = Config.Snap[0]; // 目前本项目只有一个相机
            CaptureUrl = Config.CaptureUrl; // 保存图片的根目录
        }
        private static void LoadJson() {
Controllers/ApiModel.cs
@@ -118,8 +118,6 @@
            /// 订单当前的目的地
            /// </summary>
            public string currentDes { get; set; }
            /// <summary>
            /// 当前指令
            /// </summary>
Controllers/ErpController.cs
@@ -12,8 +12,5 @@
    /// </summary>
    [RoutePrefix("api")]
    public class ErpController : ApiController {
    }
}
Devices/ScanCodeHelper.cs
File was deleted
Devices/SnapDevice.cs
New file
@@ -0,0 +1,163 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using NetSDKCS;
namespace HH.WCS.Mobox3.AnGang.Devices {
    public class SnapDevice {
        private IntPtr _LoginID = IntPtr.Zero;
        private IntPtr _PlayID = IntPtr.Zero;
        //private fSnapRevCallBack _SnapRevCallBack;
        private NET_DEVICEINFO_Ex _DeviceInfo = new NET_DEVICEINFO_Ex();
        private bool _IsSpanCapture = false;
        //private List<int> _channalList = new List<int>();
        private int _channalMax = 0;
        public SnapDevice() {
            try {
                //_SnapRevCallBack = new fSnapRevCallBack(SnapRevCallBack);
                NETClient.Init(null, IntPtr.Zero, null);
                //NETClient.SetSnapRevCallBack(_SnapRevCallBack, IntPtr.Zero);
            }
            catch (Exception ex) {
                LogHelper.InfoEx(ex);
            }
        }
        ~SnapDevice() {
            NETClient.Cleanup();
        }
        public void LoadInfo(AppStart.Snap snap) {
            LoadInfo(snap.Ip, snap.Port, snap.Name, snap.Pwd);
        }
        public void LoadInfo(string ip, int port, string name, string pwd) {
            if (IntPtr.Zero == _LoginID) {
                ushort uPort = 0;
                try {
                    uPort = Convert.ToUInt16(port);
                }
                catch {
                    LogHelper.Info("加载Snap:端口号格式错误");
                    return;
                }
                _LoginID = NETClient.LoginWithHighLevelSecurity(ip, uPort, name, pwd, EM_LOGIN_SPAC_CAP_TYPE.TCP, IntPtr.Zero, ref _DeviceInfo);
                if (IntPtr.Zero == _LoginID) {
                    LogHelper.Info(NETClient.GetLastError());
                    return;
                }
                //_channalList.Clear();
                //for (int i = 0; i < _DeviceInfo.nChanNum; i++) {
                //    _channalList.Add(i + 1);
                //}
                _channalMax = _DeviceInfo.nChanNum;
            }
            else {
                NETClient.Logout(_LoginID);
                _LoginID = IntPtr.Zero;
                if (_IsSpanCapture) {
                    _IsSpanCapture = false;
                }
            }
        }
        public bool SnapPictureToFileOK(ref string filePath, int channelIndex = 0) {
            if (channelIndex >= _channalMax) {
                LogHelper.Info($"通道数 '{channelIndex}' 超出通道总数 '{_channalMax}'");
                //filePath = string.Empty;
                return false;
            }
            //DateTime now = DateTime.Now;
            //string path = AppDomain.CurrentDomain.BaseDirectory + "image";
            //string fileName = string.Format("{0}{1}{2}{3}{4}{5}", now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second) + ".jpg";
            //filePath = path + "\\" + fileName;
            NET_SNAP_PARAMS asyncSnap = new NET_SNAP_PARAMS();
            //asyncSnap.Channel = (uint)this._channalList[channelIndex];
            asyncSnap.Channel = (uint)channelIndex;
            asyncSnap.Quality = 6;
            asyncSnap.ImageSize = 2;
            asyncSnap.mode = 0;
            asyncSnap.InterSnap = 0;
            NET_IN_SNAP_PIC_TO_FILE_PARAM inParam = new NET_IN_SNAP_PIC_TO_FILE_PARAM {
                dwSize = (uint)Marshal.SizeOf(typeof(NET_IN_SNAP_PIC_TO_FILE_PARAM)),
                stuParam = asyncSnap,
                szFilePath = filePath,
            };
            NET_OUT_SNAP_PIC_TO_FILE_PARAM outParam = new NET_OUT_SNAP_PIC_TO_FILE_PARAM() {
                dwSize = (uint)Marshal.SizeOf(typeof(NET_OUT_SNAP_PIC_TO_FILE_PARAM)),
                dwPicBufLen = 1024000,
                szPicBuf = Marshal.AllocHGlobal(1024000),
            };
            bool ret = NETClient.SnapPictureToFile(_LoginID, ref inParam, ref outParam, 1000);
            if (!ret) {
                LogHelper.Info("抓图失败");
            }
            return ret;
        }
        public bool SnapPictureOk(int channelIndex = 0) {
            if (channelIndex >= _channalMax) {
                LogHelper.Info($"通道数 '{channelIndex}' 超出通道总数 '{_channalMax}'");
                return false;
            }
            NET_SNAP_PARAMS asyncSnap = new NET_SNAP_PARAMS();
            //asyncSnap.Channel = (uint)this._channalList[channelIndex];
            asyncSnap.Channel = (uint)channelIndex;
            asyncSnap.Quality = 6;
            asyncSnap.ImageSize = 2;
            asyncSnap.mode = 0;
            asyncSnap.InterSnap = 0;
            bool ret = NETClient.SnapPictureEx(_LoginID, asyncSnap, IntPtr.Zero);
            if (!ret) {
                LogHelper.Info(NETClient.GetLastError());
                return false;
            }
            return true;
        }
        private void SnapRevCallBack(IntPtr lLoginID, IntPtr pBuf, uint RevLen, uint EncodeType, uint CmdSerial, IntPtr dwUser) {
            string path = AppDomain.CurrentDomain.BaseDirectory + "image";
            if (!Directory.Exists(path)) {
                Directory.CreateDirectory(path);
            }
            if (EncodeType == 10) //.jpg
            {
                DateTime now = DateTime.Now;
                string fileName = string.Format("{0}-{1}-{2}-{3}-{4}-{5}", now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second) + ".jpg";
                string filePath = path + "\\" + fileName;
                byte[] data = new byte[RevLen];
                Marshal.Copy(pBuf, data, 0, (int)RevLen);
                try {
                    //when the file is operate by local capture will throw expection.
                    using (FileStream stream = new FileStream(filePath, FileMode.OpenOrCreate)) {
                        stream.Write(data, 0, (int)RevLen);
                        stream.Flush();
                        stream.Dispose();
                    }
                }
                catch (Exception ex) {
                    LogHelper.InfoEx(ex);
                    return;
                }
                // 替代Demo程序的Frame图片展示
                LogHelper.Info($"保存图片到:{filePath}");
                Process.Start(filePath);
            }
        }
    }
}
Devices/SnapManager.cs
New file
@@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HH.WCS.Mobox3.AnGang.AppStart;
namespace HH.WCS.Mobox3.AnGang.Devices {
    public class SnapManager {
        private static SnapDevice _snapDevice { get; set; }
        public SnapManager(AppStart.Snap snap) {
            if (_snapDevice == null) {
                _snapDevice = new SnapDevice();
            }
            _snapDevice.LoadInfo(snap);
        }
        public static string GetCapturePicturePath() {
            DateTime now = DateTime.Now;
            string path = Settings.CaptureUrl;
            string fileName = string.Format("{0}{1}{2}{3}{4}{5}", now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second) + ".jpg";
            string filePath = path + "\\" + fileName;
            if (_snapDevice.SnapPictureToFileOK(ref filePath)) {
                return filePath;
            }
            else {
                return string.Empty;
            }
        }
    }
}
Dispatch/GZRobot.cs
@@ -132,11 +132,6 @@
                case "source_finish":
                    //取货完成
                    agv.state = 4;
                    //var checkWeightTask = Task.Run(() => {
                    //    ChooseFinalEndLoc(model);
                    //});
                    break;
                case "dest_finish":
                    //卸货完成
@@ -171,75 +166,9 @@
            return result;
        }
        //public static void ChooseFinalEndLoc(orderStatusReportParme model) {
        //    var db = DbHelper.GetDbClient();
        //    var tn_task = db.Queryable<TN_Task>().First(a => a.S_EQ_NO == model.agvIDList && a.S_END_AREA == "" && a.S_END_LOC == "" && a.S_TYPE == "产品入库(PDA)");
        //    // 只要任务为产品入库(PDA),就需要重新指定终点(默认endLoc为"")
        //    if (tn_task.S_TYPE == "产品入库(PDA)") {
        //        var endLoc = new TN_Location();
        //        // 只当之前指定终点货架后,才尝试计算终点货位,否则交给人工决定
        //        if (tn_task.S_END_AREA != "") {
        //            if (tn_task.F_WEIGHT > 1500) {
        //                // 重量超过1.5t,需要选择1-3层货架
        //                endLoc = db.Queryable<TN_Location>().First(a => a.S_SHELF_CODE == tn_task.S_END_AREA && LocationHelper.IsFree(a) && a.N_CURRENT_NUM == 0 && a.N_HEIGHT <= 3);
        //            }
        //            else if (tn_task.F_WEIGHT > 0) {
        //                // 重量未超过1.5t,在指定货架随便选择1个
        //                endLoc = db.Queryable<TN_Location>().First(a => a.S_SHELF_CODE == tn_task.S_END_AREA && LocationHelper.IsFree(a) && a.N_CURRENT_NUM == 0);
        //            }
        //            else {
        //                // 没有接收到重量,或重量出错
        //                endLoc = null;
        //                LogHelper.Info($"错误的重量信息:{tn_task.F_WEIGHT}");
        //            }
        //            // 如果没有符合条件的货位,置空,等待PDA重新确定
        //            if (endLoc == null) {
        //                tn_task.S_END_AREA = "";
        //                tn_task.S_END_LOC = "";
        //                if (db.Updateable<TN_Task>(tn_task).ExecuteCommand() > 0) {
        //                    //LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁
        //                    LogHelper.Info($"重新计算后没有合适货位,任务 {tn_task.S_CODE} 修改成功,修改终点货架和货位为空");
        //                }
        //                else {
        //                    LogHelper.Info($"重新计算后没有合适货位,任务 {tn_task.S_CODE} 修改失败,修改终点货架和货位为空");
        //                }
        //            }
        //            else {
        //                // 找到合适的货位,推送
        //                tn_task.S_END_LOC = endLoc.S_CODE;
        //                using (var trans = db.Ado.UseTran()) {
        //                    if (db.Updateable<TN_Task>(tn_task).ExecuteCommand() > 0) {
        //                        LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁
        //                        trans.CommitTran();
        //                        LogHelper.Info($"计算货位成功,任务 {tn_task.S_CODE} 修改成功,终点货架为 {endLoc.S_SHELF_CODE},修改终点位置为 {endLoc.S_CODE}");
        //                    }
        //                    else {
        //                        trans.RollbackTran();
        //                        LogHelper.Info($"计算货位成功,任务 {tn_task.S_CODE} 修改失败,终点货架为 {endLoc.S_SHELF_CODE},修改终点位置为 {endLoc.S_CODE}");
        //                    }
        //                }
        //            }
        //        }
        //    }
        //}
        public class CancelGZOrderInfo
        {
            public int order_id { get; set; }
            public int order_command_type_id { get; set; }
        }
@@ -343,14 +272,6 @@
        }
    }
    //public class CustomBufInfo {
    //    public string app_name { get; set; }
    //    public string version { get; set; }
    //    public int code { get; set; }
    //    public string msg { get; set; }
    //    public List<CustomData> data { get; set; }
    //}
    public class CustomData {
        public string agv_id { get; set; }
HH.WCS.Mobox3.AnGang.csproj
@@ -30,7 +30,7 @@
    <BootstrapperEnabled>true</BootstrapperEnabled>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <PlatformTarget>x86</PlatformTarget>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
@@ -53,6 +53,50 @@
  <PropertyGroup>
    <StartupObject>HH.WCS.Mobox3.AnGang.Program</StartupObject>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\x86\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <DocumentationFile>bin\Debug\HH.WCS.Mobox3.AnGang.xml</DocumentationFile>
    <DebugType>full</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
    <Prefer32Bit>true</Prefer32Bit>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
    <OutputPath>bin\x86\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <Optimize>true</Optimize>
    <NoWarn>;CS1591</NoWarn>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
    <Prefer32Bit>true</Prefer32Bit>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\x64\Debug\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <DocumentationFile>bin\Debug\HH.WCS.Mobox3.AnGang.xml</DocumentationFile>
    <DebugType>full</DebugType>
    <PlatformTarget>x64</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
    <Prefer32Bit>true</Prefer32Bit>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
    <OutputPath>bin\x64\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <Optimize>true</Optimize>
    <NoWarn>;CS1591</NoWarn>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>x64</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
    <Prefer32Bit>true</Prefer32Bit>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="BouncyCastle.Crypto, Version=1.9.0.0, Culture=neutral, PublicKeyToken=0e99375e54769942, processorArchitecture=MSIL">
      <HintPath>packages\Portable.BouncyCastle.1.9.0\lib\net40\BouncyCastle.Crypto.dll</HintPath>
@@ -73,13 +117,13 @@
      <HintPath>packages\Microsoft.Extensions.Logging.Abstractions.3.1.32\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Owin, Version=4.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Owin.4.2.2\lib\net45\Microsoft.Owin.dll</HintPath>
      <HintPath>packages\Microsoft.Owin.4.2.2\lib\net45\Microsoft.Owin.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Owin.Host.HttpListener, Version=4.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Owin.Host.HttpListener.4.2.2\lib\net45\Microsoft.Owin.Host.HttpListener.dll</HintPath>
      <HintPath>packages\Microsoft.Owin.Host.HttpListener.4.2.2\lib\net45\Microsoft.Owin.Host.HttpListener.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Owin.Hosting, Version=4.2.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>..\packages\Microsoft.Owin.Hosting.4.2.2\lib\net45\Microsoft.Owin.Hosting.dll</HintPath>
      <HintPath>packages\Microsoft.Owin.Hosting.4.2.2\lib\net45\Microsoft.Owin.Hosting.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Web.Infrastructure, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <HintPath>packages\Microsoft.Web.Infrastructure.2.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
@@ -115,16 +159,16 @@
      <HintPath>packages\OPCFoundation.NetStandard.Opc.Ua.Server.1.5.374.126\lib\netstandard2.0\Opc.Ua.Server.dll</HintPath>
    </Reference>
    <Reference Include="Owin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f0ebd12fd5e55cc5, processorArchitecture=MSIL">
      <HintPath>..\packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
      <HintPath>packages\Owin.1.0\lib\net40\Owin.dll</HintPath>
    </Reference>
    <Reference Include="S7.Net, Version=0.20.0.0, Culture=neutral, PublicKeyToken=d5812d469e84c693, processorArchitecture=MSIL">
      <HintPath>..\packages\S7netplus.0.20.0\lib\net452\S7.Net.dll</HintPath>
      <HintPath>packages\S7netplus.0.20.0\lib\net462\S7.Net.dll</HintPath>
    </Reference>
    <Reference Include="SqlSugar, Version=5.1.4.168, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>packages\SqlSugar.5.1.4.169\lib\SqlSugar.dll</HintPath>
    </Reference>
    <Reference Include="Swashbuckle.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cd1bb07a5ac7c7bc, processorArchitecture=MSIL">
      <HintPath>..\packages\Swashbuckle.Core.5.6.0\lib\net40\Swashbuckle.Core.dll</HintPath>
      <HintPath>packages\Swashbuckle.Core.5.6.0\lib\net40\Swashbuckle.Core.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
@@ -202,11 +246,8 @@
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
    <Reference Include="Topshelf, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b800c4cfcdeea87b, processorArchitecture=MSIL">
      <HintPath>..\packages\Topshelf.4.3.0\lib\net452\Topshelf.dll</HintPath>
    </Reference>
    <Reference Include="Topshelf.NLog, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b800c4cfcdeea87b, processorArchitecture=MSIL">
      <HintPath>..\packages\Topshelf.NLog.4.3.0\lib\net452\Topshelf.NLog.dll</HintPath>
    <Reference Include="Topshelf, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b800c4cfcdeea87b, processorArchitecture=MSIL">
      <HintPath>packages\Topshelf.4.3.1-develop.253\lib\net452\Topshelf.dll</HintPath>
    </Reference>
    <Reference Include="WebActivatorEx, Version=2.0.0.0, Culture=neutral, PublicKeyToken=7b26dc2a43f6a0d4, processorArchitecture=MSIL">
      <HintPath>packages\WebActivatorEx.2.2.0\lib\net40\WebActivatorEx.dll</HintPath>
@@ -227,6 +268,8 @@
    <Compile Include="Controllers\AgvController.cs" />
    <Compile Include="Controllers\ApiModel.cs" />
    <Compile Include="AppStart\SwaggerControllerDescProvider.cs" />
    <Compile Include="Devices\SnapDevice.cs" />
    <Compile Include="Devices\SnapManager.cs" />
    <Compile Include="Helpers\DbHelper.cs" />
    <Compile Include="Helpers\ResultHelper.cs" />
    <Compile Include="ServiceCore\WMSCore.cs" />
@@ -236,7 +279,6 @@
    <Compile Include="Devices\OpcUaHelper.cs" />
    <Compile Include="Devices\PlcHelper.cs" />
    <Compile Include="Devices\S7Helper.cs" />
    <Compile Include="Devices\ScanCodeHelper.cs" />
    <Compile Include="Devices\TcpClient.cs" />
    <Compile Include="Devices\TcpServer.cs" />
    <Compile Include="Dispatch\GZRobot.cs" />
@@ -301,6 +343,14 @@
      <Install>false</Install>
    </BootstrapperPackage>
  </ItemGroup>
  <ItemGroup />
  <ItemGroup>
    <Content Include=".gitignore" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="NetSDKCS\NetSDKCS.csproj">
      <Project>{60cfba25-f7ce-4140-a7e3-5355a25198e5}</Project>
      <Name>NetSDKCS</Name>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
HH.WCS.Mobox3.AnGang.sln
@@ -4,22 +4,41 @@
VisualStudioVersion = 17.4.33205.214
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HH.WCS.Mobox3.AnGang", "HH.WCS.Mobox3.AnGang.csproj", "{EBE15A59-A43A-43BE-8B4B-A6EC42E11DF6}"
    ProjectSection(ProjectDependencies) = postProject
        {60CFBA25-F7CE-4140-A7E3-5355A25198E5} = {60CFBA25-F7CE-4140-A7E3-5355A25198E5}
    EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{2B600D60-6469-4E6C-9692-C01E7A42018E}"
    ProjectSection(SolutionItems) = preProject
        .editorconfig = .editorconfig
    EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetSDKCS", "NetSDKCS\NetSDKCS.csproj", "{60CFBA25-F7CE-4140-A7E3-5355A25198E5}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
        Release|Any CPU = Release|Any CPU
        Debug|x64 = Debug|x64
        Debug|x86 = Debug|x86
        Release|x64 = Release|x64
        Release|x86 = Release|x86
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {EBE15A59-A43A-43BE-8B4B-A6EC42E11DF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {EBE15A59-A43A-43BE-8B4B-A6EC42E11DF6}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {EBE15A59-A43A-43BE-8B4B-A6EC42E11DF6}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {EBE15A59-A43A-43BE-8B4B-A6EC42E11DF6}.Release|Any CPU.Build.0 = Release|Any CPU
        {EBE15A59-A43A-43BE-8B4B-A6EC42E11DF6}.Debug|x64.ActiveCfg = Debug|x64
        {EBE15A59-A43A-43BE-8B4B-A6EC42E11DF6}.Debug|x64.Build.0 = Debug|x64
        {EBE15A59-A43A-43BE-8B4B-A6EC42E11DF6}.Debug|x86.ActiveCfg = Debug|x86
        {EBE15A59-A43A-43BE-8B4B-A6EC42E11DF6}.Debug|x86.Build.0 = Debug|x86
        {EBE15A59-A43A-43BE-8B4B-A6EC42E11DF6}.Release|x64.ActiveCfg = Release|x64
        {EBE15A59-A43A-43BE-8B4B-A6EC42E11DF6}.Release|x64.Build.0 = Release|x64
        {EBE15A59-A43A-43BE-8B4B-A6EC42E11DF6}.Release|x86.ActiveCfg = Release|x86
        {EBE15A59-A43A-43BE-8B4B-A6EC42E11DF6}.Release|x86.Build.0 = Release|x86
        {60CFBA25-F7CE-4140-A7E3-5355A25198E5}.Debug|x64.ActiveCfg = Debug|x64
        {60CFBA25-F7CE-4140-A7E3-5355A25198E5}.Debug|x64.Build.0 = Debug|x64
        {60CFBA25-F7CE-4140-A7E3-5355A25198E5}.Debug|x86.ActiveCfg = Debug|x86
        {60CFBA25-F7CE-4140-A7E3-5355A25198E5}.Debug|x86.Build.0 = Debug|x86
        {60CFBA25-F7CE-4140-A7E3-5355A25198E5}.Release|x64.ActiveCfg = Release|x64
        {60CFBA25-F7CE-4140-A7E3-5355A25198E5}.Release|x64.Build.0 = Release|x64
        {60CFBA25-F7CE-4140-A7E3-5355A25198E5}.Release|x86.ActiveCfg = Release|x86
        {60CFBA25-F7CE-4140-A7E3-5355A25198E5}.Release|x86.Build.0 = Release|x86
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
Helpers/LogHelper.cs
@@ -1,4 +1,6 @@
using NLog;
using Newtonsoft.Json;
using NLog;
using NLog.Common;
using NLog.Config;
using NLog.Targets;
@@ -74,6 +76,16 @@
                logger.Error($"{message}{ex.StackTrace}");
            }
        }
        #region 自定义方法
        public static void InfoEx(Exception ex) {
            Info($"异常:{ex.Message}");
        }
        public static void InfoApi(string taskType, object model) {
            Info($"触发API:{taskType} " + JsonConvert.SerializeObject(model), "API");
        }
        #endregion
    }
    internal class LogFactory
Models/TN_CG_Detail.cs
@@ -38,5 +38,10 @@
        public float F_QTY { get; set; }//数量
        public string S_SPE { get; set; }//规格
        /// <summary>
        /// 图片链接
        /// </summary>
        public string S_IMG_URL { get; set; }
    }
}
NetSDKCS/NetSDK.cs
New file
Diff too large
NetSDKCS/NetSDKCS.csproj
New file
@@ -0,0 +1,125 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>8.0.30703</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{60CFBA25-F7CE-4140-A7E3-5355A25198E5}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>NetSDKCS</RootNamespace>
    <AssemblyName>NetSDKCS</AssemblyName>
    <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <TargetFrameworkProfile />
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\x64\Debug\</OutputPath>
    <DefineConstants>TRACE;DEBUG;WINDOWS_X64</DefineConstants>
    <DebugType>full</DebugType>
    <PlatformTarget>x64</PlatformTarget>
    <CodeAnalysisLogFile>bin\Debug\NetSDKCS.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
    <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
    <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
    <Prefer32Bit>false</Prefer32Bit>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
    <DefineConstants>DEBUG;TRACE;WINDOWS_X64</DefineConstants>
    <OutputPath>bin\x64\Release\</OutputPath>
    <DefineConstants>DEBUG;TRACE;WINDOWS_X64</DefineConstants>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>x64</PlatformTarget>
    <CodeAnalysisLogFile>bin\Release\NetSDKCS.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
    <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
    <CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
    <Prefer32Bit>false</Prefer32Bit>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>TRACE;DEBUG;WINDOWS_X86</DefineConstants>
    <DebugType>full</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <CodeAnalysisLogFile>bin\Debug\NetSDKCS.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
    <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
    <Prefer32Bit>false</Prefer32Bit>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
    <OutputPath>bin\x86\Release\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>x86</PlatformTarget>
    <CodeAnalysisLogFile>bin\Release\NetSDKCS.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
    <CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
    <CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
    <CodeAnalysisRuleSetDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
    <CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
    <CodeAnalysisRuleDirectories>;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
    <CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
    <Prefer32Bit>false</Prefer32Bit>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\Debug\</OutputPath>
    <DefineConstants>TRACE;DEBUG;WINDOWS_X64</DefineConstants>
    <DebugType>full</DebugType>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>DEBUG;TRACE;WINDOWS_X64</DefineConstants>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <LangVersion>7.3</LangVersion>
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="NetSDK.cs" />
    <Compile Include="NetSDKStruct.cs" />
    <Compile Include="OriginalSDK.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>
NetSDKCS/NetSDKStruct.cs
New file
Diff too large
NetSDKCS/OriginalSDK.cs
New file
@@ -0,0 +1,1427 @@

// if the OS is linux open this define when compile the library. and if the OS is linux 64bit open define LINUX_X64 in the NetSDKStruct.cs file.
// 如果系统是Linux请打开下面的宏,如果是Linux 64位,请把NetSDKStruct.cs中的宏也打开.
//#define LINUX
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace NetSDKCS
{
    internal static class OriginalSDK
    {
#if(LINUX)
        const string LIBRARYNETSDK = "libdhnetsdk.so";
        const string LIBRARYCONFIGSDK = "libdhconfigsdk.so";
        const string LIBRARYPLAYSDK = "libplay.so";
#else
        const string LIBRARYNETSDK = "dhnetsdk.dll";
        const string LIBRARYCONFIGSDK = "dhconfigsdk.dll";
        const string LIBRARYPLAYSDK = "play.dll";
#endif
        [DllImport(LIBRARYNETSDK)]
        public static extern int CLIENT_GetLastError();
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_InitEx(fDisConnectCallBack cbDisConnect, IntPtr dwUser, IntPtr lpInitParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern void CLIENT_SetConnectTime(int nWaitTime, int nTryTimes);
        [DllImport(LIBRARYNETSDK)]
        public static extern void CLIENT_Cleanup();
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_LoginEx2(string pchDVRIP, ushort wDVRPort, string pchUserName, string pchPassword, EM_LOGIN_SPAC_CAP_TYPE emSpecCap, IntPtr pCapParam, ref NET_DEVICEINFO_Ex lpDeviceInfo, ref int error);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_Logout(IntPtr lLoginID);
        [DllImport(LIBRARYNETSDK)]
        public static extern void CLIENT_SetAutoReconnect(fHaveReConnectCallBack cbAutoConnect, IntPtr dwUser);
        [DllImport(LIBRARYNETSDK)]
        public static extern void CLIENT_SetNetworkParam(IntPtr pNetParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartRealPlay(IntPtr lLoginID, int nChannelID, IntPtr hWnd, EM_RealPlayType rType, fRealDataCallBackEx cbRealData, fRealPlayDisConnectCallBack cbDisconnect, IntPtr dwUser, uint dwWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopRealPlayEx(IntPtr lRealHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_RealPlayEx(IntPtr lLoginID, int nChannelID, IntPtr hWnd, EM_RealPlayType rType);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetRealDataCallBackEx2(IntPtr lRealHandle, fRealDataCallBackEx2 cbRealData, IntPtr dwUser, uint dwFlag);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetRealDataCallBackEx(IntPtr lRealHandle, fRealDataCallBackEx cbRealData, IntPtr dwUser, uint dwFlag);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetPlaybackYUVCallBack(IntPtr lPlayHandle, fYUVDataCallBack cYUVData, IntPtr dwUser);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SaveRealData(IntPtr lRealHandle, string pchFileName);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopSaveRealData(IntPtr lRealHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern void CLIENT_SetSnapRevCallBack(fSnapRevCallBack OnSnapRevMessage, IntPtr dwUser);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SnapPictureEx(IntPtr lLoginID, ref NET_SNAP_PARAMS par, IntPtr reserved);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SnapPictureToFile(IntPtr lLoginID, ref NET_IN_SNAP_PIC_TO_FILE_PARAM inParam, ref NET_OUT_SNAP_PIC_TO_FILE_PARAM outParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_PlayBackEx(IntPtr lLoginID, int nChannelID, IntPtr hWnd, EM_A_RealPlayType emRealPlayType = EM_A_RealPlayType.EM_A_RType_Realplay);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_PlayBackByTimeEx2(IntPtr lLoginID, int nChannelID, ref NET_IN_PLAY_BACK_BY_TIME_INFO pstNetIn, ref NET_OUT_PLAY_BACK_BY_TIME_INFO pstNetOut);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryRecordFile(IntPtr lLoginID, int nChannelId, int nRecordFileType, ref NET_TIME tmStart, ref NET_TIME tmEnd, string pchCardid, IntPtr nriFileinfo, int maxlen, ref int filecount, int waittime, bool bTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryRecordStatus(IntPtr lLoginID, int nChannelId, int nRecordFileType, ref NET_TIME tmMonth, string pchCardid, ref NET_RECORD_STATUS pRecordStatus, int waittime = 1000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetPlayBackOsdTime(IntPtr lPlayHandle, ref NET_TIME lpOsdTime, ref NET_TIME lpStartTime, ref NET_TIME lpEndTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_CapturePictureEx(IntPtr hPlayHandle, string pchPicFileName, EM_NET_CAPTURE_FORMATS eFormat);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopPlayBack(IntPtr lPlayHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_DownloadByTimeEx(IntPtr lLoginID, int nChannelId, int nRecordFileType, ref NET_TIME tmStart, ref NET_TIME tmEnd, string sSavedFileName,
            fTimeDownLoadPosCallBack cbTimeDownLoadPos, IntPtr dwUserData,
            fDataCallBack fDownLoadDataCallBack, IntPtr dwDataUser, IntPtr pReserved);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopDownload(IntPtr lFileHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetDownloadPos(IntPtr lFileHandle, ref int nTotalSize, ref int nDownLoadSize);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DHPTZControl(IntPtr lLoginID, int nChannelID, uint dwPTZCommand, byte param1, byte param2, byte param3, bool dwStop, IntPtr param4);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DHPTZControlEx2(IntPtr lLoginID, int nChannelID, uint dwPTZCommand, int lParam1, int lParam2, int lParam3, bool dwStop, IntPtr param4);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_OpenSound(IntPtr hPlayHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_CloseSound();
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_PausePlayBack(IntPtr lPlayHandle, bool bPause);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_FastPlayBack(IntPtr lPlayHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SlowPlayBack(IntPtr lPlayHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_NormalPlayBack(IntPtr lPlayHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetDeviceMode(IntPtr lLoginID, EM_USEDEV_MODE emType, IntPtr pValue);
        [DllImport(LIBRARYNETSDK)]
        public static extern void CLIENT_SetDVRMessCallBackEx1(fMessCallBackEx cbMessage, IntPtr dwUser);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StartListenEx(IntPtr lLoginID);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopListen(IntPtr lLoginID);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_RealLoadPictureEx(IntPtr lLoginID, int nChannelID, uint dwAlarmType, bool bNeedPicFile, fAnalyzerDataCallBack cbAnalyzerData, IntPtr dwUser, IntPtr reserved);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopLoadPic(IntPtr lAnalyzerHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QuerySystemInfo(IntPtr lLoginID, int nSystemType, IntPtr pSysInfoBuffer, int maxlen, ref int nSysInfolen, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryDeviceLog(IntPtr lLoginID, ref NET_QUERY_DEVICE_LOG_PARAM pQueryParam, IntPtr pLogBuffer, int nLogBufferLen, ref int pRecLogNum, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartTalkEx(IntPtr lLoginID, fAudioDataCallBack pfcb, IntPtr dwUser);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopTalkEx(IntPtr lTalkHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_RecordStartEx(IntPtr lLoginID);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_RecordStopEx(IntPtr lLoginID);
        [DllImport(LIBRARYNETSDK)]
        public static extern int CLIENT_TalkSendData(IntPtr lTalkHandle, IntPtr pSendBuf, uint dwBufSize);
        [DllImport(LIBRARYNETSDK)]
        public static extern void CLIENT_AudioDec(IntPtr pAudioDataBuf, uint dwBufSize);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_ControlDevice(IntPtr lLoginID, EM_CtrlType type, IntPtr param, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_ControlDeviceEx(IntPtr lLoginID, EM_CtrlType emType, IntPtr pInBuf, IntPtr pOutBuf, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryDevState(IntPtr lLoginID, int nType, IntPtr pBuf, int nBufLen, ref int pRetLen, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryNewSystemInfo(IntPtr lLoginID, string szCommand, Int32 nChannelID, IntPtr szOutBuffer, UInt32 dwOutBufferSize, ref UInt32 error, Int32 waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryNewSystemInfoEx(IntPtr lLoginID, string szCommand, Int32 nChannelID, IntPtr szOutBuffer, UInt32 dwOutBufferSize, ref UInt32 error, IntPtr pExtendInfo, Int32 waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_FindRecord(IntPtr lLoginID, ref NET_IN_FIND_RECORD_PARAM pInParam, ref NET_OUT_FIND_RECORD_PARAM pOutParam, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern int CLIENT_FindNextRecord(ref NET_IN_FIND_NEXT_RECORD_PARAM pInParam, ref NET_OUT_FIND_NEXT_RECORD_PARAM pOutParam, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryRecordCount(ref NET_IN_QUEYT_RECORD_COUNT_PARAM pInParam, ref NET_OUT_QUEYT_RECORD_COUNT_PARAM pOutParam, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_FindRecordClose(IntPtr lFindHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartFindNumberStat(IntPtr lLoginID, ref NET_IN_FINDNUMBERSTAT pstInParam, ref NET_OUT_FINDNUMBERSTAT pstOutParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern int CLIENT_DoFindNumberStat(IntPtr lFindHandle, ref NET_IN_DOFINDNUMBERSTAT pstInParam, ref NET_OUT_DOFINDNUMBERSTAT pstOutParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopFindNumberStat(IntPtr lFindHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachVideoStatSummary(IntPtr lLoginID, ref NET_IN_ATTACH_VIDEOSTAT_SUM pInParam, ref NET_OUT_ATTACH_VIDEOSTAT_SUM pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachVideoStatSummary(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_CreateTransComChannel(IntPtr lLoginID, int TransComType, uint baudrate, uint databits, uint stopbits, uint parity, fTransComCallBack cbTransCom, IntPtr dwUser);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SendTransComData(IntPtr lTransComChannel, IntPtr pBuffer, uint dwBufSize);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DestroyTransComChannel(IntPtr lTransComChannel);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetSecurityKey(IntPtr lPlayHandle, string szKey, uint nKeyLen);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryMatrixCardInfo(IntPtr lLoginID, ref NET_MATRIX_CARD_LIST pstuCardList, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetNewDevConfig(IntPtr lLoginID, string szCommand, int nChannelId, IntPtr szInBuffer, uint dwInBufferSize, ref int error, ref int restart, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetNewDevConfig(IntPtr lLoginID, string szCommand, int nChannelID, IntPtr szOutBuffer, uint dwOutBufferSize, out int error, int waittime, IntPtr pReserved);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetSplitCaps(IntPtr lLoginId, int nChannel, ref NET_SPLIT_CAPS pstuCaps, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetSplitMode(IntPtr lLoginID, int nChannel, ref NET_SPLIT_MODE_INFO pstuSplitInfo, int nWaitTime = 1000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetSplitMode(IntPtr lLoginID, int nChannel, ref NET_SPLIT_MODE_INFO pstuSplitInfo, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_OpenSplitWindow(IntPtr lLoginID, ref NET_IN_SPLIT_OPEN_WINDOW pInParam, ref NET_OUT_SPLIT_OPEN_WINDOW pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_MatrixSetCameras(IntPtr lLoginID, ref NET_IN_MATRIX_SET_CAMERAS pInParam, ref NET_OUT_MATRIX_SET_CAMERAS pOutParam, int nWaitTime = 1000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_MatrixGetCameras(IntPtr lLoginID, ref NET_IN_MATRIX_GET_CAMERAS pInParam, ref NET_OUT_MATRIX_GET_CAMERAS pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetSplitSource(IntPtr lLoginID, int nChannel, int nWindow, IntPtr pstuSplitSrc, int nSrcCount, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetSplitSourceEx(IntPtr lLoginID, ref NET_IN_SET_SPLIT_SOURCE pInparam, ref NET_OUT_SET_SPLIT_SOURCE pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_OperateFaceRecognitionDB(IntPtr lLoginID, ref NET_IN_OPERATE_FACERECONGNITIONDB pstInParam, ref NET_OUT_OPERATE_FACERECONGNITIONDB pstOutParam, Int32 nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetectFace(IntPtr lLoginID, ref NET_IN_DETECT_FACE pstInParam, ref NET_OUT_DETECT_FACE pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_FindFileEx(IntPtr lLoginID, EM_FILE_QUERY_TYPE emType, IntPtr pQueryCondition, IntPtr reserved, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern int CLIENT_FindNextFileEx(IntPtr lFindHandle, int nFilecount, IntPtr pMediaFileInfo, int maxlen, IntPtr reserved, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_FindCloseEx(IntPtr lFindHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachFaceFindState(IntPtr lLoginID, ref NET_IN_FACE_FIND_STATE pstInParam, ref NET_OUT_FACE_FIND_STATE pstOutParam, Int32 nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachFaceFindState(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StartFindFaceRecognition(IntPtr lLoginID, IntPtr pstInParam, IntPtr pstOutParam, Int32 nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StartMultiFindFaceRecognition(IntPtr lLoginID, IntPtr pInParam, IntPtr pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DoFindFaceRecognition(IntPtr pstInParam, IntPtr pstOutParam, Int32 nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopFindFaceRecognition(IntPtr lFindHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetTotalFileCount(IntPtr lFindHandle, ref Int32 pTotalCount, IntPtr reserved, Int32 waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetFindingJumpOption(IntPtr lFindHandle, ref NET_FINDING_JUMP_OPTION_INFO pOption, IntPtr reserved, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryDeviceTime(IntPtr lLoginID, ref NET_TIME pDeviceTime, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetupDeviceTime(IntPtr lLoginID, ref NET_TIME pDeviceTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_ClearRepeatEnter(IntPtr lLoginID, ref NET_IN_CLEAR_REPEAT_ENTER pInParam, ref NET_OUT_CLEAR_REPEAT_ENTER pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryDevInfo(IntPtr lLoginID, int nQueryType, IntPtr pInBuf, IntPtr pOutBuf, IntPtr pReserved, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_FindGroupInfo(IntPtr lLoginID, ref NET_IN_FIND_GROUP_INFO pstInParam, ref NET_OUT_FIND_GROUP_INFO pstOutParam, int nWaitTime);
        [DllImport(LIBRARYCONFIGSDK)]
        public static extern bool CLIENT_ParseData(string szCommand, IntPtr szInBuffer, IntPtr lpOutBuffer, UInt32 dwOutBufferSize, IntPtr pReserved);
        [DllImport(LIBRARYCONFIGSDK)]
        public static extern bool CLIENT_PacketData(string szCommand, IntPtr lpInBuffer, uint dwInBufferSize, IntPtr szOutBuffer, uint dwOutFufferSize);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_OperateFaceRecognitionGroup(IntPtr lLoginID, ref NET_IN_OPERATE_FACERECONGNITION_GROUP pstInParam, ref NET_OUT_OPERATE_FACERECONGNITION_GROUP pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetConfig(IntPtr lLoginID, int emCfgOpType, int nChannelID, IntPtr szOutBuffer, uint dwOutBufferSize, int waittime, IntPtr reserve);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetConfig(IntPtr lLoginID, int emCfgOpType, int nChannelID, IntPtr szInBuffer, uint dwInBufferSize, int waittime, IntPtr restart, IntPtr reserve);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_OperateSplit(IntPtr lLoginID, EM_NET_SPLIT_OPERATE_TYPE emType, IntPtr pInParam, IntPtr pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_OperateSplitPlayer(IntPtr lLoginID, EM_NET_PLAYER_OPERATE_TYPE emType, IntPtr pInParam, IntPtr pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetSplitWindowsInfo(IntPtr lLoginID, IntPtr pInParam, IntPtr pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_WindowRegionEnlarge(IntPtr lLoginID, ref NET_IN_WINDOW_REGION_ENLARGE pInParam, ref NET_OUT_WINDOW_REGION_ENLARGE pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_WindowEnlargeReduction(IntPtr lLoginID, ref NET_IN_WINDOW_ENLARGE_REDUCTION pInParam, ref NET_OUT_WINDOW_ENLARGE_REDUCTION pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_RenderPrivateData(IntPtr lPlayHandle, bool bTrue);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_OperateTrafficList(IntPtr lLoginID, ref NET_IN_OPERATE_TRAFFIC_LIST_RECORD pstInParam, ref NET_OUT_OPERATE_TRAFFIC_LIST_RECORD pstOutParam, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_FileTransmit(IntPtr lLoginID, int nTransType, IntPtr szInBuf, int nInBufLen, fTransFileCallBack cbTransFile, IntPtr dwUserData, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_OperateUserInfoNew(IntPtr lLoginID, int nOperateType, IntPtr opParam, IntPtr subParam, IntPtr pReserved, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryUserInfoNew(IntPtr lLoginID, IntPtr pInfo, IntPtr pReserved, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartSearchDevices(fSearchDevicesCB cbSearchDevice, IntPtr pUserData, IntPtr szLocalIp);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopSearchDevices(IntPtr lSearchHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DownloadRemoteFile(IntPtr lLoginID, ref NET_IN_DOWNLOAD_REMOTE_FILE pInParam, ref NET_OUT_DOWNLOAD_REMOTE_FILE pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DoFindFaceRecognitionRecordEx(ref NET_IN_DOFIND_FACERECONGNITIONRECORD_EX pstInParam, ref NET_OUT_DOFIND_FACERECONGNITIONRECORD_EX pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_FaceRecognitionPutDisposition(IntPtr lLoginID, IntPtr pstInParam, IntPtr pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_FaceRecognitionDelDisposition(IntPtr lLoginID, ref NET_IN_FACE_RECOGNITION_DEL_DISPOSITION_INFO pstInParam, ref NET_OUT_FACE_RECOGNITION_DEL_DISPOSITION_INFO pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryChannelName(IntPtr lLoginID, IntPtr pChannelName, int maxlen, ref int nChannelCount, int waittime = 1000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_FaceInfoOpreate(IntPtr lLoginID, EM_FACEINFO_OPREATE_TYPE emType, IntPtr pInParam, IntPtr pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartFindFaceInfo(IntPtr lLoginID, ref NET_IN_FACEINFO_START_FIND pstIn, ref NET_OUT_FACEINFO_START_FIND pstOut, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DoFindFaceInfo(IntPtr lFindHandle, ref NET_IN_FACEINFO_DO_FIND pstIn, ref NET_OUT_FACEINFO_DO_FIND pstOut, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopFindFaceInfo(IntPtr lFindHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_ModifyDevice(ref DEVICE_NET_INFO_EX pDevNetInfo, uint dwWaitTime, ref int iError, string szLocalIp, IntPtr reserved);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetDeviceSearchParam(ref NET_DEVICE_SEARCH_PARAM pstParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetDevConfig(IntPtr lLoginID, uint dwCommand, int lChannel, IntPtr lpOutBuffer, uint dwOutBufferSize, ref uint bytesReturned, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetDevConfig(IntPtr lLoginID, uint dwCommand, int lChannel, IntPtr lpInBuffer, uint dwInBufferSize, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_DownloadByRecordFile(IntPtr lLoginID, ref NET_RECORDFILE_INFO lpRecordFile, string sSavedFileName, fDownLoadPosCallBack cbDownLoadPos, IntPtr dwUserData, bool bUseUTCTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_RebootDev(IntPtr lLoginID);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_Attendance_AddUser(IntPtr lLoginID, ref NET_IN_ATTENDANCE_ADDUSER pstuInAddUser, ref NET_OUT_ATTENDANCE_ADDUSER pstuOutAddUser, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_Attendance_DelUser(IntPtr lLoginID, ref NET_IN_ATTENDANCE_DELUSER pstuInDelUser, ref NET_OUT_ATTENDANCE_DELUSER pstuOutDelUser, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_Attendance_ModifyUser(IntPtr lLoginID, ref NET_IN_ATTENDANCE_ModifyUSER pstuInModifyUser, ref NET_OUT_ATTENDANCE_ModifyUSER pstuOutModifyUser, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_Attendance_GetUser(IntPtr lLoginID, ref NET_IN_ATTENDANCE_GetUSER pstuInGetUser, ref NET_OUT_ATTENDANCE_GetUSER pstuOutGetUser, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_Attendance_FindUser(IntPtr lLoginID, ref NET_IN_ATTENDANCE_FINDUSER pstuInFindUser, ref NET_OUT_ATTENDANCE_FINDUSER pstuOutFindUser, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_Attendance_InsertFingerByUserID(IntPtr lLoginID, ref NET_IN_FINGERPRINT_INSERT_BY_USERID pstuInInsert, ref NET_OUT_FINGERPRINT_INSERT_BY_USERID pstuOutInsert, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_Attendance_RemoveFingerByUserID(IntPtr lLoginID, ref NET_CTRL_IN_FINGERPRINT_REMOVE_BY_USERID pstuInRemove, ref NET_CTRL_OUT_FINGERPRINT_REMOVE_BY_USERID pstuOutRemove, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_Attendance_GetFingerByUserID(IntPtr lLoginID, ref NET_IN_FINGERPRINT_GETBYUSER pstuIn, ref NET_OUT_FINGERPRINT_GETBYUSER pstuOut, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachMotionData(IntPtr lLoginID, ref NET_IN_ATTACH_MOTION_DATA pstInParam, ref NET_OUT_ATTACH_MOTION_DATA pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachMotionData(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SearchDevicesByIPs(ref NET_DEVICE_IP_SEARCH_INFO pIpSearchInfo, fSearchDevicesCB cbSearchDevices, IntPtr dwUserData, string szLocalIp, uint dwWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_InitDevAccount(ref NET_IN_INIT_DEVICE_ACCOUNT pInitAccountIn, ref NET_OUT_INIT_DEVICE_ACCOUNT pInitAccountOut, uint dwWaitTime, string szLocalIp);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetDevCaps(IntPtr lLoginID, int nType, IntPtr pInBuf, IntPtr pOutBuf, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_ListenServer(string ip, ushort port, int nTimeout, fServiceCallBack cbListen, IntPtr dwUserData);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopListenServer(IntPtr lServerHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryProductionDefinition(IntPtr lLoginID, ref NET_PRODUCTION_DEFNITION pstuProdDef, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachCameraState(IntPtr lLoginID, ref NET_IN_CAMERASTATE pstInParam, ref NET_OUT_CAMERASTATE pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachCameraState(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetSoftwareVersion(IntPtr lLoginID, ref NET_IN_GET_SOFTWAREVERSION_INFO pstInParam, ref NET_OUT_GET_SOFTWAREVERSION_INFO pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetDeviceType(IntPtr lLoginID, ref NET_IN_GET_DEVICETYPE_INFO pstInParam, ref NET_OUT_GET_DEVICETYPE_INFO pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_LogOpen(ref NET_LOG_SET_PRINT_INFO pstLogPrintInfo);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_Attendance_GetFingerRecord(IntPtr lLoginID, ref NET_CTRL_IN_FINGERPRINT_GET pstuInGet, ref NET_CTRL_OUT_FINGERPRINT_GET pstuOutGet, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_Attendance_RemoveFingerRecord(IntPtr lLoginID, ref NET_CTRL_IN_FINGERPRINT_REMOVE pstuInRemove, ref NET_CTRL_OUT_FINGERPRINT_REMOVE pstuOutRemove, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_AudioDecEx(IntPtr lTalkHandle, IntPtr pAudioDataBuf, uint dwBufSize);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_OperateAccessFingerprintService(IntPtr lLoginID, EM_ACCESS_CTL_FINGERPRINT_SERVICE emtype, IntPtr pstInParam, IntPtr pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_OperateAccessControlManager(IntPtr lLoginID, NET_EM_ACCESS_CTL_MANAGER emtype, IntPtr pstInParam, IntPtr pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_EncryptString(ref NET_IN_ENCRYPT_STRING pInParam, ref NET_OUT_ENCRYPT_STRING pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_DownloadMediaFile(IntPtr lLoginID, EM_FILE_QUERY_TYPE emType, IntPtr lpMediaFileInfo, IntPtr sSavedFileName, fDownLoadPosCallBack cbDownLoadPos, IntPtr dwUserData, IntPtr reserved);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopDownloadMediaFile(IntPtr lFileHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_SCADAAlarmAttachInfo(IntPtr lLoginID, ref NET_IN_SCADA_ALARM_ATTACH_INFO pInParam, ref NET_OUT_SCADA_ALARM_ATTACH_INFO pOutParam, int nWaitTime = 3000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SCADAAlarmDetachInfo(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_SCADAAttachInfo(IntPtr lLoginID, ref NET_IN_SCADA_ATTACH_INFO pInParam, ref NET_OUT_SCADA_ATTACH_INFO pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SCADADetachInfo(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StartFind(IntPtr lLoginID, EM_FIND emType, IntPtr pInBuf, IntPtr pOutBuf, int nWaitTime = 1000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DoFind(IntPtr lLoginID, EM_FIND emType, IntPtr pInBuf, IntPtr pOutBuf, int nWaitTime = 1000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopFind(IntPtr lLoginID, EM_FIND emType, IntPtr pInBuf, IntPtr pOutBuf, int nWaitTime = 1000);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_RadiometryAttach(IntPtr lLoginID, ref NET_IN_RADIOMETRY_ATTACH pInParam, ref NET_OUT_RADIOMETRY_ATTACH pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_RadiometryDetach(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_RadiometryFetch(IntPtr lLoginID, ref NET_IN_RADIOMETRY_FETCH pInParam, ref NET_OUT_RADIOMETRY_FETCH pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_RealPlayByDataType(IntPtr lLoginID, ref NET_IN_REALPLAY_BY_DATA_TYPE pstInParam, ref NET_OUT_REALPLAY_BY_DATA_TYPE pstOutParam, uint dwWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_PlayBackByDataType(IntPtr lLoginID, ref NET_IN_PLAYBACK_BY_DATA_TYPE pstInParam, ref NET_OUT_PLAYBACK_BY_DATA_TYPE pstOutParam, uint dwWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_DownloadByDataType(IntPtr lLoginID, ref NET_IN_DOWNLOAD_BY_DATA_TYPE pstInParam, ref NET_OUT_DOWNLOAD_BY_DATA_TYPE pstOutParam, uint dwWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachPTZStatusProc(IntPtr lLoginID, ref NET_IN_PTZ_STATUS_PROC pstuInPtzStatusProc, ref NET_OUT_PTZ_STATUS_PROC pstuOutPtzStatusProc, int nWaitTime = 3000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachPTZStatusProc(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SubcribeGPS(IntPtr lLoginID, bool bStart, int KeepTime, int InterTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern void CLIENT_SetSubcribeGPSCallBackEX2(fGPSRevEx2 OnGPSMessage, IntPtr dwUser);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachAnalyseTaskState(IntPtr lLoginID, ref NET_IN_ATTACH_ANALYSE_TASK_STATE pInParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachAnalyseTaskState(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_PushAnalysePictureFile(IntPtr lLoginID, IntPtr pInParam, IntPtr pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_PushAnalysePictureFileByRule(IntPtr lLoginID, ref NET_IN_PUSH_ANALYSE_PICTURE_FILE_BYRULE pInParam, ref NET_OUT_PUSH_ANALYSE_PICTURE_FILE_BYRULE pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_AddAnalyseTask(IntPtr lLoginID, EM_DATA_SOURCE_TYPE emDataSourceType, IntPtr pInParam, ref NET_OUT_ADD_ANALYSE_TASK pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_RemoveAnalyseTask(IntPtr lLoginID, ref NET_IN_REMOVE_ANALYSE_TASK pInParam, ref NET_OUT_REMOVE_ANALYSE_TASK pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachAnalyseTaskResult(IntPtr lLoginID, ref NET_IN_ATTACH_ANALYSE_RESULT pInParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachAnalyseTaskResult(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_FindAnalyseTask(IntPtr lLoginID, ref NET_IN_FIND_ANALYSE_TASK pInParam, IntPtr pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetConnectionStatus(IntPtr lLoginID, ref NET_IN_GETCONNECTION_STATUS pInParam, ref NET_OUT_GETCONNECTION_STATUS pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetDefenceArmMode(IntPtr lLoginID, ref NET_IN_GET_DEFENCEMODE pInParam, ref NET_OUT_GET_DEFENCEMODE pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetDefenceArmMode(IntPtr lLoginID, ref NET_IN_SET_DEFENCEMODE pInParam, ref NET_OUT_SET_DEFENCEMODE pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetParkingSpaceLightPlan(IntPtr lLoginID, ref NET_IN_SET_PARKING_SPACE_LIGHT_PLAN pInParam, ref NET_OUT_SET_PARKING_SPACE_LIGHT_PLAN pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_OpenPlayGroup();
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_AddPlayHandleToPlayGroup(ref NET_IN_ADD_PLAYHANDLE_TO_PLAYGROUP pInParam, ref NET_OUT_ADD_PLAYHANDLE_TO_PLAYGROUP pOutParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_PausePlayGroup(IntPtr lPlayGroupHandle, bool bPause);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryPlayGroupTime(ref NET_IN_QUERY_PLAYGROUP_TIME pInParam, ref NET_OUT_QUERY_PLAYGROUP_TIME pOutParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetPlayGroupBaseChannel(ref NET_IN_SET_PLAYGROUP_BASECHANNEL pInParam, ref NET_OUT_SET_PLAYGROUP_BASECHANNEL pOutParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DeleteFromPlayGroup(ref NET_IN_DELETE_FROM_PLAYGROUP pInParam, ref NET_OUT_DELETE_FROM_PLAYGROUP pOutParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_ClosePlayGroup(IntPtr lPlayGroupHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetPlayGroupDirection(ref NET_IN_SET_PLAYGROUP_DIRECTION pInParam, ref NET_OUT_SET_PLAYGROUP_DIRECTION pOutParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetPlayGroupSpeed(ref NET_IN_SET_PLAYGROUP_SPEED pInParam, ref NET_OUT_SET_PLAYGROUP_SPEED pOutParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_FastPlayGroup(IntPtr lPlayGroupHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SlowPlayGroup(IntPtr lPlayGroupHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_NormalPlayGroup(IntPtr lPlayGroupHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartUploadRemoteFile(IntPtr lLoginID, ref NET_IN_UPLOAD_REMOTE_FILE pInParam, ref NET_OUT_UPLOAD_REMOTE_FILE pOutParam, fUploadFileCallBack cbUploadFile, IntPtr dwUser);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopUploadRemoteFile(IntPtr lUploadFileID);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_TagManagerStartTag(IntPtr lLoginID, ref NET_IN_TAGMANAGER_STARTTAG_INFO pInParam, ref NET_OUT_TAGMANAGER_STARTTAG_INFO pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_TagManagerGetTagState(IntPtr lLoginID, ref NET_IN_TAGMANAGER_GETTAGSTATE_INFO pInParam, ref NET_OUT_TAGMANAGER_GETTAGSTATE_INFO pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_TagManagerStartFind(IntPtr lLoginID, ref NET_IN_TAGMANAGER_STARTFIND_INFO pInParam, ref NET_OUT_TAGMANAGER_STARTFIND_INFO pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_TagManagerDoFind(IntPtr lLoginID, ref NET_IN_TAGMANAGER_DOFIND_INFO pInParam, ref NET_OUT_TAGMANAGER_DOFIND_INFO pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_TagManagerStopFind(IntPtr lLoginID);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_TagManagerGetCaps(IntPtr lLoginID, ref NET_IN_TAGMANAGER_GETCAPS_INFO pInParam, ref NET_OUT_TAGMANAGER_GETCAPS_INFO pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_TagManagerStopTag(IntPtr lLoginID, ref NET_IN_TAGMANAGER_STOPTAG_INFO pInParam, ref NET_OUT_TAGMANAGER_STOPTAG_INFO pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_OperateAccessUserService(IntPtr lLoginID, EM_ACCESS_CTL_USER_SERVICE emtype, IntPtr pstInParam, IntPtr pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_OperateAccessCardService(IntPtr lLoginID, EM_ACCESS_CTL_CARD_SERVICE emtype, IntPtr pstInParam, IntPtr pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_LoginWithHighLevelSecurity(ref NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstInParam, ref NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetHumanRadioCaps(IntPtr lLoginID, ref NET_IN_GET_HUMAN_RADIO_CAPS pInParam, ref NET_OUT_GET_HUMAN_RADIO_CAPS pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_AsyncAddCustomDevice(IntPtr lLoginID, ref NET_IN_ASYNC_ADD_CUSTOM_DEVICE pInParam, ref NET_OUT_ASYNC_ADD_CUSTOM_DEVICE pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_RemoveDevice(IntPtr lLoginID, IntPtr pInParam, IntPtr pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern void CLIENT_SetGDPREnable(bool bEnable);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_PTZSetPanGroupLimit(IntPtr lLoginID, ref NET_IN_PAN_GROUP_LIMIT_INFO pstInParam, ref NET_OUT_PAN_GROUP_LIMIT_INFO pstOutParam, uint dwWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_PTZSetPanGroup(IntPtr lLoginID, ref NET_IN_SET_PAN_GROUP_PARAM pInParam, ref NET_OUT_SET_PAN_GROUP_PARAM pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_PTZGetPanGroup(IntPtr lLoginID, ref NET_IN_GET_PAN_GROUP_PARAM pInParam, ref NET_OUT_GET_PAN_GROUP_PARAM pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_FaceOpenDoor(IntPtr lLoginID, ref NET_IN_FACE_OPEN_DOOR pInParam, ref NET_OUT_FACE_OPEN_DOOR pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_LoadOffLineFile(IntPtr lLoginID, int nChannelID, uint dwAlarmType, NET_TIME_EX lpStartTime, NET_TIME_EX lpEndTime, fAnalyzerDataCallBack cbAnalyzerData, IntPtr dwUser);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetFramePlayBack(IntPtr lPlayHandle, ref int fileframerate, ref int playframerate);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetFramePlayBack(IntPtr lPlayHandle, int framerate);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryDevLogCount(IntPtr lLoginID, ref NET_IN_GETCOUNT_LOG_PARAM pInParam, ref NET_OUT_GETCOUNT_LOG_PARAM pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartQueryLog(IntPtr lLoginID, ref NET_IN_START_QUERYLOG pInParam, ref NET_OUT_START_QUERYLOG pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryNextLog(IntPtr lLoginID, ref NET_IN_QUERYNEXTLOG pInParam, ref NET_OUT_QUERYNEXTLOG pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopQueryLog(IntPtr lLoginID);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartUpgradeEx(IntPtr lLoginID, EM_UPGRADE_TYPE emType, string pchFileName, fUpgradeCallBack cbUpgrade, IntPtr dwUser);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_ResetSystem(IntPtr lLoginID, ref NET_IN_RESET_SYSTEM pInParam, ref NET_OUT_RESET_SYSTEM pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_ResetSystemEx(IntPtr lLoginID, ref NET_IN_RESET_SYSTEM_EX pInParam, ref NET_OUT_RESET_SYSTEM_EX pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SendUpgrade(IntPtr lUpgradeID);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopUpgrade(IntPtr lUpgradeID);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartFindUserInfo(IntPtr lLoginID, ref NET_IN_USERINFO_START_FIND pstIn, ref NET_OUT_USERINFO_START_FIND pstOut, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DoFindUserInfo(IntPtr lFindHandle, ref NET_IN_USERINFO_DO_FIND pstIn, ref NET_OUT_USERINFO_DO_FIND pstOut, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopFindUserInfo(IntPtr lFindHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartFindCardInfo(IntPtr lLoginID, ref NET_IN_CARDINFO_START_FIND pstIn, ref NET_OUT_CARDINFO_START_FIND pstOut, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DoFindCardInfo(IntPtr lFindHandle, ref NET_IN_CARDINFO_DO_FIND pstIn, ref NET_OUT_CARDINFO_DO_FIND pstOut, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopFindCardInfo(IntPtr lFindHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_OperateAccessFaceService(IntPtr lLoginID, EM_NET_ACCESS_CTL_FACE_SERVICE emtype, IntPtr pstInParam, IntPtr pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartSearchDevicesEx(ref NET_IN_STARTSERACH_DEVICE pstIn, ref NET_OUT_STARTSERACH_DEVICE pstOut);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachRadarAlarmPointInfo(IntPtr lLoginID, ref NET_IN_RADAR_ALARMPOINTINFO pstInParam, ref NET_OUT_RADAR_ALARMPOINTINFO pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachRadarAlarmPointInfo(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_RadarOperate(IntPtr lLoginID, EM_RADAR_OPERATE_TYPE emType, IntPtr pInBuf, IntPtr pOutBuf, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_AddRadarLinkSD(IntPtr lLoginID, ref NET_IN_RADAR_ADD_RADARLINKSD pstInParam, ref NET_OUT_RADAR_ADD_RADARLINKSD pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DelRadarLinkSD(IntPtr lLoginID, ref NET_IN_RADAR_DEL_RADARLINKSD pstInParam, ref NET_OUT_RADAR_DEL_RADARLINKSD pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetRadarLinkSDState(IntPtr lLoginID, ref NET_IN_RADAR_GET_LINKSTATE pstInParam, ref NET_OUT_RADAR_GET_LINKSTATE pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryIOControlState(IntPtr lLoginID, EM_NET_IOTYPE emType, IntPtr pState, int maxlen, ref int nIOCount, int waittime = 1000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_IOControl(IntPtr lLoginID, EM_NET_IOTYPE emType, IntPtr pState, int maxlen);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SCADAGetAttributeInfo(IntPtr lLoginID, IntPtr pstInParam, IntPtr pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetFloorInfo(IntPtr lLoginID, ref NET_IN_GET_FLOOR_INFO pstInParam, ref NET_OUT_GET_FLOOR_INFO pstOutParam, uint dwWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachCustomSnapInfo(IntPtr lLoginID, ref NET_IN_ATTACH_CUSTOM_SNAP_INFO pstInParam, ref NET_OUT_ATTACH_CUSTOM_SNAP_INFO pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachCustomSnapInfo(IntPtr lFindHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_OperateMonitorWall(IntPtr lLoginID, NET_MONITORWALL_OPERATE_TYPE emType, IntPtr pInParam, IntPtr pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_MonitorWallGetScene(IntPtr lLoginID, ref NET_A_IN_MONITORWALL_GET_SCENE pInParam, ref NET_A_OUT_MONITORWALL_GET_SCENE pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetDeviceSerialNo(IntPtr lLoginID, ref NET_IN_GET_DEVICESERIALNO_INFO pstInParam, ref NET_OUT_GET_DEVICESERIALNO_INFO pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetMachineName(IntPtr lLoginID, ref NET_IN_GET_MACHINENAME_INFO pstInParam, ref NET_OUT_GET_MACHINENAME_INFO pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachBusState(IntPtr lLoginID, ref NET_IN_BUS_ATTACH pstuInBus, ref NET_OUT_BUS_ATTACH pstuOutBus, int nWaitTime = 3000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachBusState(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetPlayBackSpeed(IntPtr lPlayHandle, EM_PLAY_BACK_SPEED emSpeed);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetMarkFileByTime(IntPtr lLoginID, ref NET_IN_SET_MARK_FILE_BY_TIME pInParam, ref NET_OUT_SET_MARK_FILE_BY_TIME pOutParam, int nWaitTime = 1000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetMarkInfo(IntPtr lLoginID, ref NET_IN_GET_MARK_INFO pInParam, ref NET_OUT_GET_MARK_INFO pOutParam, int nWaitTime = 1000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetRecordState(IntPtr lLoginID, ref NET_IN_GET_RECORD_STATE pInParam, ref NET_OUT_GET_RECORD_STATE pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetCourseRecordState(IntPtr lLoginID, ref NET_IN_SET_COURSE_RECORD_STATE pInParam, ref NET_OUT_SET_COURSE_RECORD_STATE pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetVideoEncodeBitrate(IntPtr lLoginID, ref NET_IN_GET_VIDEO_ENCODE_BITRATE_INFO pInParam, ref NET_OUT_GET_VIDEO_ENCODE_BITRATE_INFO pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_RemotePreUploadFile(IntPtr lLoginID, ref NET_IN_REMOTE_PREUPLOAD_FILE pInParam, ref NET_OUT_REMOTE_PREUPLOAD_FILE pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartRemoteUploadFile(IntPtr lLoginID, ref NET_IN_REMOTE_UPLOAD_FILE pInParam, ref NET_OUT_REMOTE_UPLOAD_FILE pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopRemoteUploadFile(IntPtr lRemoteUploadFileID);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_RemoteList(IntPtr lLoginID, ref NET_IN_REMOTE_LIST pInParam, ref NET_OUT_REMOTE_LIST pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_RemoteRemoveFiles(IntPtr lLoginID, ref NET_IN_REMOTE_REMOVE_FILES pInParam, ref NET_OUT_REMOTE_REMOVE_FILES pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_PreUploadRemoteFile(IntPtr lLoginID, ref NET_IN_PRE_UPLOAD_REMOTE_FILE pInParam, ref NET_OUT_PRE_UPLOAD_REMOTE_FILE pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_UploadRemoteFile(IntPtr lLoginID, ref NET_IN_UPLOAD_REMOTE_FILE pInParam, ref NET_OUT_UPLOAD_REMOTE_FILE pOutParam, int nWaitTime = 1000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_ListRemoteFile(IntPtr lLoginID, ref NET_IN_LIST_REMOTE_FILE pInParam, ref NET_OUT_LIST_REMOTE_FILE pOutParam, int nWaitTime = 1000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_RemoveRemoteFiles(IntPtr lLoginID, ref NET_IN_REMOVE_REMOTE_FILES pInParam, ref NET_OUT_REMOVE_REMOTE_FILES pOutParam, int nWaitTime = 1000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StartMultiFindFaceRecognitionRecord(IntPtr lLoginID, ref NET_IN_STARTMULTIFIND_FACERECONGNITIONRECORD pInParam, ref NET_OUT_STARTMULTIFIND_FACERECONGNITIONRECORD pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DoFindFaceRecognitionRecord(ref NET_IN_DOFIND_FACERECONGNITIONRECORD pstInParam, ref NET_OUT_DOFIND_FACERECONGNITIONRECORD pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopFindFaceRecognitionRecord(IntPtr lFindHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartService(uint wPort, IntPtr pIp = new IntPtr(), fServiceCallBack pfscb = null, uint dwTimeOut = 0xffffffff, IntPtr dwUserData = new IntPtr());
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_MatrixAddCamerasByGroup(IntPtr lLoginID, ref NET_IN_ADD_LOGIC_BYGROUP_CAMERA pInParam, ref NET_OUT_ADD_LOGIC_BYGROUP_CAMERA pOutParam, int nWaitTime = 1000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_MatrixGetCameraAllByGroup(IntPtr lLoginID, ref NET_IN_GET_CAMERA_ALL_BY_GROUP pInParam, ref NET_OUT_GET_CAMERA_ALL_BY_GROUP pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_MatrixDeleteCameraByGroup(IntPtr lLoginID, ref NET_IN_DELETE_CAMERA_BY_GROUP pInParam, ref NET_OUT_DELETE_CAMERA_BY_GROUP pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartBurnSession(IntPtr lLoginID, ref NET_IN_START_BURN_SESSION pstInParam, ref NET_OUT_START_BURN_SESSION pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopBurnSession(IntPtr lBurnSession);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StartBurn(IntPtr lBurnSession, ref NET_IN_START_BURN pstInParam, ref NET_OUT_START_BURN pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopBurn(IntPtr lBurnSession);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_PauseBurn(IntPtr lBurnSession, bool bPause);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachBurnState(IntPtr lLoginID, ref NET_IN_ATTACH_STATE pstInParam, ref NET_OUT_ATTACH_STATE pstOutParam, int nWaitTime = 1000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachBurnState(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_BurnMarkTag(IntPtr lBurnSession, ref NET_IN_BURN_MARK_TAG pstInParam, ref NET_OUT_BURN_MARK_TAG pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_BurnGetState(IntPtr lBurnSession, ref NET_IN_BURN_GET_STATE pstInParam, ref NET_OUT_BURN_GET_STATE pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StartBackupTask(IntPtr lLoginID, ref NET_IN_START_BACKUP_TASK_INFO pstInParam, ref NET_OUT_START_BACKUP_TASK_INFO pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachBackupTaskState(IntPtr lLoginID, ref NET_IN_ATTACH_BACKUP_STATE pstInParam, ref NET_OUT_ATTACH_BACKUP_STATE pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachBackupTaskState(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_RealPlayEx2(IntPtr lLoginID, ref NET_IN_REALPLAY pInParam, ref NET_OUT_REALPLAY pOutParam, uint dwWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern void CLIENT_RigisterDrawFun(fDrawCallBack cbDraw, IntPtr dwUser);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_MatchTwoFaceImage(IntPtr lLoginID, ref NET_MATCH_TWO_FACE_IN pstInParam, ref NET_MATCH_TWO_FACE_OUT pstOutParam, int nWaitTime = 3000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetMonitorWallCollections(IntPtr lLoginID, ref NET_IN_WM_GET_COLLECTIONS pInParam, ref NET_OUT_WM_GET_COLLECTIONS pOutParam, int nWaitTime = 1000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_LoadMonitorWallCollection(IntPtr lLoginID, ref NET_IN_WM_LOAD_COLLECTION pInParam, ref NET_OUT_WM_LOAD_COLLECTION pOutParam, int nWaitTime = 1000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SaveMonitorWallCollection(IntPtr lLoginID, ref NET_IN_WM_SAVE_COLLECTION pInParam, ref NET_OUT_WM_SAVE_COLLECTION pOutParam, int nWaitTime = 1000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_RenameMonitorWallCollection(IntPtr lLoginID, ref NET_IN_WM_RENAME_COLLECTION pInParam, ref NET_OUT_WM_RENAME_COLLECTION pOutParam, int nWaitTime = 1000);
        ///@brief web信息上传接口:该接口淘汰,请使用 CLIENT_TransmitInfoForWebEx
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_TransmitInfoForWebEx(IntPtr lLoginID, ref NET_IN_TRANSMIT_INFO pInParam, ref NET_OUT_TRANSMIT_INFO pOutParam, int nWaittime = 3000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_FindRecordBackupRestoreTaskInfos(IntPtr lLoginID, ref NET_IN_FIND_REC_BAK_RST_TASK pInParam, ref NET_OUT_FIND_REC_BAK_RST_TASK pOutParam, int nWaitTime = 3000);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetExamRecordingPlans(IntPtr lLoginID, ref NET_IN_SET_EXAM_RECORDING_PLANS pstuInParam, ref NET_OUT_SET_EXAM_RECORDING_PLANS pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_ManualSnap(IntPtr lLoginID, ref NET_IN_MANUAL_SNAP pInParam, ref NET_OUT_MANUAL_SNAP pOutParam, int nWaitTime);
        /// <summary>
        /// 获取流量统计信息,pstInParam与pstOutParam内存由用户申请释放
        /// start find flux state,user malloc and free (pstInParam's and pstOutParam's) memory
        /// </summary>
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartFindFluxStat(IntPtr lLoginID, ref NET_IN_TRAFFICSTARTFINDSTAT pstInParam, ref NET_OUT_TRAFFICSTARTFINDSTAT pstOutParam);
        /// <summary>
        /// 继续查询流量统计,pstInParam与pstOutParam内存由用户申请释放
        /// do find flux state,user malloc and free (pstInParam's and pstOutParam's) memory
        /// </summary>
        [DllImport(LIBRARYNETSDK)]
        public static extern int CLIENT_DoFindFluxStat(IntPtr lFindHandle, ref NET_IN_TRAFFICDOFINDSTAT pstInParam, ref NET_OUT_TRAFFICDOFINDSTAT pstOutParam);
        /// <summary>
        /// 结束查询流量统计
        /// stop find flux state
        /// </summary>
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopFindFluxStat(IntPtr lFindHandle);
        // <summary>
        /// 添加人脸库下载任务
        /// Add task of download face data base
        /// </summary>
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_AddFaceDbDownLoadTask(IntPtr lLoginID, ref NET_IN_ADD_FACEDB_DOWNLOAD_TASK pInParam, ref NET_OUT_ADD_FACEDB_DOWNLOAD_TASK pOutParam, int nWaitTime);
        /// <summary>
        /// 订阅人脸库下载结果
        /// Attach the result of downloading face data base
        /// </summary>
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachFaceDbDownLoadResult(IntPtr lLoginID, ref NET_IN_ATTACH_FACEDB_DOWNLOAD_RESULT pInParam, ref NET_OUT_ATTACH_FACEDB_DOWNLOAD_RESULT pOutParam, int nWaitTime);
        /// <summary>
        /// 取消订阅人脸库下载结果 lAttachHandle为 CLIENT_AttachFaceDbDownLoadResult 接口的返回值
        /// Detach Attach the result of downloading face data base
        /// </summary>
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachFaceDbDownLoadResult(IntPtr lAttachHandle);
        /// <summary>
        /// 设置解码窗口输出OSD信息扩展接口(pInparam, pOutParam内存由用户申请释放)
        /// set splite output OSD info ----expand interface (the memory of pInParam and pOutParam applyed and released by user),user malloc and free (pInParam's and pOutParam's)memory
        /// </summary>
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetSplitOSDEx(IntPtr lLoginID, ref NET_IN_SPLIT_SET_OSD_EX pInParam, ref NET_OUT_SPLIT_SET_OSD_EX pOutParam, int nWaitTime);
        /// <summary>
        /// 获取解码窗口输出OSD信息扩展接口(pInparam, pOutParam内存由用户申请释放)
        /// get splite output OSD info ----expand interface (the memory of pInParam and pOutParam applyed and released by user),user malloc and free (pInParam's and pOutParam's)memory
        /// </summary>
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetSplitOSDEx(IntPtr lLoginID, ref NET_IN_SPLIT_GET_OSD_EX pInParam, ref NET_OUT_SPLIT_GET_OSD_EX pOutParam, int nWaitTime);
        /// <summary>
        /// 设置解码窗口输出OSD信息扩展接口(pInparam, pOutParam内存由用户申请释放)
        /// set splite output OSD info ----expand interface (the memory of pInParam and pOutParam applyed and released by user),user malloc and free (pInParam's and pOutParam's)memory
        /// </summary>
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetSplitOSDEx(IntPtr lLoginID, IntPtr pInParam, IntPtr pOutParam, int nWaitTime);
        /// <summary>
        /// 获取解码窗口输出OSD信息扩展接口(pInparam, pOutParam内存由用户申请释放)
        /// get splite output OSD info ----expand interface (the memory of pInParam and pOutParam applyed and released by user),user malloc and free (pInParam's and pOutParam's)memory
        /// </summary>
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetSplitOSDEx(IntPtr lLoginID, IntPtr pInParam, IntPtr pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_CheckCloudUpgrader(IntPtr lLoginID, ref NET_IN_CHECK_CLOUD_UPGRADER pInParam, ref NET_OUT_CHECK_CLOUD_UPGRADER pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_ExecuteCloudUpgrader(IntPtr lLoginID, ref NET_IN_EXECUTE_CLOUD_UPGRADER pInParam, ref NET_OUT_EXECUTE_CLOUD_UPGRADER pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetCloudUpgraderState(IntPtr lLoginID, ref NET_IN_GET_CLOUD_UPGRADER_STATE pInParam, ref NET_OUT_GET_CLOUD_UPGRADER_STATE pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_FaceRecognitionDetectMultiFace(IntPtr lLoginID, IntPtr pstInParam, ref NET_OUT_FACE_RECOGNITION_DETECT_MULTI_FACE_INFO pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachDetectMultiFaceState(IntPtr lLoginID, ref NET_IN_MULTIFACE_DETECT_STATE pstInParam, ref NET_OUT_MULTIFACE_DETECT_STATE pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachDetectMultiFaceState(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StartMultiPersonFindFaceR(IntPtr lLoginID, ref NET_IN_STARTMULTIPERSONFIND_FACER pstInParam, ref NET_OUT_STARTMULTIPERSONFIND_FACER pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_FaceRServerGetDetectToken(IntPtr lLoginID, ref NET_IN_FACERSERVER_GETDETEVTTOKEN pInParam, ref NET_OUT_FACERSERVER_GETDETEVTTOKEN pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetFileAlias(IntPtr lLoginID, ref NET_IN_SET_FILE_ALIAS_INFO pstuInParam, ref NET_OUT_SET_FILE_ALIAS_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SearchFileByAlias(IntPtr lLoginID, ref NET_IN_SEARCH_FILE_BYALIAS_INFO pstuInParam, ref NET_OUT_SEARCH_FILE_BYALIAS_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_GetWaterDataStatServerCaps(IntPtr lLoginID, ref NET_IN_WATERDATA_STAT_SERVER_GETCAPS_INFO pstuInParam, ref NET_OUT_WATERDATA_STAT_SERVER_GETCAPS_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartFindWaterDataStatServer(IntPtr lLoginID, ref NET_IN_START_FIND_WATERDATA_STAT_SERVER_INFO pstuInParam, ref NET_OUT_START_FIND_WATERDATA_STAT_SERVER_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_DoFindWaterDataStatServer(IntPtr lLoginID, ref NET_IN_DO_FIND_WATERDATA_STAT_SERVER_INFO pstuInParam, ref NET_OUT_DO_FIND_WATERDATA_STAT_SERVER_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StopFindWaterDataStatServer(IntPtr lLoginID, ref NET_IN_STOP_FIND_WATERDATA_STAT_SERVER_INFO pstuInParam, ref NET_OUT_STOP_FIND_WATERDATA_STAT_SERVER_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_GetWaterDataStatServerWaterData(IntPtr lLoginID, ref NET_IN_WATERDATA_STAT_SERVER_GETDATA_INFO pstuInParam, ref NET_OUT_WATERDATA_STAT_SERVER_GETDATA_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetUnifiedStatus(IntPtr lLoginID, ref NET_IN_UNIFIEDINFOCOLLECT_GET_DEVSTATUS pInParam, ref NET_OUT_UNIFIEDINFOCOLLECT_GET_DEVSTATUS pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetAlarmRegionInfo(IntPtr lLoginID, EM_A_NET_EM_GET_ALARMREGION_INFO emType, IntPtr pstuInParam, IntPtr pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachVideoStatStream(IntPtr lLoginID, ref NET_IN_ATTACH_VIDEOSTAT_STREAM pInParam, ref NET_OUT_ATTACH_VIDEOSTAT_STREAM pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachVideoStatStream(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_BatchAppendFaceRecognition(IntPtr lLoginID, ref NET_IN_BATCH_APPEND_FACERECONGNITION pstInParam, ref NET_OUT_BATCH_APPEND_FACERECONGNITION pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetGPSUuidInfo(IntPtr lLoginID, ref NET_IN_SET_GPS_UUID_INFO pInParam, ref NET_OUT_SET_GPS_UUID_INFO pOutParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_ImportFaceDB(IntPtr lLoginID, ref NET_IN_IMPORT_FACE_DB pInParam, ref NET_OUT_IMPORT_FACE_DB pOutParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopImportFaceDB(IntPtr lImportFaceDbHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_ExportFaceDB(IntPtr lLoginID, ref NET_IN_EXPORT_FACE_DB pInParam, ref NET_OUT_EXPORT_FACE_DB pOutParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopExportFaceDB(IntPtr lExportFaceDbHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachEventRestore(IntPtr lLoginID, ref NET_IN_ATTACH_EVENT_RESTORE pInParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachEventRestore(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryRemotDevState(IntPtr lLoginID, int nType, int nChannelID, IntPtr pBuf, int nBufLen, IntPtr pRetLen, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetAlarmRegionInfo(IntPtr lLoginID, EM_A_NET_EM_SET_ALARMREGION_INFO emType, IntPtr pstuInParam, IntPtr pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachLowRateWPAN(IntPtr lLoginID, ref NET_IN_ATTACH_LOWRATEWPAN pstInParam, ref NET_OUT_ATTACH_LOWRATEWPAN pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetPollingConfig(IntPtr lLoginID, IntPtr pInParam, IntPtr pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_TransmitCmd(IntPtr lLoginID, ref NET_IN_TRANSMIT_CMD pstuInParam, ref NET_OUT_TRANSMIT_CMD pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_ManualTest(IntPtr lLoginID, ref NET_IN_MANUAL_TEST pstuInParam, ref NET_OUT_MANUAL_TEST pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_AddAlarmUser(IntPtr lLoginID, ref NET_IN_ADD_ALARM_USER pstuInParam, ref NET_OUT_ADD_ALARM_USER pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_ModifyAlarmUser(IntPtr lLoginID, ref NET_IN_MODIFY_ALARM_USER pstuInParam, ref NET_OUT_MODIFY_ALARM_USER pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_ModifyAlarmUserPassword(IntPtr lLoginID, ref NET_IN_MODIFY_ALARM_USER_PASSWORD pstuInParam, ref NET_OUT_MODIFY_ALARM_USER_PASSWORD pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DeleteAlarmUser(IntPtr lLoginID, ref NET_IN_DELETE_ALARM_USER pstuInParam, ref NET_OUT_DELETE_ALARM_USER pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_RealPlayForSpGdpr(IntPtr lLoginID, ref NET_IN_REALPLAY_FOR_SP_GDPR pInParam, ref NET_OUT_REALPLAY_FOR_SP_GDPR pOutParam, uint dwWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_PlayBackByTimeForSpGdpr(IntPtr lLoginID, int nChannelID, ref NET_TIME lpStartTime, ref NET_TIME lpStopTime, IntPtr hWnd, fDownLoadPosCallBack cbDownLoadPos, IntPtr dwPosUser, fDataCallBack fDownLoadDataCallBack, IntPtr dwDataUser);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetTourSource(IntPtr lLoginID, ref NET_IN_SET_TOUR_SOURCE pInParam, ref NET_OUT_SET_TOUR_SOURCE pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetTourSource(IntPtr lLoginID, ref NET_IN_GET_TOUR_SOURCE pInParam, ref NET_OUT_GET_TOUR_SOURCE pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QuerySystemStatus(IntPtr lLoginID, ref NET_A_SYSTEM_STATUS pstuStatus, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetDisplayRegion(IntPtr lPlayHandle, uint nRegionNum, ref NET_A_DISPLAYRREGION pSrcRect, IntPtr hDestWnd, bool bEnable);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetEncodeBitrate(IntPtr lLoginID, ref NET_IN_GET_ENCODE_BITRATE pstuInParam, ref NET_OUT_GET_ENCODE_BITRATE pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetCourseRecordMode(IntPtr lLoginID, ref NET_IN_GET_COURSE_RECORD_MODE pInBuf, ref NET_OUT_GET_COURSE_RECORD_MODE pOutBuf, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetCourseRecordMode(IntPtr lLoginID, ref NET_IN_SET_COURSE_RECORD_MODE pInBuf, ref NET_OUT_SET_COURSE_RECORD_MODE pOutBuf, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetRealPreviewChannel(IntPtr lLoginID, ref NET_IN_GET_REAL_PREVIEW_CHANNEL pInBuf, ref NET_OUT_GET_REAL_PREVIEW_CHANNEL pOutBuf, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_RadiometryDataParse(ref NET_RADIOMETRY_DATA pRadiometryData, IntPtr pGrayImg, IntPtr pTempForPixels);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetDeviceInfoEx(IntPtr lLoginID, ref NET_IN_GET_DEVICE_INFO_EX pstuInParam, ref NET_OUT_GET_DEVICE_INFO_EX pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetDeviceInfo(IntPtr lLoginID, IntPtr pInParam, IntPtr pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetChannelInfo(IntPtr lLoginID, ref NET_IN_GET_CHANNEL_INFO pInParam, ref NET_OUT_GET_CHANNEL_INFO pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_PTZStartTour(IntPtr lLoginID, ref NET_IN_PTZ_START_TOUR pstuInParam, ref NET_OUT_PTZ_START_TOUR pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_PTZStopTour(IntPtr lLoginID, ref NET_IN_PTZ_STOP_TOUR pstuInParam, ref NET_OUT_PTZ_STOP_TOUR pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_ManualSnapByEvent(IntPtr lLoginID, ref NET_IN_MANUALSNAP_BY_EVENT_INFO pstuInParam, ref NET_OUT_MANUALSNAP_BY_EVENT_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetStorageBoundTime(IntPtr lLoginID, ref NET_IN_GET_STORAGE_BOUND_TIME_INFO pstuInParam, ref NET_OUT_GET_STORAGE_BOUND_TIME_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DeletePersonByCondition(IntPtr lLoginID, ref NET_IN_DELETE_PERSON_BY_CONDITION_INFO pstuInParam, ref NET_OUT_DELETE_PERSON_BY_CONDITION_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartUpgradeEx2(IntPtr lLoginID, EM_UPGRADE_TYPE emType, IntPtr pchFileName, fUpgradeCallBackEx cbUpgrade, IntPtr dwUser);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachThingsInfo(IntPtr lLoginID, ref NET_IN_THINGS_ATTACH pInParam, ref NET_OUT_THINGS_ATTACH pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachThingsInfo(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetThingsDevList(IntPtr lLoginID, ref NET_IN_THINGS_GET_DEVLIST pInParam, ref NET_OUT_THINGS_GET_DEVLIST pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetThingsCaps(IntPtr lLoginID, ref NET_IN_THINGS_GET_CAPS pInParam, ref NET_OUT_THINGS_GET_CAPS pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetThingsConfig(IntPtr lLoginID, ref NET_IN_THINGS_GET pInParam, ref NET_OUT_THINGS_GET pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetThingsConfig(IntPtr lLoginID, ref NET_IN_THINGS_SET pInParam, ref NET_OUT_THINGS_SET pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartRemoteUpgrade(IntPtr lLoginID, ref NET_IN_START_REMOTE_UPGRADE_INFO pInParam, ref NET_OUT_START_REMOTE_UPGRADE_INFO pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopRemoteUpgrade(IntPtr lUpgradeID);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_ThingsServiceOperate(IntPtr lLoginID, EM_THINGS_SERVICE_TYPE emType, IntPtr pInBuf, IntPtr pOutBuf, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_RadiometryGetRandomRegionTemper(IntPtr lLoginID, ref NET_IN_RADIOMETRY_RANDOM_REGION_TEMPER pInParam, ref NET_OUT_RADIOMETRY_RANDOM_REGION_TEMPER pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryDeviceTimeEx(IntPtr lLoginID, ref NET_TIME_EX pDeviceTime, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetupDeviceTimeEx(IntPtr lLoginID, ref NET_TIME_EX pDeviceTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_FocusControl(IntPtr lLoginID, int nChannelID, uint dwFocusCommand, double nFocus, double nZoom, IntPtr reserved, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern void CLIENT_SetDVRMessCallBack(fMessCallBack cbMessage, IntPtr dwUser);
        /*******************PlaySDK*********************/
        [DllImport(LIBRARYPLAYSDK)]
        public static extern bool PLAY_OpenStream(int nPort, IntPtr pFileHeadBuf, uint nSize, uint nBufPoolSize);
        [DllImport(LIBRARYPLAYSDK)]
        public static extern bool PLAY_Play(int nPort, IntPtr hWnd);
        [DllImport(LIBRARYPLAYSDK)]
        public static extern bool PLAY_InputData(int nPort, IntPtr pBuf, uint nSize);
        [DllImport(LIBRARYPLAYSDK)]
        public static extern bool PLAY_Stop(int nPort);
        [DllImport(LIBRARYPLAYSDK)]
        public static extern bool PLAY_CloseStream(int nPort);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetClassify(IntPtr lLoginID, ref NET_IN_GET_CLASSIFY_INFO pstuInParam, ref NET_OUT_GET_CLASSIFY_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_FindTrainingTask(IntPtr lLoginID, ref NET_IN_FIND_TRAININGTASK_INFO pstuInParam, ref NET_OUT_FIND_TRAININGTASK_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachTrainTask(IntPtr lLoginID, ref NET_IN_ATTACH_TRAIN_TASK_INFO pstuInParam, ref NET_OUT_ATTACH_TRAIN_TASK_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachTrainTask(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetUserInfoAll(IntPtr lLoginID, ref NET_IN_GET_USER_ALL_INFO pstuInParam, ref NET_OUT_GET_USER_ALL_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartFindAccessFingerprint(IntPtr lLoginID, ref NET_IN_FINGERPRINT_START_FIND_INFO pstuInParam, ref NET_OUT_FINGERPRINT_START_FIND_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DoFindAccessFingerprint(IntPtr lFindHandle, ref NET_IN_FINGERPRINT_DO_FIND_INFO pstuInParam, ref NET_OUT_FINGERPRINT_DO_FIND_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopFindAccessFingerprint(IntPtr lFindHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_TrafficSnapByNetwork(IntPtr lLoginID, int nChannelID, ref NET_IN_SNAPSHOT pstInParam, ref NET_OUT_SNAPSHOT pstOutParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetSplitWindowsInfo(IntPtr lLoginID, IntPtr pInParam, IntPtr pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetSplitTopWindow(IntPtr lLoginID, ref NET_IN_SPLIT_SET_TOP_WINDOW pInParam, ref NET_OUT_SPLIT_SET_TOP_WINDOW pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_CloseSplitWindow(IntPtr lLoginID, ref NET_IN_SPLIT_CLOSE_WINDOW pInParam, ref NET_OUT_SPLIT_CLOSE_WINDOW pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetIVSEventDetail(IntPtr lLoginID, ref NET_IN_GET_IVSEVENT_DETAIL_INFO pstuInParam, ref NET_OUT_GET_IVSEVENT_DETAIL_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DownloadPieceFile(IntPtr lLoginID, ref NET_IN_DOWNLOAD_PIECE_FILE pInParam, ref NET_OUT_DOWNLOAD_PIECE_FILE pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetHeatMapsDirectly(IntPtr lLoginID, ref NET_IN_GET_HEATMAPS_INFO pInParam, ref NET_OUT_GET_HEATMAPS_INFO pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_AddMission(IntPtr lLoginID, ref NET_IN_ADD_MISSION pstInParam, ref NET_OUT_ADD_MISSION pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_QueryNetStat(IntPtr lLoginID, EM_NET_QUERY_TYPE emType, IntPtr lpInParam, int nInParamLen, IntPtr lpOutParam, int nOutParamLen, IntPtr pError, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetConfigPartly(IntPtr lLoginID, NET_EM_CFGPARTLY_OPERATE_TYPE emCfgOpType, ref NET_CFGPARTLY_OPERATE_FILTER pstuFilter, IntPtr lpOutBuffer, int nOutBufferSize, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetHygrothermographInfo(IntPtr lLoginID, ref NET_IN_GET_HYGROTHERMOGRAPH_INFO pInParam, ref NET_OUT_GET_HYGROTHERMOGRAPH_INFO pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachElevatorFloorCounter(IntPtr lLoginID, ref NET_IN_ATTACH_ELEVATOR_FLOOR_COUNTER_INFO pstuInParam, ref NET_OUT_ATTACH_ELEVATOR_FLOOR_COUNTER_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachElevatorFloorCounter(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetNumberStatGroupSummary(IntPtr lLoginID, ref NET_IN_NUMBERSTATGROUPSUMMARY_INFO pInParam, ref NET_OUT_NUMBERSTATGROUPSUMMARY_INFO pOutParam, int waittime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_MonitorWallGetWindowInfo(IntPtr lLoginID, ref NET_IN_MW_GET_WINODW_INFO pInParam, ref NET_OUT_MW_GET_WINDOW_INFO pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_AccessControlCaptureNewCard(IntPtr lLoginID, ref NET_IN_ACCESSCONTROL_CAPTURE_NEWCARD pInParam, ref NET_OUT_ACCESSCONTROL_CAPTURE_NEWCARD pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetGroupInfoForChannel(IntPtr lLoginID, ref NET_IN_SET_GROUPINFO_FOR_CHANNEL pstInParam, ref NET_OUT_SET_GROUPINFO_FOR_CHANNEL pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StartAutoCalibrate(IntPtr lLoginID, ref NET_IN_START_AUTO_CALIBRATE pstuInParam, ref NET_OUT_START_AUTO_CALIBRATE pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachCalibrateStatus(IntPtr lLoginID, ref NET_IN_ATTACH_CALIBRATE_STATUS pstuInParam, ref NET_OUT_ATTACH_CALIBRATE_STATUS pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachCalibrateStatus(IntPtr lAttachHandle, ref NET_IN_DETACH_CALIBRATE_STATUS pstuInParam, ref NET_OUT_DETACH_CALIBRATE_STATUS pstuOutParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetSplitWindowRect(IntPtr lLoginID, ref NET_IN_SPLIT_SET_RECT pInParam, ref NET_OUT_SPLIT_SET_RECT pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetSplitSource(IntPtr lLoginID, int nChannel, int nWindow, IntPtr pstuSplitSrc, int nMaxCount, ref int nRetCount, int nWaitTime);
         [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetTemporaryToken(IntPtr lLoginID, ref NET_IN_GET_TEMPORARY_TOKEN pstuInParam, ref NET_OUT_GET_TEMPORARY_TOKEN pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetSubBusinessCaps(IntPtr lLoginID, ref NET_IN_GET_SUBBIZ_CAPS pInParam, ref NET_OUT_GET_SUBBIZ_CAPS pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_CreateSubBusinessModule(ref NET_IN_CREAT_SUB_BUSINESS_MDL_INFO pInParam, ref NET_OUT_CREAT_SUB_BUSINESS_MDL_INFO pOutParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_StartSubLinkListenServer(ref NET_IN_START_SUBLINK_LISTEN_SERVER pInParam, ref NET_OUT_START_SUBLINK_LISTEN_SERVER pOutParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_TransferSubLinkInfo(IntPtr lLoginID, ref NET_IN_TRANSFER_SUBLINK_INFO pInParam, ref NET_OUT_TRANSFER_SUBLINK_INFO pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetTransmitTunnelParam(ref NET_IN_SET_TRANSMITTUNNEL_PARAM pInParam, ref NET_OUT_SET_TRANSMITTUNNEL_PARAM pOutParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_CreateTransmitTunnel(IntPtr lSubBizHandle, ref NET_IN_CREATE_TRANSMIT_TUNNEL pInParam, ref NET_OUT_CREATE_TRANSMIT_TUNNEL pOutParam);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DestroyTransmitTunnel(IntPtr lTransmitHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DestroySubBusinessModule(IntPtr lSubBizHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopSubLinkListenServer(IntPtr lListenServer);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_RadiometryGetCurrentHotColdSpotInfo(IntPtr lLoginID, ref NET_IN_RADIOMETRY_CURRENTHOTCOLDSPOT_INFO pInParam, ref NET_OUT_RADIOMETRY_CURRENTHOTCOLDSPOT_INFO pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_AccessControlCaptureCmd(IntPtr lLoginID, ref NET_IN_ACCESSCONTROL_CAPTURE_CMD pInParam, ref NET_OUT_ACCESSCONTROL_CAPTURE_CMD pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_SetPersonInfoInputResult(IntPtr lLoginID, ref NET_IN_PERSON_INFO_INPUT_RESULT pInParam, ref NET_OUT_PERSON_INFO_INPUT_RESULT pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachIotboxComm(IntPtr lLoginID, ref NET_IN_ATTACH_IOTBOX_COMM pstuInParam, ref NET_OUT_ATTACH_IOTBOX_COMM pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachIotboxComm(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetMobileModuleState(IntPtr lLoginID, ref NET_IN_GET_MOBILE_MODULE_STATE pInParam, ref NET_OUT_GET_MOBILE_MODULE_STATE pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetMobileSIMInfo(IntPtr lLoginID, EM_SIMINFO_TYPE emType, IntPtr pInParam, IntPtr pOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_RPC_NetApp(IntPtr lLoginID, EM_RPC_NETAPP_TYPE emType, IntPtr pstuIn, IntPtr pstuOut, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StartFindDetailNumberStatCluster(IntPtr lLoginID, ref NET_IN_START_FIND_DETAIL_CLUSTER pstInParam, ref NET_OUT_START_FIND_DETAIL_CLUSTER pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DoFindDetailNumberStatCluster(IntPtr lLoginID, IntPtr pstInParam, IntPtr pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopFindDetailNumberStatCluster(IntPtr lLoginID, ref NET_IN_STOP_FIND_DETAIL_CLUSTER_INFO pstInParam, ref NET_OUT_STOP_FIND_DETAIL_CLUSTER_INFO pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachViewRangeState(IntPtr lLoginID, ref NET_IN_VIEW_RANGE_STATE pstuInViewRange, ref NET_OUT_VIEW_RANGE_STATE pstuOutViewRange, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachViewRangeState(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetPeripheralChipPerformanceInfoByID(IntPtr lLoginID, ref NET_IN_GET_CHIP_PERFORMANCE_BYID_INFO pstuInParam, ref NET_OUT_GET_CHIP_PERFORMANCE_BYID_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_UpgraderGetChipList(IntPtr lLoginID, ref NET_IN_UPGRADER_GET_CHIPLIST_INFO pstuInParam, ref NET_OUT_UPGRADER_GET_CHIPLIST_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_GetPeripheralChipStateByID(IntPtr lLoginID, ref NET_IN_GET_CHIP_STATE_BYID_INFO pstuInParam, ref NET_OUT_GET_CHIP_STATE_BYID_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_MakeKeyFrame(IntPtr lLoginID, int nChannelID, int nSubChannel);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_StopService(IntPtr lHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern IntPtr CLIENT_AttachVideoStatistics(IntPtr lLoginID, ref NET_IN_ATTACH_VIDEO_STATISTICS pstInParam, ref NET_OUT_ATTACH_VIDEO_STATISTICS pstOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_DetachVideoStatistics(IntPtr lAttachHandle);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_ManualSendSMS(IntPtr lLoginID, ref NET_IN_MANUAL_SEND_SMS_INFO pstuInParam, ref NET_OUT_MANUAL_SEND_SMS_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_ManualMakeCall(IntPtr lLoginID, ref NET_IN_MANUAL_MAKE_CALL_INFO pstuInParam, ref NET_OUT_MANUAL_MAKE_CALL_INFO pstuOutParam, int nWaitTime);
        [DllImport(LIBRARYNETSDK)]
        public static extern bool CLIENT_TriggerUnifiedInfoCollectAlarm(IntPtr lLoginID, IntPtr pstuInParam, IntPtr pstuOutParam, int nWaitTime);
    }
}
NetSDKCS/Properties/AssemblyInfo.cs
New file
@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("NetSDKCS")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("NetSDKCS")]
[assembly: AssemblyCopyright("Copyright ©  2016")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components.  If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("f652c298-5b28-40d2-8cde-47ef5f0d8677")]
// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
Program.cs
@@ -13,6 +13,7 @@
namespace HH.WCS.Mobox3.AnGang {
    internal class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            //基础设置信息初始化
@@ -22,9 +23,12 @@
            //2.0 开启tcp
            StartTcp();
            //3.0 开启S7
            StartS7();
            //StartS7();
            //4.0 开启Modbus
            StartModbus();
            //StartModbus();
            //开启相机
            StartSnap();
            //5.0 开启线程
            var rc = HostFactory.Run(x =>
@@ -92,18 +96,6 @@
            //        Console.WriteLine("S7ProductionLineHelper," + item.ProductionLine_IP);
            //    }
            //}
            ////称重的S7设备
            //var weightPLCDevice = Settings.WeightDevices;
            //if (weightPLCDevice.Count > 0)
            //{
            //    foreach (var item in weightPLCDevice)
            //    {
            //        new S7Helper(item.WeightDevice_IP, (short)item.WeightDevice_Rack, (short)item.WeightDevice_Slot);
            //        Console.WriteLine("S7WeightDeviceHelper," + item.WeightDevice_Name);
            //    }
            //}
        }
        /// <summary>
@@ -122,6 +114,11 @@
            //}
        }
        private static void StartSnap() {
            //new SnapManager(Settings.Snap);
            new SnapManager(Settings.Config.Snap[0]);
        }
        public class WorkThread
        {
            public void Start()
ServiceCore/Monitor.cs
@@ -1,32 +1,4 @@
using HH.WCS.Mobox3.AnGang.Devices;
using HH.WCS.Mobox3.AnGang.process;
using HH.WCS.Mobox3.AnGang.config;
using HH.WCS.Mobox3.AnGang.Helper;
using Newtonsoft.Json;
using Opc.Ua.Client;
using Opc.Ua;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Org.BouncyCastle.Ocsp;
using S7.Net.Types;
using Opc.Ua.Configuration;
using static System.Net.Mime.MediaTypeNames;
using SqlSugar.Extensions;
using static HH.WCS.Mobox3.AnGang.Dispatch.NDC;
using Newtonsoft.Json.Linq;
using HH.WCS.Mobox3.AnGang.Models;
using SqlSugar;
using HH.WCS.Mobox3.AnGang.Controllers;
using HH.WCS.Mobox3.AnGang.Dispatch;
using HH.WCS.Mobox3.AnGang.Consts;
namespace HH.WCS.Mobox3.AnGang.ServiceCore
{
namespace HH.WCS.Mobox3.AnGang.ServiceCore {
    /// <summary>
    /// 定时轮询任务
    /// </summary>
Services/AgvService.cs
@@ -14,6 +14,7 @@
using static HH.WCS.Mobox3.AnGang.Dtos.Response.AgvResponse;
using HH.WCS.Mobox3.AnGang.Consts;
using HH.WCS.Mobox3.AnGang.Dispatch;
using HH.WCS.Mobox3.AnGang.Devices;
namespace HH.WCS.Mobox3.AnGang.Services {
    public class AgvService {
@@ -22,8 +23,8 @@
            try {
                switch (model.state) {
                    case 1023:
                        break;
                    case 1025:
                        break;
                    case 1012:
                        break;
@@ -83,10 +84,17 @@
                case AgvStateCode.取货完成:
                    WCSHelper.UpdateStatus(TN_Task, "取货完成"); // 任务状态改成取货完成
                    // TODO 拍照
                    var captureTask = Task.Run(() => {
                        if (TN_Task.S_TYPE == TaskName.货品入库 || TN_Task.S_TYPE == TaskName.产品部分回库) {
                            CapturePic(TN_Task);
                        }
                    });
                    var setEndLocTask = Task.Run(() => {
                        SetEndLoc(TN_Task);
                        // 只要任务为产品入库(PDA),就需要重新指定终点(默认endLoc为"")
                        if (TN_Task.S_TYPE == "产品入库(PDA)") {
                            SetEndLoc(TN_Task);
                        }
                    });
                    TaskHelper.OperateStatus(TN_Task, 4); // 起点容器货位解绑,解锁起点
@@ -113,80 +121,93 @@
            return true;
        }
        public static void CapturePic(TN_Task model) {
            var db = DbHelper.GetDbClient();
            var filepath = SnapManager.GetCapturePicturePath();
            if (string.IsNullOrEmpty(filepath)) {
                return;
            }
            if (db.Updateable<TN_CG_Detail>()
                .SetColumns(d => d.S_IMG_URL == filepath)
                .Where(d => d.S_CNTR_CODE == model.S_CNTR_CODE).ExecuteCommand() <= 0) {
                LogHelper.Info($"图片URL '{filepath}' 写入数据库失败");
                return;
            }
        }
        public static void SetEndLoc(TN_Task tn_task) {
            // 只要任务为产品入库(PDA),就需要重新指定终点(默认endLoc为"")
            if (tn_task.S_TYPE == "产品入库(PDA)") {
            var db = DbHelper.GetDbClient();
            var endLoc = new TN_Location();
                var db = DbHelper.GetDbClient();
                var endLoc = new TN_Location();
            var data = GZRobot.CustomBuf();
            var weight = float.Parse(data[0].parameter_varchar200_up);
            tn_task.F_WEIGHT = weight;
                var data = GZRobot.CustomBuf();
                var weight = float.Parse(data[0].parameter_varchar200_up);
                tn_task.F_WEIGHT= weight;
            // 只当之前指定终点货架后,才尝试计算终点货位,否则交给人工决定
            if (tn_task.S_END_AREA != "") {
                if (weight > 1500) {
                    // 重量超过1.5t,需要选择1-3层货架
                    endLoc = db.Queryable<TN_Location>().First(a => a.S_SHELF_CODE == tn_task.S_END_AREA && LocationHelper.IsFree(a) && a.N_CURRENT_NUM == 0 && a.N_HEIGHT <= 3);
                }
                else if (weight > 0) {
                    // 重量未超过1.5t,在指定货架随便选择1个
                    endLoc = db.Queryable<TN_Location>().First(a => a.S_SHELF_CODE == tn_task.S_END_AREA && LocationHelper.IsFree(a) && a.N_CURRENT_NUM == 0);
                }
                else {
                    // 没有接收到重量,或重量出错
                    endLoc = null;
                    LogHelper.Info($"错误的重量信息:{weight}");
                    return;
                }
                // 只当之前指定终点货架后,才尝试计算终点货位,否则交给人工决定
                if (tn_task.S_END_AREA != "") {
                    if (weight > 1500) {
                        // 重量超过1.5t,需要选择1-3层货架
                        endLoc = db.Queryable<TN_Location>().First(a => a.S_SHELF_CODE == tn_task.S_END_AREA && LocationHelper.IsFree(a) && a.N_CURRENT_NUM == 0 && a.N_HEIGHT <= 3);
                    }
                    else if (weight > 0) {
                        // 重量未超过1.5t,在指定货架随便选择1个
                        endLoc = db.Queryable<TN_Location>().First(a => a.S_SHELF_CODE == tn_task.S_END_AREA && LocationHelper.IsFree(a) && a.N_CURRENT_NUM == 0);
                    }
                    else {
                        // 没有接收到重量,或重量出错
                        endLoc = null;
                        LogHelper.Info($"错误的重量信息:{weight}");
                        return;
                    }
                // 如果没有符合条件的货位,置空,等待PDA重新确定
                if (endLoc == null) {
                    tn_task.S_END_AREA = "";
                    tn_task.S_END_LOC = "";
                    // 如果没有符合条件的货位,置空,等待PDA重新确定
                    if (endLoc == null) {
                        tn_task.S_END_AREA = "";
                        tn_task.S_END_LOC = "";
                    // 不需要再给GZ AGV传空值,一开始就没给具体货位,只给了Area
                        // 不需要再给GZ AGV传空值,一开始就没给具体货位,只给了Area
                    //var request = new UpdateInteractInfo {
                    //    interaction_info_id = 3, // 更改终点信息
                    //    info_status = "active",
                    //    return_value = "",
                    //};
                        //var request = new UpdateInteractInfo {
                        //    interaction_info_id = 3, // 更改终点信息
                        //    info_status = "active",
                        //    return_value = "",
                        //};
                    //GZRobot.UpdateInteractInfo(request);
                        //GZRobot.UpdateInteractInfo(request);
                    using (var trans = db.Ado.UseTran()) {
                        if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC, it.F_WEIGHT })
                            .ExecuteCommand() > 0) {
                            //LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁
                        using (var trans = db.Ado.UseTran()) {
                            if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC, it.F_WEIGHT })
                                .ExecuteCommand() > 0) {
                                //LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁
                                trans.CommitTran();
                                LogHelper.Info($"重新计算后没有合适货位,任务 {tn_task.S_CODE} 修改成功,修改终点货架和货位为空");
                            }
                            else {
                                trans.RollbackTran();
                                LogHelper.Info($"重新计算后没有合适货位,任务 {tn_task.S_CODE} 修改失败,修改终点货架和货位为空");
                            }
                            trans.CommitTran();
                            LogHelper.Info($"重新计算后没有合适货位,任务 {tn_task.S_CODE} 修改成功,修改终点货架和货位为空");
                        }
                        else {
                            trans.RollbackTran();
                            LogHelper.Info($"重新计算后没有合适货位,任务 {tn_task.S_CODE} 修改失败,修改终点货架和货位为空");
                        }
                    }
                    else {
                        // 找到合适的货位,推送
                        tn_task.S_END_LOC = endLoc.S_CODE;
                }
                else {
                    // 找到合适的货位,推送
                    tn_task.S_END_LOC = endLoc.S_CODE;
                        using (var trans = db.Ado.UseTran()) {
                            if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new {it.S_END_LOC, it.F_WEIGHT})
                                .ExecuteCommand() > 0) {
                                LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁
                    using (var trans = db.Ado.UseTran()) {
                        if (db.Updateable<TN_Task>(tn_task).UpdateColumns(it => new { it.S_END_LOC, it.F_WEIGHT })
                            .ExecuteCommand() > 0) {
                            LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁
                                trans.CommitTran();
                                LogHelper.Info($"计算货位成功,任务 {tn_task.S_CODE} 修改成功,终点货架为 {endLoc.S_SHELF_CODE},修改终点位置为 {endLoc.S_CODE}");
                            }
                            else {
                                trans.RollbackTran();
                            trans.CommitTran();
                            LogHelper.Info($"计算货位成功,任务 {tn_task.S_CODE} 修改成功,终点货架为 {endLoc.S_SHELF_CODE},修改终点位置为 {endLoc.S_CODE}");
                        }
                        else {
                            trans.RollbackTran();
                                LogHelper.Info($"计算货位成功,任务 {tn_task.S_CODE} 修改失败,终点货架为 {endLoc.S_SHELF_CODE},修改终点位置为 {endLoc.S_CODE}");
                            }
                            LogHelper.Info($"计算货位成功,任务 {tn_task.S_CODE} 修改失败,终点货架为 {endLoc.S_SHELF_CODE},修改终点位置为 {endLoc.S_CODE}");
                        }
                    }
                }
config/config.json
@@ -14,5 +14,14 @@
            "Name": "货架区",
            "Codes": [ "B111", "B112", "B113", "B114", "B115", "B116", "B117", "B118" ]
        }
    ]
    ],
    "Snap": [
        {
            "Ip": "172.23.8.95",
            "Port": 37777,
            "Name": "admin",
            "Pwd": "123456"
        }
    ],
    "CaptureUrl": "http://127.0.0.1/"
}
packages.config
@@ -5,14 +5,13 @@
  <package id="Microsoft.AspNet.WebApi.Client" version="6.0.0" targetFramework="net462" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.3.0" targetFramework="net462" />
  <package id="Microsoft.AspNet.WebApi.Owin" version="5.3.0" targetFramework="net462" />
  <package id="Microsoft.AspNet.WebApi.OwinSelfHost" version="5.3.0" targetFramework="net462" />
  <package id="Microsoft.AspNet.WebApi.WebHost" version="5.3.0" targetFramework="net462" />
  <package id="Microsoft.Bcl.AsyncInterfaces" version="8.0.0" targetFramework="net48" />
  <package id="Microsoft.Bcl.HashCode" version="1.1.1" targetFramework="net462" />
  <package id="Microsoft.Extensions.Logging.Abstractions" version="3.1.32" targetFramework="net462" />
  <package id="Microsoft.Owin" version="4.2.2" targetFramework="net461" />
  <package id="Microsoft.Owin.Host.HttpListener" version="4.2.2" targetFramework="net461" />
  <package id="Microsoft.Owin.Hosting" version="4.2.2" targetFramework="net461" />
  <package id="Microsoft.Owin" version="4.2.2" targetFramework="net462" />
  <package id="Microsoft.Owin.Host.HttpListener" version="4.2.2" targetFramework="net462" />
  <package id="Microsoft.Owin.Hosting" version="4.2.2" targetFramework="net462" />
  <package id="Microsoft.Web.Infrastructure" version="2.0.0" targetFramework="net462" />
  <package id="Newtonsoft.Json" version="13.0.3" targetFramework="net462" />
  <package id="Newtonsoft.Json.Bson" version="1.0.2" targetFramework="net462" />
@@ -25,12 +24,12 @@
  <package id="OPCFoundation.NetStandard.Opc.Ua.Gds.Server.Common" version="1.5.374.126" targetFramework="net462" />
  <package id="OPCFoundation.NetStandard.Opc.Ua.Security.Certificates" version="1.5.374.126" targetFramework="net462" />
  <package id="OPCFoundation.NetStandard.Opc.Ua.Server" version="1.5.374.126" targetFramework="net462" />
  <package id="Owin" version="1.0" targetFramework="net461" />
  <package id="Owin" version="1.0" targetFramework="net462" />
  <package id="Portable.BouncyCastle" version="1.9.0" targetFramework="net462" />
  <package id="S7netplus" version="0.20.0" targetFramework="net461" requireReinstallation="true" />
  <package id="S7netplus" version="0.20.0" targetFramework="net462" />
  <package id="SqlSugar" version="5.1.4.169" targetFramework="net462" />
  <package id="Swashbuckle" version="5.6.0" targetFramework="net461" />
  <package id="Swashbuckle.Core" version="5.6.0" targetFramework="net461" />
  <package id="Swashbuckle" version="5.6.0" targetFramework="net462" />
  <package id="Swashbuckle.Core" version="5.6.0" targetFramework="net462" />
  <package id="System.Buffers" version="4.5.1" targetFramework="net461" />
  <package id="System.Diagnostics.DiagnosticSource" version="6.0.1" targetFramework="net462" />
  <package id="System.Formats.Asn1" version="8.0.1" targetFramework="net462" />
@@ -47,7 +46,6 @@
  <package id="System.Text.Encodings.Web" version="8.0.0" targetFramework="net48" />
  <package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net461" />
  <package id="System.ValueTuple" version="4.5.0" targetFramework="net48" requireReinstallation="true" />
  <package id="Topshelf" version="4.3.0" targetFramework="net452" />
  <package id="Topshelf.NLog" version="4.3.0" targetFramework="net452" />
  <package id="Topshelf" version="4.3.1-develop.253" targetFramework="net462" />
  <package id="WebActivatorEx" version="2.2.0" targetFramework="net462" />
</packages>