革博士V2程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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