革博士V2程序
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

1161 рядки
44 KiB

  1. using MaiMuControl.SysStatusMgr.UserMgr;
  2. using Newtonsoft.Json.Linq;
  3. using SqlSugar;
  4. using System;
  5. using System.Collections;
  6. using System.Collections.Generic;
  7. using System.Data;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows.Forms;
  13. using ToolKits.Ini;
  14. using ToolKits.mAPI;
  15. namespace GeBoShi.SysCtrl
  16. {
  17. /// <summary>
  18. /// 设备参数
  19. /// </summary>
  20. public class ConfMgr
  21. {
  22. #region 实例化
  23. /// <summary>
  24. /// 实例
  25. /// </summary>
  26. private static ConfMgr _instance;
  27. private static readonly object _lock = new object();
  28. public static ConfMgr Instance
  29. {
  30. get
  31. {
  32. if (_instance == null)
  33. {
  34. lock (_lock)
  35. {
  36. if (_instance == null)
  37. {
  38. _instance = new ConfMgr();
  39. }
  40. }
  41. }
  42. return _instance;
  43. }
  44. }
  45. #endregion
  46. #region 私有字段
  47. private readonly string _rootPath;
  48. private readonly string _configFile;
  49. private readonly string _projectDir;
  50. #endregion
  51. private ConfMgr()
  52. {
  53. _rootPath = Path.Combine(Directory.GetCurrentDirectory(), "ConfigFiles");
  54. _configFile = Path.Combine(_rootPath, "SysParamsConfig.ini");
  55. _devConfigPath = Path.Combine(_rootPath, "DevParamsConfig.ini");
  56. _projectDir = Path.Combine(_rootPath, "Project");
  57. _specificationPath = Path.Combine(_rootPath, "革博士软件操作说明.docx");
  58. DBConStr = "server = localhost; Database = LeatherDB; Uid = root; Pwd = " + ConteolUserDB.GetSqlDBCode() + "; AllowLoadLocalInfile = true;";
  59. }
  60. #region 公开字段
  61. //DB
  62. //有些服务器防火墙有问题需要加上 min pool size=1 避免认为是恶意请求
  63. //如果用到bulkCopy需要加: AllowLoadLocalInfile=true
  64. public string DBConStr = "server=localhost;Database=LeatherDB;Uid=root;Pwd=123456; AllowLoadLocalInfile=true";
  65. /// <summary>
  66. /// 系统配置参数
  67. /// </summary>
  68. public SysConfigParams SysConfigParams { get; set; }
  69. private string _devConfigPath;
  70. /// <summary>
  71. /// 获取驱动配制文件路径
  72. /// </summary>
  73. public string DevConfigPath { get { return _devConfigPath; } }
  74. //public string ProjectDir { get { return _projectDir; } }
  75. public string ProjectDir { get { return SysConfigParams.ProductPath; } }
  76. /// <summary>
  77. /// 配置文件根路径
  78. /// </summary>
  79. public string ConfigDir { get { return _rootPath; } }
  80. /// <summary>
  81. /// 说明书路径
  82. /// </summary>
  83. public string SpecificationPath { get { return _specificationPath; } }
  84. private string _specificationPath;
  85. #endregion
  86. #region 公开文件操作
  87. #region 系统配置参数
  88. /// <summary>
  89. /// 写入ini
  90. /// </summary>
  91. /// <param name="SocketParams"></param>
  92. public void WriteSysConfParams(SysConfigParams SysParams)
  93. {
  94. //XmlHelper.Serialize<SysConfParams>(_configFile, sysConfParams);
  95. IniHelper iniHelper = new IniHelper(_configFile);
  96. //iniHelper.WriteBool("SaveAllImg", "SaveAllImg", SysParams.SaveAllImg);
  97. iniHelper.WriteString("DefectSrcImag", "SavePath", SysParams.DefectSrcImag.SavePath);
  98. iniHelper.WriteBool("DefectSrcImag", "AutoSave", SysParams.DefectSrcImag.AutoSave);
  99. iniHelper.WriteBool("DefectSrcImag", "AutoDelete", SysParams.DefectSrcImag.AutoDelete);
  100. iniHelper.WriteDouble("DefectSrcImag", "AutoDeleteDays", SysParams.DefectSrcImag.AutoDeleteDays);
  101. iniHelper.WriteString("DefectSmallImag", "SavePath", SysParams.DefectSmallImag.SavePath);
  102. iniHelper.WriteBool("DefectSmallImag", "AutoSave", SysParams.DefectSmallImag.AutoSave);
  103. iniHelper.WriteBool("DefectSmallImag", "AutoDelete", SysParams.DefectSmallImag.AutoDelete);
  104. iniHelper.WriteDouble("DefectSmallImag", "AutoDeleteDays", SysParams.DefectSmallImag.AutoDeleteDays);
  105. iniHelper.WriteString("DefectSplicImag", "SavePath", SysParams.DefectSplicImag.SavePath);
  106. iniHelper.WriteBool("DefectSplicImag", "AutoSave", SysParams.DefectSplicImag.AutoSave);
  107. iniHelper.WriteBool("DefectSplicImag", "AutoDelete", SysParams.DefectSplicImag.AutoDelete);
  108. iniHelper.WriteDouble("DefectSplicImag", "AutoDeleteDays", SysParams.DefectSplicImag.AutoDeleteDays);
  109. iniHelper.WriteString("CamImag", "SavePath", SysParams.CamImag.SavePath);
  110. iniHelper.WriteBool("CamImag", "AutoSave", SysParams.CamImag.AutoSave);
  111. iniHelper.WriteBool("CamImag", "AutoDelete", SysParams.CamImag.AutoDelete);
  112. iniHelper.WriteDouble("CamImag", "AutoDeleteDays", SysParams.CamImag.AutoDeleteDays);
  113. iniHelper.WriteString("Log", "SavePath", SysParams.LogPath);
  114. iniHelper.WriteBool("Log", "AutoDelete", SysParams.AutoDeleteLog);
  115. iniHelper.WriteDouble("Log", "AutoDeleteDays", SysParams.AutoDeleteLogData);
  116. iniHelper.WriteBool("SysFunction", "OpenBuzzer", SysParams.OpenBuzzer);
  117. iniHelper.WriteBool("SysFunction", "OpenDoor", SysParams.OpenDoor);
  118. iniHelper.WriteBool("SysFunction", "OpenIO", SysParams.OpenIO);
  119. iniHelper.WriteBool("SysFunction", "OpenPLC", SysParams.OpenPLC);
  120. iniHelper.WriteBool("SysFunction", "OpenLengthCount", SysParams.OpenLengthCount);
  121. iniHelper.WriteBool("SysFunction", "OpenAutoRun", SysParams.OpenAutoRun);
  122. iniHelper.WriteBool("SysFunction", "OpenLengthCountStop", SysParams.OpenLengthCountStop);
  123. //iniHelper.WriteBool("SysFunction", "OpenAIEdge", SysParams.OpenAIEdge);
  124. iniHelper.WriteString("Dev", "LightCom", SysParams.LightCom);
  125. iniHelper.WriteInteger("Dev", "LightComBaud", SysParams.LightComBaud);
  126. iniHelper.WriteString("Dev", "LengthCounterCom", SysParams.LengthCounterCom);
  127. iniHelper.WriteInteger("Dev", "LengthCounterComBaud", SysParams.LengthCounterComBaud);
  128. iniHelper.WriteString("Dev", "IODevName", SysParams.IODevName);
  129. iniHelper.WriteString("Dev", "IOCfgPath", SysParams.IOCfgPath);
  130. iniHelper.WriteString("Dev", "PLC_IP", SysParams.PLC_IP);
  131. iniHelper.WriteInteger("Dev", "PLC_Rack", SysParams.PLC_Rack);
  132. iniHelper.WriteInteger("Dev", "PLC_Solt", SysParams.PLC_Solt);
  133. iniHelper.WriteString("Dev", "CamPath_1", SysParams.CamPath_1);
  134. iniHelper.WriteInteger("Dev", "CamDev_1", SysParams.CamDev_1);
  135. iniHelper.WriteInteger("Dev", "CamIndex_1", SysParams.CamIndex_1);
  136. iniHelper.WriteString("Dev", "CamPath_2", SysParams.CamPath_2);
  137. iniHelper.WriteInteger("Dev", "CamDev_2", SysParams.CamDev_2);
  138. iniHelper.WriteInteger("Dev", "CamIndex_2", SysParams.CamIndex_2);
  139. iniHelper.WriteString("Sys", "AIModelPath", SysParams.AIModelPath);
  140. iniHelper.WriteString("Sys", "ProductPath", SysParams.ProductPath);
  141. iniHelper.WriteBool("ShowMainWin", "ShowResetBtn", SysParams.ShowResetBtn);
  142. iniHelper.WriteBool("ShowMainWin", "ShowBuzz", SysParams.ShowBuzz);
  143. iniHelper.WriteBool("ShowMainWin", "ShowDoorAlm", SysParams.ShowDoorAlm);
  144. iniHelper.WriteBool("CloudAndMES", "OpenCloud", SysParams.OpenCloud);
  145. iniHelper.WriteString("CloudAndMES", "CloudThisName", SysParams.CloudThisName);
  146. iniHelper.WriteString("CloudAndMES", "CloudServerIP", SysParams.CloudServerIP);
  147. iniHelper.WriteInteger("CloudAndMES", "CloudServerPort", SysParams.CloudServerPort);
  148. iniHelper.WriteString("CloudAndMES", "CloudUser", SysParams.CloudUser);
  149. iniHelper.WriteString("CloudAndMES", "CloudPassword", SysParams.CloudPassword);
  150. iniHelper.WriteBool("CloudAndMES", "OpenPdtServer", SysParams.OpenPdtServer);
  151. iniHelper.WriteString("CloudAndMES", "PdtServerIP", SysParams.PdtServerIP);
  152. iniHelper.WriteInteger("CloudAndMES", "PdtServerPort", SysParams.PdtServerPort);
  153. iniHelper.WriteBool("CloudAndMES", "IsPdtServer", SysParams.IsPdtServer);
  154. iniHelper.WriteBool("LabelPrint", "EnableLabelPrint", SysParams.EnableLabelPrint);
  155. iniHelper.WriteString("LabelPrint", "LabelPrinterName", SysParams.LabelPrinterName);
  156. iniHelper.WriteBool("ExcelPrint", "EnableExcelPrint", SysParams.EnableExcelPrint);
  157. iniHelper.WriteString("ExcelPrint", "ExcelPrinterName", SysParams.ExcelPrinterName);
  158. iniHelper.WriteString("ERP", "ErpDBConStr", SysParams.ErpDBConStr);
  159. iniHelper.WriteString("ERP", "ErpSql", SysParams.ErpSql);
  160. iniHelper.WriteString("Customer", "CustomerName", SysParams.CustomerName);
  161. iniHelper.WriteBool("FLIP", "Cam1_flipXY", SysParams.Cam1_flipXY);
  162. //iniHelper.WriteBool("FLIP", "Cam1_flipY", SysParams.Cam1_flipY);
  163. iniHelper.WriteBool("FLIP", "Cam2_flipXY", SysParams.Cam2_flipXY);
  164. //iniHelper.WriteBool("FLIP", "Cam2_flipY", SysParams.Cam2_flipY);
  165. iniHelper.WriteInteger("CMPX", "Cm2px_x", SysParams.Cm2px_x);
  166. iniHelper.WriteInteger("CMPX", "Cm2px_y", SysParams.Cm2px_y);
  167. iniHelper.WriteInteger("CMPX", "MidCoin", SysParams.MidCoin);
  168. iniHelper.WriteInteger("CMPX", "HolePx", SysParams.HolePx);
  169. iniHelper.WriteInteger("CMPX", "LCrop", SysParams.LCrop);
  170. iniHelper.WriteInteger("CMPX", "RCrop", SysParams.RCrop);
  171. iniHelper.WriteInteger("CMPX", "Expand_pixel", SysParams.Expand_pixel);
  172. iniHelper.WriteInteger("CMPX", "Crop_offset", SysParams.Crop_offset);
  173. iniHelper.WriteDouble("StopDisOffset", "StopLookDis", SysParams.StopLookDis);
  174. iniHelper.WriteDouble("StopDisOffset", "StopDecTime", SysParams.StopDecTime);
  175. iniHelper.WriteBool("StopDisOffset", "HaveStopOffsetDis", SysParams.HaveStopOffsetDis);
  176. iniHelper.WriteString("StopDisOffset", "StopOffsetDisJson", SysParams.StopOffsetDisJson);
  177. iniHelper.WriteInteger("StopDisOffset", "StopImageCnt", SysParams.StopImageCnt);
  178. iniHelper.WriteDouble("StopDisOffset", "CamToDBDis", SysParams.CamToDBDis);
  179. iniHelper.WriteString("Halcon", "HalconDataPath", SysParams.HalconDataPath);
  180. SysConfigParams = SysParams;
  181. }
  182. /// <summary>
  183. /// 读取ini
  184. /// </summary>
  185. /// <returns></returns>
  186. public SysConfigParams ReadSysConfParams()
  187. {
  188. //return XmlHelper.Deserialize<SysConfParams>(_configFile);
  189. SysConfigParams sysParams = new SysConfigParams();
  190. IniHelper iniHelper = new IniHelper(_configFile);
  191. string sValue = "";
  192. int iValue = 0;
  193. double dValue = 0;
  194. bool bValue = false;
  195. //iniHelper.ReadBool("SaveAllImg", "SaveAllImg", out bValue);
  196. //sysParams.SaveAllImg = bValue;
  197. iniHelper.ReadBool("SysFunction", "OpenBuzzer", out bValue);
  198. sysParams.OpenBuzzer = bValue;
  199. iniHelper.ReadBool("SysFunction", "OpenDoor", out bValue);
  200. sysParams.OpenDoor = bValue;
  201. iniHelper.ReadBool("SysFunction", "OpenIO", out bValue);
  202. sysParams.OpenIO = bValue;
  203. iniHelper.ReadBool("SysFunction", "OpenPLC", out bValue);
  204. sysParams.OpenPLC = bValue;
  205. iniHelper.ReadBool("SysFunction", "OpenLengthCount", out bValue);
  206. sysParams.OpenLengthCount = bValue;
  207. iniHelper.ReadBool("SysFunction", "OpenAutoRun", out bValue);
  208. sysParams.OpenAutoRun = bValue;
  209. iniHelper.ReadBool("SysFunction", "OpenLengthCountStop", out bValue);
  210. sysParams.OpenLengthCountStop = bValue;
  211. //iniHelper.ReadBool("SysFunction", "OpenAIEdge", out bValue);
  212. //sysParams.OpenAIEdge = bValue;
  213. iniHelper.ReadString("Dev", "LightCom", out sValue);
  214. sysParams.LightCom = sValue.Replace("\0", "");
  215. iniHelper.ReadInteger("Dev", "LightComBaud", out iValue);
  216. sysParams.LightComBaud = iValue;
  217. iniHelper.ReadString("Dev", "LengthCounterCom", out sValue);
  218. sysParams.LengthCounterCom = sValue.Replace("\0", "");
  219. iniHelper.ReadInteger("Dev", "LengthCounterComBaud", out iValue);
  220. sysParams.LengthCounterComBaud = iValue;
  221. iniHelper.ReadString("Dev", "IODevName", out sValue);
  222. sysParams.IODevName = sValue.Replace("\0", "");
  223. iniHelper.ReadString("Dev", "IOCfgPath", out sValue);
  224. sysParams.IOCfgPath = sValue.Replace("\0", "");
  225. iniHelper.ReadString("Dev", "PLC_IP", out sValue);
  226. sysParams.PLC_IP = sValue.Replace("\0", "");
  227. iniHelper.ReadInteger("Dev", "PLC_Rack", out iValue);
  228. sysParams.PLC_Rack = iValue;
  229. iniHelper.ReadInteger("Dev", "PLC_Solt", out iValue);
  230. sysParams.PLC_Solt = iValue;
  231. iniHelper.ReadString("Dev", "CamPath_1", out sValue);
  232. sysParams.CamPath_1 = sValue.Replace("\0", "");
  233. iniHelper.ReadInteger("Dev", "CamDev_1", out iValue);
  234. sysParams.CamDev_1 = iValue;
  235. iniHelper.ReadInteger("Dev", "CamIndex_1", out iValue);
  236. sysParams.CamIndex_1 = iValue;
  237. iniHelper.ReadString("Dev", "CamPath_2", out sValue);
  238. sysParams.CamPath_2 = sValue.Replace("\0", "");
  239. iniHelper.ReadInteger("Dev", "CamDev_2", out iValue);
  240. sysParams.CamDev_2 = iValue;
  241. iniHelper.ReadInteger("Dev", "CamIndex_2", out iValue);
  242. sysParams.CamIndex_2 = iValue;
  243. iniHelper.ReadBool("CloudAndMES", "OpenCloud", out bValue);
  244. sysParams.OpenCloud = bValue;
  245. iniHelper.ReadString("CloudAndMES", "CloudThisName", out sValue);
  246. sysParams.CloudThisName = sValue.Replace("\0", string.Empty);
  247. iniHelper.ReadString("CloudAndMES", "CloudServerIP", out sValue);
  248. sysParams.CloudServerIP = sValue;
  249. iniHelper.ReadInteger("CloudAndMES", "CloudServerPort", out iValue);
  250. sysParams.CloudServerPort = iValue;
  251. iniHelper.ReadString("CloudAndMES", "CloudUser", out sValue);
  252. sysParams.CloudUser = sValue;
  253. iniHelper.ReadString("CloudAndMES", "CloudPassword", out sValue);
  254. sysParams.CloudPassword = sValue;
  255. iniHelper.ReadBool("CloudAndMES", "OpenPdtServer", out bValue);
  256. sysParams.OpenPdtServer = bValue;
  257. iniHelper.ReadString("CloudAndMES", "PdtServerIP", out sValue);
  258. sysParams.PdtServerIP = sValue;
  259. iniHelper.ReadInteger("CloudAndMES", "PdtServerPort", out iValue);
  260. sysParams.PdtServerPort = iValue;
  261. iniHelper.ReadBool("CloudAndMES", "IsPdtServer", out bValue);
  262. sysParams.IsPdtServer = bValue;
  263. iniHelper.ReadString("DefectSrcImag", "SavePath", out sValue);
  264. sysParams.DefectSrcImag.SavePath = sValue.Replace("\0", "");
  265. iniHelper.ReadBool("DefectSrcImag", "AutoSave", out bValue);
  266. sysParams.DefectSrcImag.AutoSave = bValue;
  267. iniHelper.ReadBool("DefectSrcImag", "AutoDelete", out bValue);
  268. sysParams.DefectSrcImag.AutoDelete = bValue;
  269. iniHelper.ReadDouble("DefectSrcImag", "AutoDeleteDays", out dValue);
  270. sysParams.DefectSrcImag.AutoDeleteDays = dValue;
  271. iniHelper.ReadString("DefectSmallImag", "SavePath", out sValue);
  272. sysParams.DefectSmallImag.SavePath = sValue.Replace("\0", "");
  273. iniHelper.ReadBool("DefectSmallImag", "AutoSave", out bValue);
  274. sysParams.DefectSmallImag.AutoSave = bValue;
  275. iniHelper.ReadBool("DefectSmallImag", "AutoDelete", out bValue);
  276. sysParams.DefectSmallImag.AutoDelete = bValue;
  277. iniHelper.ReadDouble("DefectSmallImag", "AutoDeleteDays", out dValue);
  278. sysParams.DefectSmallImag.AutoDeleteDays = dValue;
  279. iniHelper.ReadString("DefectSplicImag", "SavePath", out sValue);
  280. sysParams.DefectSplicImag.SavePath = sValue.Replace("\0", "");
  281. iniHelper.ReadBool("DefectSplicImag", "AutoSave", out bValue);
  282. sysParams.DefectSplicImag.AutoSave = bValue;
  283. iniHelper.ReadBool("DefectSplicImag", "AutoDelete", out bValue);
  284. sysParams.DefectSplicImag.AutoDelete = bValue;
  285. iniHelper.ReadDouble("DefectSplicImag", "AutoDeleteDays", out dValue);
  286. sysParams.DefectSplicImag.AutoDeleteDays = dValue;
  287. iniHelper.ReadString("CamImag", "SavePath", out sValue);
  288. sysParams.CamImag.SavePath = sValue.Replace("\0", "");
  289. iniHelper.ReadBool("CamImag", "AutoSave", out bValue);
  290. sysParams.CamImag.AutoSave = bValue;
  291. iniHelper.ReadBool("CamImag", "AutoDelete", out bValue);
  292. sysParams.CamImag.AutoDelete = bValue;
  293. iniHelper.ReadDouble("CamImag", "AutoDeleteDays", out dValue);
  294. sysParams.CamImag.AutoDeleteDays = dValue;
  295. iniHelper.ReadString("Sys", "AIModelPath", out sValue);
  296. sysParams.AIModelPath = sValue.Replace("\0", "");
  297. iniHelper.ReadString("Sys", "ProductPath", out sValue);
  298. sysParams.ProductPath = sValue.Replace("\0", "");
  299. iniHelper.ReadString("Log", "SavePath", out sValue);
  300. sysParams.LogPath = sValue.Replace("\0", "");
  301. iniHelper.ReadBool("Log", "AutoDelete", out bValue);
  302. sysParams.AutoDeleteLog = bValue;
  303. iniHelper.ReadDouble("Log", "AutoDeleteDays", out dValue);
  304. sysParams.AutoDeleteLogData = dValue;
  305. iniHelper.ReadBool("ShowMainWin", "ShowResetBtn", out bValue);
  306. sysParams.ShowResetBtn = bValue;
  307. iniHelper.ReadBool("ShowMainWin", "ShowBuzz", out bValue);
  308. sysParams.ShowBuzz = bValue;
  309. iniHelper.ReadBool("ShowMainWin", "ShowDoorAlm", out bValue);
  310. sysParams.ShowDoorAlm = bValue;
  311. iniHelper.ReadBool("FLIP", "Cam1_flipXY", out bValue);
  312. sysParams.Cam1_flipXY = bValue;
  313. //iniHelper.ReadBool("FLIP", "Cam1_flipY", out bValue);
  314. //sysParams.Cam1_flipY = bValue;
  315. iniHelper.ReadBool("FLIP", "Cam2_flipXY", out bValue);
  316. sysParams.Cam2_flipXY = bValue;
  317. //iniHelper.ReadBool("FLIP", "Cam2_flipY", out bValue);
  318. //sysParams.Cam2_flipY = bValue;
  319. iniHelper.ReadInteger("CMPX", "Cm2px_x", out iValue);
  320. sysParams.Cm2px_x = iValue;
  321. iniHelper.ReadInteger("CMPX", "Cm2px_y", out iValue);
  322. sysParams.Cm2px_y = iValue;
  323. iniHelper.ReadInteger("CMPX", "MidCoin", out iValue);
  324. sysParams.MidCoin = iValue;
  325. iniHelper.ReadInteger("CMPX", "HolePx", out iValue);
  326. sysParams.HolePx = iValue;
  327. iniHelper.ReadInteger("CMPX", "LCrop", out iValue);
  328. sysParams.LCrop = iValue;
  329. iniHelper.ReadInteger("CMPX", "RCrop", out iValue);
  330. sysParams.RCrop = iValue;
  331. iniHelper.ReadInteger("CMPX", "Expand_pixel", out iValue);
  332. sysParams.Expand_pixel = iValue;
  333. iniHelper.ReadInteger("CMPX", "Crop_offset", out iValue);
  334. sysParams.Crop_offset = iValue;
  335. iniHelper.ReadBool("LabelPrint", "EnableLabelPrint", out bValue);
  336. sysParams.EnableLabelPrint = bValue;
  337. iniHelper.ReadString("LabelPrint", "LabelPrinterName", out sValue);
  338. sysParams.LabelPrinterName = sValue;
  339. iniHelper.ReadBool("ExcelPrint", "EnableExcelPrint", out bValue);
  340. sysParams.EnableExcelPrint = bValue;
  341. iniHelper.ReadString("ExcelPrint", "ExcelPrinterName", out sValue);
  342. sysParams.ExcelPrinterName = sValue;
  343. iniHelper.ReadString("ERP", "ErpDBConStr", out sValue);
  344. sysParams.ErpDBConStr = sValue;
  345. iniHelper.ReadString("ERP", "ErpSql", out sValue);
  346. sysParams.ErpSql = sValue;
  347. iniHelper.ReadString("Customer", "CustomerName", out sValue);
  348. sysParams.CustomerName = sValue;
  349. iniHelper.ReadString("Material", "SuedeList", out sValue);
  350. if (!string.IsNullOrWhiteSpace(sValue))
  351. sysParams.SuedeList = sValue.Split(new char[] { ',', ';' });
  352. iniHelper.ReadDouble("StopDisOffset", "StopLookDis", out dValue);
  353. sysParams.StopLookDis = dValue;
  354. iniHelper.ReadDouble("StopDisOffset", "StopDecTime", out dValue);
  355. sysParams.StopDecTime = dValue;
  356. iniHelper.ReadBool("StopDisOffset", "HaveStopOffsetDis", out bValue);
  357. sysParams.HaveStopOffsetDis = bValue;
  358. iniHelper.ReadString("StopDisOffset", "StopOffsetDisJson", out sValue);
  359. sysParams.StopOffsetDisJson = sValue;
  360. iniHelper.ReadInteger("StopDisOffset", "StopImageCnt", out iValue);
  361. sysParams.StopImageCnt = iValue;
  362. iniHelper.ReadDouble("StopDisOffset", "CamToDBDis", out dValue);
  363. sysParams.CamToDBDis = dValue;
  364. iniHelper.ReadString("Halcon", "HalconDataPath", out sValue);
  365. sysParams.HalconDataPath = sValue;
  366. SysConfigParams = sysParams;
  367. return sysParams;
  368. }
  369. /// <summary>
  370. /// 写入系统默认配置
  371. /// </summary>
  372. public void WriteDefaultSystemConfig()
  373. {
  374. SysConfigParams = new SysConfigParams();
  375. WriteSysConfParams(SysConfigParams);
  376. }
  377. /// <summary>
  378. /// 加载系统配置
  379. /// </summary>
  380. /// <returns></returns>
  381. public bool LoadSystemConfig()
  382. {
  383. bool ret = false;
  384. if (!Directory.Exists(_rootPath))
  385. {
  386. Directory.CreateDirectory(_rootPath);
  387. }
  388. if (!Directory.Exists(_projectDir))
  389. {
  390. Directory.CreateDirectory(_projectDir);
  391. }
  392. if (File.Exists(_configFile))
  393. {
  394. SysConfigParams = ReadSysConfParams();
  395. if (null != SysConfigParams)
  396. {
  397. ret = true;
  398. }
  399. }
  400. else
  401. {
  402. // write default value
  403. WriteDefaultSystemConfig();
  404. ret = true;
  405. }
  406. return ret;
  407. }
  408. #endregion
  409. #region 文件选择
  410. /// <summary>
  411. /// 选择目录
  412. /// </summary>
  413. /// <returns></returns>
  414. public static string SelectFolder(string defaultPath = "")
  415. {
  416. FolderBrowserDialog dlg = new FolderBrowserDialog();
  417. dlg.SelectedPath = (defaultPath != "" ? defaultPath : Path.GetFullPath("."));
  418. if (dlg.ShowDialog() == DialogResult.OK)
  419. return dlg.SelectedPath;
  420. return "";
  421. }
  422. /// <summary>
  423. /// 选择文件
  424. /// </summary>
  425. /// <param name="filter">如 图像文件|*.jpg|图像文件|*.png|所有文件|*.*</param>
  426. /// <returns></returns>
  427. public static string SelectFile(string filter = "所有文件|*.*", string defaultPath = "")
  428. {
  429. OpenFileDialog fie = new OpenFileDialog();
  430. fie.Title = "选择文件";
  431. //fie.InitialDirectory = (defaultPath != "" ? defaultPath : Path.GetFullPath("."));
  432. fie.Filter = filter; //设置文件类型
  433. if (fie.ShowDialog() == DialogResult.OK)
  434. return fie.FileName;
  435. return "";
  436. }
  437. /// <summary>
  438. /// 删除指定目录下文件
  439. /// </summary>
  440. /// <param name="defaultPath"></param>
  441. /// <param name="fileExtend"></param>
  442. /// <returns></returns>
  443. public static bool DelFilesInFolder(string FolderPath, string fileExtend = "*")
  444. {
  445. if (!Directory.Exists(FolderPath))
  446. return false;
  447. string[] files = Directory.GetFiles(FolderPath, fileExtend, SearchOption.TopDirectoryOnly);
  448. foreach (string file in files)
  449. API.DeleteFile(file);
  450. return true;
  451. }
  452. /// <summary>
  453. /// 另存为
  454. /// </summary>
  455. /// <param name="defaultFileName">默认文件名</param>
  456. /// <param name="filter">如 图像文件|*.jpg|图像文件|*.png|所有文件|*.*</param>
  457. /// <returns></returns>
  458. public static string SaveAsFile(string defaultFileName, string filter = "所有文件|*.*")
  459. {
  460. SaveFileDialog s = new SaveFileDialog();
  461. s.Title = "保存文件";
  462. s.Filter = filter; //"图像文件|*.jpg|图像文件|*.png|所有文件|*.*";
  463. //s.DefaultExt = "图像文件|*.jpg"; //默认扩展名
  464. //s.InitialDirectory = @"C:\Users\Administrator\Desktop"; //保存的初始目录
  465. s.FileName = defaultFileName;//默认文件名
  466. if (s.ShowDialog() == DialogResult.OK)
  467. return s.FileName;
  468. return "";
  469. }
  470. #endregion
  471. #region json操作
  472. //public static void addKey(JObject obj, string key, JToken value)
  473. //{
  474. // if (obj.ContainsKey(key))
  475. // obj[key] = value;
  476. // else
  477. // obj.Add(key, value);
  478. //}
  479. #endregion
  480. #region enum名称
  481. public static ArrayList GetArrayList<T>()
  482. {
  483. ArrayList list = new ArrayList();
  484. Type type = typeof(T);
  485. //list.Add(new DictionaryEntry("start", "启动按钮"));
  486. foreach (int value in Enum.GetValues(type))
  487. {
  488. string strName = Enum.GetName(type, value);//获取名称
  489. list.Add(new DictionaryEntry(value, strName));
  490. }
  491. return list;
  492. }
  493. #endregion
  494. #region 生产数据记录
  495. public bool SetDailyOutputAdd(out int tDailyOutput)
  496. {
  497. bool ret = true;
  498. try
  499. {
  500. //读取数据
  501. string tempFile = Path.Combine(_rootPath, "DailyOutput.ini");
  502. IniHelper iniHelper = new IniHelper(tempFile);
  503. int iValue = 0;
  504. iniHelper.ReadInteger("TempData", "DailyOutput", out iValue);
  505. tDailyOutput = iValue;
  506. iniHelper.ReadInteger("TempData", "Date", out iValue);
  507. int dateNum = iValue;
  508. int nowDateNum = int.Parse(DateTime.Now.ToString("yyyyMMdd"));
  509. if (dateNum == nowDateNum)
  510. {
  511. //同一天,生产数量+1
  512. tDailyOutput++;
  513. }
  514. else if (dateNum < nowDateNum)
  515. {
  516. //昨天数据,为1
  517. tDailyOutput = 1;
  518. }
  519. //重新记录
  520. iniHelper.WriteInteger("TempData", "DailyOutput", tDailyOutput);
  521. iniHelper.WriteInteger("TempData", "Date", nowDateNum);
  522. }
  523. catch (Exception ex)
  524. {
  525. tDailyOutput = 0;
  526. ret = false;
  527. string tempFile = Path.Combine(_rootPath, "DailyOutput.ini");
  528. IniHelper iniHelper = new IniHelper(tempFile);
  529. int nowDateNum = int.Parse(DateTime.Now.ToString("yyyyMMdd"));
  530. //重新记录
  531. iniHelper.WriteInteger("TempData", "DailyOutput", tDailyOutput);
  532. iniHelper.WriteInteger("TempData", "Date", nowDateNum);
  533. }
  534. return ret;
  535. }
  536. public bool GetDailyOutput(out int tDailyOutput)
  537. {
  538. bool ret = true;
  539. try
  540. {
  541. //读取数据
  542. string tempFile = Path.Combine(_rootPath, "DailyOutput.ini");
  543. IniHelper iniHelper = new IniHelper(tempFile);
  544. int iValue = 0;
  545. iniHelper.ReadInteger("TempData", "DailyOutput", out iValue);
  546. tDailyOutput = iValue;
  547. iniHelper.ReadInteger("TempData", "Date", out iValue);
  548. int dateNum = iValue;
  549. int nowDateNum = int.Parse(DateTime.Now.ToString("yyyyMMdd"));
  550. if (dateNum == nowDateNum)
  551. {
  552. //同一天,生产数量+1
  553. //tDailyOutput++;
  554. }
  555. else if (dateNum < nowDateNum)
  556. {
  557. //昨天数据,为1
  558. tDailyOutput = 0;
  559. }
  560. }
  561. catch (Exception ex)
  562. {
  563. tDailyOutput = 0;
  564. ret = false;
  565. }
  566. return ret;
  567. }
  568. #endregion
  569. #region ERP数据库
  570. private SqlSugarClient db;
  571. public SqlSugarClient getErpDBCon(SqlSugar.DbType dbType = SqlSugar.DbType.SqlServer)
  572. {
  573. if (string.IsNullOrEmpty(SysConfigParams.ErpDBConStr))
  574. return null;
  575. if (db != null) return db;
  576. db = new SqlSugarClient(new ConnectionConfig()
  577. {
  578. ConnectionString = SysConfigParams.ErpDBConStr,
  579. DbType = dbType,
  580. IsAutoCloseConnection = true
  581. },
  582. db =>
  583. {
  584. db.Aop.OnLogExecuting = (sql, pars) =>
  585. {
  586. Console.WriteLine(sql);//输出sql,查看执行sql 性能无影响
  587. //获取原生SQL推荐 5.1.4.63 性能OK
  588. //UtilMethods.GetNativeSql(sql,pars)
  589. //获取无参数化SQL 对性能有影响,特别大的SQL参数多的,调试使用
  590. //UtilMethods.GetSqlString(DbType.SqlServer,sql,pars)
  591. };
  592. });
  593. return db;
  594. }
  595. public DataTable execSql(string sql, List<SugarParameter> parameters, SqlSugar.DbType dbType = SqlSugar.DbType.SqlServer)
  596. {
  597. //查询表的所有
  598. var mydb = getErpDBCon(dbType);
  599. if (mydb == null) return null;
  600. if (!mydb.Ado.IsValidConnection())
  601. mydb.Ado.Open();
  602. return mydb.Ado.GetDataTable(sql, parameters);
  603. }
  604. #endregion
  605. #endregion
  606. }
  607. #region 参数类型
  608. /// <summary>
  609. /// 图片保存参数
  610. /// </summary>
  611. [Serializable]
  612. public class ImageSaveParam
  613. {
  614. /// <summary>
  615. /// 保存路径
  616. /// </summary>
  617. public string SavePath { get; set; }
  618. /// <summary>
  619. /// 自动保存
  620. /// </summary>
  621. public bool AutoSave { get; set; }
  622. /// <summary>
  623. /// 自动删除
  624. /// </summary>
  625. public bool AutoDelete { get; set; }
  626. /// <summary>
  627. /// 自动删除日期
  628. /// </summary>
  629. public double AutoDeleteDays { get; set; }
  630. public ImageSaveParam()
  631. {
  632. SavePath = "D:\\AllImageSave";
  633. AutoSave = true;
  634. AutoDelete = true;
  635. AutoDeleteDays = 3;
  636. }
  637. public ImageSaveParam(string path)
  638. {
  639. SavePath = path;
  640. AutoSave = true;
  641. AutoDelete = true;
  642. AutoDeleteDays = 3;
  643. }
  644. }
  645. [Serializable]
  646. public class SysConfigParams
  647. {
  648. #region 缺陷图
  649. /// <summary>
  650. /// 图片保存一级文件夹
  651. /// </summary>
  652. public string ImageDir { get; set; }
  653. /// <summary>
  654. /// 缺陷原大图
  655. /// </summary>
  656. public ImageSaveParam DefectSrcImag { get; set; }
  657. /// <summary>
  658. /// 缺陷合并图
  659. /// </summary>
  660. public ImageSaveParam DefectSplicImag { get; set; }
  661. /// <summary>
  662. /// 缺陷小图
  663. /// </summary>
  664. public ImageSaveParam DefectSmallImag { get; set; }
  665. /// <summary>
  666. /// 相机图
  667. /// </summary>
  668. public ImageSaveParam CamImag { get; set; }
  669. #endregion
  670. #region 功能
  671. /// <summary>
  672. /// 开启蜂鸣器
  673. /// </summary>
  674. public bool OpenBuzzer { get; set; }
  675. /// <summary>
  676. /// 开启门磁
  677. /// </summary>
  678. public bool OpenDoor { get; set; }
  679. /// <summary>
  680. /// 开启IO
  681. /// </summary>
  682. public bool OpenIO { get; set; }
  683. /// <summary>
  684. /// 开启PLC
  685. /// </summary>
  686. public bool OpenPLC { get; set; }
  687. /// <summary>
  688. /// 开启计米器
  689. /// </summary>
  690. public bool OpenLengthCount { get; set; }
  691. /// <summary>
  692. /// 自动运行
  693. /// </summary>
  694. public bool OpenAutoRun { get; set; }
  695. /// <summary>
  696. /// 使用计米停车
  697. /// </summary>
  698. public bool OpenLengthCountStop { get; set; }
  699. /// <summary>
  700. /// AI识别边缘
  701. /// </summary>
  702. //public bool OpenAIEdge { get; set; }
  703. /// <summary>
  704. /// 开启打标
  705. /// </summary>
  706. public bool OpenDB { get; set; }
  707. /// <summary>
  708. /// 开启刹停
  709. /// </summary>
  710. public bool OpenEMGStop { get; set; }
  711. #endregion
  712. #region 硬件传感器通信
  713. /// <summary>
  714. /// 光源串口
  715. /// </summary>
  716. //public LightParams LightCfg { get; set; }
  717. public string LightCom { get; set; }
  718. /// <summary>
  719. /// 光源波特率
  720. /// </summary>
  721. public int LightComBaud { get; set; }
  722. #endregion
  723. #region 计米器通信
  724. /// <summary>
  725. /// 光源串口
  726. /// </summary>
  727. //public LightParams LightCfg { get; set; }
  728. public string LengthCounterCom { get; set; }
  729. /// <summary>
  730. /// 光源波特率
  731. /// </summary>
  732. public int LengthCounterComBaud { get; set; }
  733. #endregion
  734. #region IO/电机/相机
  735. /// <summary>
  736. /// 西门子PLC IP
  737. /// </summary>
  738. public string PLC_IP { get; set; }
  739. /// <summary>
  740. /// 西门子PLC 端口
  741. /// </summary>
  742. public int PLC_Rack { get; set; }
  743. /// <summary>
  744. /// 西门子PLC 端口
  745. /// </summary>
  746. public int PLC_Solt { get; set; }
  747. /// <summary>
  748. /// IO驱动名称
  749. /// </summary>
  750. //public IOParams IOCfg { get; set; }
  751. public string IODevName { get; set; }
  752. /// <summary>
  753. /// IO配置文件路径
  754. /// </summary>
  755. public string IOCfgPath { get; set; }
  756. /// <summary>
  757. /// 相机序号
  758. /// </summary>
  759. public int CamIndex_1 { get; set; }
  760. /// <summary>
  761. /// 相机板卡序号
  762. /// </summary>
  763. public int CamDev_1 { get; set; }
  764. /// <summary>
  765. /// 相机配置文件
  766. /// </summary>
  767. public string CamPath_1 { get; set; }
  768. /// <summary>
  769. /// 相机序号
  770. /// </summary>
  771. public int CamIndex_2 { get; set; }
  772. /// <summary>
  773. /// 相机板卡序号
  774. /// </summary>
  775. public int CamDev_2 { get; set; }
  776. /// <summary>
  777. /// 相机配置文件
  778. /// </summary>
  779. public string CamPath_2 { get; set; }
  780. #endregion
  781. #region 系统
  782. public string AIModelPath { get; set; }
  783. public string ProductPath { get; set; }
  784. public string LogPath { get; set; }
  785. public bool AutoDeleteLog { get; set; }
  786. public double AutoDeleteLogData { get; set; }
  787. /// <summary>
  788. /// 调试:主界面显示复位按钮
  789. /// </summary>
  790. public bool ShowResetBtn { get; set; }
  791. /// <summary>
  792. /// 调试:主界面显示蜂鸣器控制
  793. /// </summary>
  794. public bool ShowBuzz { get; set; }
  795. /// <summary>
  796. /// 调试:主界面显示门磁报警控制
  797. /// </summary>
  798. public bool ShowDoorAlm { get; set; }
  799. /// <summary>
  800. /// 1cm X方向像素
  801. /// </summary>
  802. public int Cm2px_x = 1;
  803. /// <summary>
  804. /// 1cm Y方向像素
  805. /// </summary>
  806. public int Cm2px_y = 1;
  807. /// <summary>
  808. /// 对比度范围阔算
  809. /// </summary>
  810. public int Expand_pixel = 50;
  811. /// <summary>
  812. /// 中间重合像素
  813. /// </summary>
  814. public int MidCoin = 100;
  815. /// <summary>
  816. /// 孔位
  817. /// </summary>
  818. public int HolePx = 100;
  819. /// <summary>
  820. /// 左侧裁剪
  821. /// </summary>
  822. public int LCrop = 0;
  823. /// <summary>
  824. /// 右侧裁剪
  825. /// </summary>
  826. public int RCrop = 0;
  827. /// <summary>
  828. /// 裁剪偏差
  829. /// </summary>
  830. public int Crop_offset = 0;
  831. /// <summary>
  832. /// 相机1X翻转
  833. /// </summary>
  834. public bool Cam1_flipXY { get; set; }
  835. /// <summary>
  836. /// 相机1Y翻转
  837. /// </summary>
  838. //public bool Cam1_flipY { get; set; }
  839. /// <summary>
  840. /// 相机2X翻转
  841. /// </summary>
  842. public bool Cam2_flipXY { get; set; }
  843. /// <summary>
  844. /// 相机2Y翻转
  845. /// </summary>
  846. //public bool Cam2_flipY { get; set; }
  847. #endregion
  848. #region Http/MES
  849. #endregion
  850. #region MQTT本地云/产品服务器
  851. /// <summary>
  852. /// 开启局域网云端
  853. /// </summary>
  854. public bool OpenCloud { get; set; }
  855. public string CloudThisName { get; set; }
  856. public string CloudServerIP { get; set; }
  857. public int CloudServerPort { get; set; }
  858. public string CloudUser { get; set; }
  859. public string CloudPassword { get; set; }
  860. /// <summary>
  861. /// 开启产品转发
  862. /// </summary>
  863. public bool OpenPdtServer { get; set; }
  864. public string PdtServerIP { get; set; }
  865. public int PdtServerPort { get; set; }
  866. /// <summary>
  867. /// 是否作为服务器还是客户端
  868. /// </summary>
  869. public bool IsPdtServer { get; set; }
  870. #endregion
  871. #region BarTender
  872. /// <summary>
  873. /// 开启标签打印
  874. /// </summary>
  875. public bool EnableLabelPrint { get; set; }
  876. /// <summary>
  877. /// 打印机名称
  878. /// </summary>
  879. public string LabelPrinterName { get; set; }
  880. #endregion
  881. #region Excel
  882. /// <summary>
  883. /// 开启Excel打印
  884. /// </summary>
  885. public bool EnableExcelPrint { get; set; }
  886. /// <summary>
  887. /// 打印机名称
  888. /// </summary>
  889. public string ExcelPrinterName { get; set; }
  890. #endregion
  891. #region ERP
  892. /// <summary>
  893. /// 禾欣ERP数据库
  894. /// </summary>
  895. public string ErpDBConStr { get; set; }
  896. /// <summary>
  897. /// 禾欣ERP数据读取
  898. /// </summary>
  899. public string ErpSql { get; set; }
  900. #endregion
  901. #region 客户
  902. /// <summary>
  903. /// 客户名
  904. /// </summary>
  905. public string CustomerName { get; set; }
  906. #endregion
  907. #region 材质配合禾欣
  908. //材质Material
  909. public string[] SuedeList = new string[0];
  910. #endregion
  911. #region 二次判定停车
  912. /// <summary>
  913. /// 停车距离
  914. /// </summary>
  915. public double StopLookDis { get; set; }
  916. /// <summary>
  917. /// 停车减速时间
  918. /// </summary>
  919. public double StopDecTime { get; set; }
  920. /// <summary>
  921. /// 是否会有倒车和过冲
  922. /// </summary>
  923. public bool HaveStopOffsetDis { get; set; }
  924. /// <summary>
  925. /// 偏移补偿数据
  926. /// </summary>
  927. public string StopOffsetDisJson { get; set; }
  928. /// <summary>
  929. /// 不使用计米器时使用图片停车
  930. /// </summary>
  931. public int StopImageCnt { get; set; }
  932. /// <summary>
  933. /// 打标到拍照距离
  934. /// </summary>
  935. public double CamToDBDis { get; set; }
  936. #endregion
  937. #region 告警
  938. //告警limit
  939. public double DefectAreaLimit { get; set; }//面积
  940. public int DefectCountLimit { get; set; }//瑕疵数
  941. public bool DefectPauseForUser { get; set; }//瑕疵二次确认
  942. public List<string> DefectPauseOption { get; set; } = new List<string>();//二次确认过滤瑕疵
  943. /// <summary>
  944. /// 缺陷计数长度
  945. /// </summary>
  946. public double DefectCntLength { get; set; }
  947. /// <summary>
  948. /// 缺陷警告
  949. /// </summary>
  950. public string WarnDefect { get; set; }
  951. /// <summary>
  952. /// 厚度检测暂停距离m
  953. /// </summary>
  954. public int ThicknessDetectionStopDis { get; set; }
  955. /// <summary>
  956. /// 剩余长度提醒
  957. /// </summary>
  958. public double residueWarnningLen { get; set; }
  959. #endregion
  960. #region 传统算法
  961. /// <summary>
  962. /// 传统算法参数路径
  963. /// </summary>
  964. public string HalconDataPath { get; set; }
  965. #endregion
  966. public SysConfigParams()
  967. {
  968. DefectSrcImag = new ImageSaveParam("D:\\Image\\原图");
  969. DefectSmallImag = new ImageSaveParam("D:\\Image\\瑕疵小图");
  970. DefectSplicImag = new ImageSaveParam("D:\\Image\\瑕疵图");
  971. CamImag = new ImageSaveParam("D:\\Image\\相机图");
  972. OpenBuzzer = true;
  973. OpenDoor = true;
  974. OpenIO = true;
  975. OpenPLC = true;
  976. OpenLengthCount = true;
  977. OpenLengthCountStop = true;
  978. IODevName = "";
  979. IOCfgPath = Path.Combine(Directory.GetCurrentDirectory(), "ConfigFiles\\IOCard_default.xml"); ;
  980. LightCom = "";
  981. LightComBaud = 9600;
  982. PLC_IP = "192.168.0.1";
  983. PLC_Rack = 0;
  984. PLC_Solt = 1;
  985. CamIndex_1 = 0;
  986. CamIndex_2 = 0;
  987. CamDev_1 = 0;
  988. CamDev_2 = 1;
  989. CamPath_1 = "";
  990. CamPath_2 = "";
  991. AIModelPath = Path.Combine(Directory.GetCurrentDirectory(), "ConfigFiles\\Models");
  992. ProductPath = Path.Combine(Directory.GetCurrentDirectory(), "ConfigFiles\\Project");
  993. LogPath = Path.Combine(Directory.GetCurrentDirectory(), "LogFiles");
  994. AutoDeleteLog = false;
  995. AutoDeleteLogData = 0;
  996. ShowResetBtn = true;
  997. ShowBuzz = false;
  998. ShowDoorAlm = false;
  999. EnableLabelPrint = false;
  1000. LabelPrinterName = "";
  1001. EnableExcelPrint = false;
  1002. ExcelPrinterName = "";
  1003. OpenCloud = false;
  1004. CloudThisName = "Test";
  1005. CloudServerIP = "127.0.0.1";
  1006. CloudServerPort = 1883;
  1007. CloudUser = "";
  1008. CloudPassword = "";
  1009. OpenPdtServer = false;
  1010. PdtServerIP = "127.0.0.1";
  1011. PdtServerPort = 10573;
  1012. IsPdtServer = true;
  1013. ErpDBConStr = "";
  1014. ErpSql = "";
  1015. CustomerName = "";
  1016. Cam1_flipXY = false;
  1017. Cam2_flipXY = false;
  1018. //Cam2_flipX = false;
  1019. //Cam2_flipY = false;
  1020. StopLookDis = 3;
  1021. StopDecTime = 1;
  1022. HaveStopOffsetDis = false;
  1023. StopImageCnt = 3;
  1024. HalconDataPath = "C:\\Users\\user\\AppData\\Local\\Programs\\MVTec\\HALCON-21.05-Progress\\procedures\\general";
  1025. }
  1026. }
  1027. #endregion
  1028. }