BeltScaleMeterControl.cs 90 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using Common;
  11. using com.hnshituo.core.webapp.vo;
  12. using Infragistics.Win.UltraWinGrid;
  13. using Infragistics.Win.UltraWinEditors;
  14. using System.Threading;
  15. using Infragistics.Win;
  16. using iCore.Rtdb.RtdbTable;
  17. using System.Text.RegularExpressions;
  18. using JC_MeasuringSystem;
  19. namespace BeltScaleSystem
  20. {
  21. public partial class BeltScaleMeterControl : UserControl
  22. {
  23. public BeltScaleMeterControl()
  24. {
  25. InitializeComponent();
  26. this.DoubleBuffered = true;//设置本窗体
  27. SetStyle(ControlStyles.UserPaint, true);
  28. SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
  29. SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲
  30. SetStyle(ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
  31. UpdateStyles();
  32. }
  33. #region 自定义变量
  34. PreBeltScalePreService PreBeltScalePreService = new PreBeltScalePreService();//预报服务
  35. MeterWorkBeltActualService MeterWorkBeltActualService = new MeterWorkBeltActualService();//实绩服务
  36. public PreBeltScaleForecast beltinfo = new PreBeltScaleForecast();//预报实体
  37. MeterWorkBeltTiminginfo beltTiminginfo = new MeterWorkBeltTiminginfo();//定时数据实体
  38. MeterWorkBeltTiminginfo beltTiminginfo1 = new MeterWorkBeltTiminginfo();//定时数据实体
  39. MeterWorkBeltTimingService meterWorkBeltTimingService = new MeterWorkBeltTimingService();//定时数据接口
  40. private MeterWorkBeltXiaopiService workBeltXiaopiService = new MeterWorkBeltXiaopiService();//校皮数据接口
  41. MeterBaseBeltMaterialpmService baseBeltMaterialpmService = new MeterBaseBeltMaterialpmService();//物料系数服务
  42. // public Boolean IsXiaolingA = false, IsXiaolingB = false;//是否校零
  43. FrmMaxBletScale maxscale = null;
  44. public int BtnType = 0;
  45. private Log l = Log.GetInstance(); //日志
  46. List<MeterBaseScalePoint> scalePoints = new List<MeterBaseScalePoint>();//计量点监控数据 目前采用仪表ip
  47. /// <summary>
  48. /// 计量点信息
  49. /// </summary>
  50. public string sPointNo = "", sPointName = "";
  51. /// <summary>
  52. /// 登录人及登陆IP信息
  53. /// </summary>
  54. public string sUserId = "", sUserName = "", sIpAddress = "", userClass = "", userGroup = "";
  55. /// <summary>
  56. /// 物料参数
  57. /// </summary>
  58. public string materialParameter = "", materialParameterB= "", materialParameterImport="", materialParameterImportB="";
  59. public string oldMat = "";
  60. private Boolean IsSaveA=false, IsSaveB=false;
  61. private Boolean Isfrist=true;//第一次进入
  62. public static Boolean IsMaxBelt = false;//是否为放大
  63. private delegate void UpdateUIEventHander(object sender, UpdateUIArgs args); //自定义事件用来从线程中更新控件的值
  64. RESTfulResult<List<MeterWorkBeltActual>> MeterWorkBeltActual_NOW = null;//当前计量的实绩
  65. MeterBaseOperationLogService LogService = new MeterBaseOperationLogService();//日志服务
  66. #endregion
  67. #region 公共方法
  68. private void BeltScaleMeterControl_Load(object sender, EventArgs e)
  69. {
  70. if (!findMoxa()) {
  71. MessageBox.Show("仪表ip获取失败!");
  72. return;
  73. }
  74. InitScaleInfo(scalePoints[0].moxaIp==""?"": scalePoints[0].moxaIp, scalePoints[1].moxaIp==""?"": scalePoints[1].moxaIp);
  75. loadFrom();
  76. InitFrm();
  77. InitGraph();//初始化流量曲线
  78. this.timer1.Start();//流量曲线
  79. realtime.Start();//实时量采集
  80. timer2.Start();//定时数据
  81. Isfrist = false;
  82. }
  83. /// <summary>
  84. /// 解决窗体较多 加载慢的问题
  85. /// </summary>
  86. protected override CreateParams CreateParams
  87. {
  88. get
  89. {
  90. CreateParams cp = base.CreateParams;
  91. cp.ExStyle |= 0x02000000;
  92. return cp;
  93. }
  94. }
  95. //更新UltraTextEditor、Button控件值Convert.ToDouble(txtWeight.Text.Replace("kg", "").Trim())
  96. private void setTedValue(string Ted, string values)
  97. {
  98. try
  99. {
  100. switch (Ted)
  101. {
  102. //A磅
  103. case "instrument_weight_Ted"://仪表重量
  104. this.instrument_weight_Ted.Invoke(new UpdateUIEventHander(UpdateUI_Method), instrument_weight_Ted, new UpdateUIArgs(values, "t"));
  105. break;
  106. case "cumulative_weight_Ted"://当前累计量
  107. this.cumulative_weight_Ted.Invoke(new UpdateUIEventHander(UpdateUI_Method), cumulative_weight_Ted, new UpdateUIArgs(values, "t"));
  108. break;
  109. case "realtime_amount_Ted"://实时量
  110. this.realtime_amount_Ted.Invoke(new UpdateUIEventHander(UpdateUI_Method), realtime_amount_Ted, new UpdateUIArgs(values, "t/h"));
  111. break;
  112. case "belt_speed_Ted"://皮带速度
  113. this.belt_speed_Ted.Invoke(new UpdateUIEventHander(UpdateUI_Method), belt_speed_Ted, new UpdateUIArgs(values, "m/s"));
  114. break;
  115. case "temperature_Ted"://温度
  116. this.temperature_Ted.Invoke(new UpdateUIEventHander(UpdateUI_Method), temperature_Ted, new UpdateUIArgs(values, "℃"));
  117. break;
  118. case "parameter_Ted"://物料参数
  119. this.parameter_Ted.Invoke(new UpdateUIEventHander(UpdateUI_Method), parameter_Ted, new UpdateUIArgs(values, ""));
  120. break;
  121. //B磅
  122. case "instrument_weight_Ted_1"://仪表重量
  123. this.instrument_weight_Ted_1.Invoke(new UpdateUIEventHander(UpdateUI_Method), instrument_weight_Ted_1, new UpdateUIArgs(values, "t"));
  124. break;
  125. case "cumulative_weight_Ted_1"://当前累计量
  126. this.cumulative_weight_Ted_1.Invoke(new UpdateUIEventHander(UpdateUI_Method), cumulative_weight_Ted_1, new UpdateUIArgs(values, "t"));
  127. break;
  128. case "realtime_amount_Ted_1"://实时量
  129. this.realtime_amount_Ted_1.Invoke(new UpdateUIEventHander(UpdateUI_Method), realtime_amount_Ted_1, new UpdateUIArgs(values, "t/h"));
  130. break;
  131. case "belt_speed_Ted_1"://皮带速度
  132. this.belt_speed_Ted_1.Invoke(new UpdateUIEventHander(UpdateUI_Method), belt_speed_Ted_1, new UpdateUIArgs(values, "m/s"));
  133. break;
  134. case "temperature_Ted_1"://温度
  135. this.temperature_Ted_1.Invoke(new UpdateUIEventHander(UpdateUI_Method), temperature_Ted_1, new UpdateUIArgs(values, "℃"));
  136. break;
  137. case "parameter_Ted_1"://物料参数
  138. this.parameter_Ted_1.Invoke(new UpdateUIEventHander(UpdateUI_Method), parameter_Ted_1, new UpdateUIArgs(values, ""));
  139. break;
  140. default:
  141. break;
  142. }
  143. }
  144. catch (Exception ex)
  145. {
  146. throw ex;
  147. }
  148. }
  149. //更新UltraTextEditor、Button控件值
  150. private double getTedValue(string Ted)
  151. {
  152. try
  153. {
  154. switch (Ted)
  155. {
  156. //A磅
  157. case "instrument_weight_Ted"://仪表重量
  158. return Convert.ToDouble(instrument_weight_Ted.Text.Replace("t", "").Trim());
  159. case "cumulative_weight_Ted"://当前累计量
  160. return Convert.ToDouble(cumulative_weight_Ted.Text.Replace("t", "").Trim());
  161. case "realtime_amount_Ted"://实时量
  162. return Convert.ToDouble(realtime_amount_Ted.Text.Replace("t/h", "").Trim());
  163. case "belt_speed_Ted"://皮带速度
  164. return Convert.ToDouble(belt_speed_Ted.Text.Replace("m/s", "").Trim());
  165. case "temperature_Ted"://温度
  166. return Convert.ToDouble(temperature_Ted.Text.Replace("℃", "").Trim());
  167. case "parameter_Ted"://物料参数
  168. return Convert.ToDouble(parameter_Ted.Text);
  169. //B磅
  170. case "instrument_weight_Ted_1"://仪表重量
  171. return Convert.ToDouble(instrument_weight_Ted_1.Text.Replace("t", "").Trim());
  172. case "cumulative_weight_Ted_1"://当前累计量
  173. return Convert.ToDouble(cumulative_weight_Ted_1.Text.Replace("t", "").Trim());
  174. case "realtime_amount_Ted_1"://实时量
  175. return Convert.ToDouble(realtime_amount_Ted_1.Text.Replace("t/h", "").Trim());
  176. case "belt_speed_Ted_1"://皮带速度
  177. return Convert.ToDouble(belt_speed_Ted_1.Text.Replace("m/s", "").Trim());
  178. case "temperature_Ted_1"://温度
  179. return Convert.ToDouble(temperature_Ted_1.Text.Replace("℃", "").Trim());
  180. case "parameter_Ted_1"://物料参数
  181. return Convert.ToDouble(parameter_Ted_1.Text);
  182. default:
  183. return 0;
  184. }
  185. }
  186. catch (Exception ex)
  187. {
  188. throw ex;
  189. }
  190. }
  191. /// <summary>
  192. /// 更新界面的UI
  193. /// </summary>
  194. /// <param name="sender"></param>
  195. /// <param name="args"></param>
  196. private void UpdateUI_Method(object sender, UpdateUIArgs args)
  197. {
  198. if (sender is UltraTextEditor)
  199. {
  200. if (args.textValue == "" || args.textValue == null)
  201. {
  202. ((UltraTextEditor)sender).Text = "0 " + args.unitValue;
  203. }
  204. else
  205. {
  206. ((UltraTextEditor)sender).Text = args.textValue + " " + args.unitValue;
  207. }
  208. }
  209. else if (sender is Button)
  210. {
  211. if (args.textValue == "red")
  212. {
  213. ((Button)sender).BackColor = Color.Red;
  214. ((Button)sender).ForeColor = Color.White;
  215. }
  216. else if (args.textValue == "green")
  217. {
  218. ((Button)sender).BackColor = Color.White;
  219. ((Button)sender).ForeColor = Color.Black;
  220. }
  221. else
  222. {
  223. ((Label)sender).Text = args.textValue;
  224. }
  225. }
  226. }
  227. public class UpdateUIArgs : EventArgs
  228. {
  229. public string textValue { get; private set; }
  230. public string unitValue { get; private set; }
  231. public UpdateUIArgs(string textValue, string unit)
  232. {
  233. this.textValue = textValue;
  234. this.unitValue = unit;
  235. }
  236. }
  237. //填充窗口表单
  238. private void autoAutoFill(PreBeltScaleForecast forecast)
  239. {
  240. if (forecast == null || string.IsNullOrEmpty(forecast.predictionNo))
  241. {
  242. return;
  243. }
  244. //A磅
  245. predictionNoTxt.Text = forecast.predictionNo; //预报编号
  246. mat_nameTxt.Text = forecast.newMatName; //物料
  247. shippingTxt.Text = forecast.newSupplier; //发货
  248. receivingTxt.Text = forecast.receivingUintName;//收货
  249. findActualById(forecast.predictionNo);
  250. }
  251. //加载表格数据
  252. private void loadFrom() {
  253. //预报表转换
  254. ValueList vlistFlag1 = new ValueList();
  255. vlistFlag1.ValueListItems.Add("0", "无效");
  256. vlistFlag1.ValueListItems.Add("1", "未使用");
  257. vlistFlag1.ValueListItems.Add("2", "使用中");
  258. vlistFlag1.ValueListItems.Add("3", "已完成");
  259. this.ultraGrid1.DisplayLayout.Bands[0].Columns["valueFlag"].ValueList = vlistFlag1;
  260. queryActual();
  261. queryScale();
  262. querytiminginfo();
  263. }
  264. //初始化加载界面
  265. private void InitFrm()
  266. {
  267. this.PntNameLabel.Text = sPointName;//计量点
  268. this.UserNameLabel.Text = sUserName;//计量员
  269. //设置grid不可编辑
  270. GridHelper.SetExcludeColumnsActive(ultraGrid1.DisplayLayout.Bands[0], "");
  271. GridHelper.SetExcludeColumnsActive(ultraGrid2.DisplayLayout.Bands[0], "");
  272. GridHelper.SetExcludeColumnsActive(ultraGrid3.DisplayLayout.Bands[0], "");
  273. GridHelper.SetExcludeColumnsActive(ultraGridActual.DisplayLayout.Bands[0], "");
  274. }
  275. //清空计量预报数据
  276. private void ClearFromInfo() {
  277. predictionNoTxt.Text = ""; //预报编号
  278. mat_nameTxt.Text = ""; //物料
  279. shippingTxt.Text = ""; //发货
  280. receivingTxt.Text = "";//收货
  281. }
  282. //修改计量按钮样式
  283. private void UpdateControl(int id)
  284. {
  285. switch (id)
  286. {
  287. case 0://默认
  288. startMerterBtn.Enabled = true;
  289. startMerterBtn_1.Enabled = true;
  290. ClearFromInfo();//清空预报
  291. break;
  292. case 1:
  293. startMerterBtn.Enabled = false;
  294. break;
  295. case 2:
  296. startMerterBtn_1.Enabled = false;
  297. break;
  298. case 3:
  299. startMerterBtn.Enabled = true;
  300. if (startMerterBtn_1.Enabled == true)
  301. {
  302. ClearFromInfo();//清空预报
  303. }
  304. break;
  305. case 4:
  306. startMerterBtn_1.Enabled = true;
  307. if (startMerterBtn.Enabled == true)
  308. {
  309. ClearFromInfo();//清空预报
  310. }
  311. break;
  312. case 9:
  313. startMerterBtn.Enabled = false;
  314. startMerterBtn_1.Enabled = false;
  315. break;
  316. }
  317. }
  318. private void startMerterBtn_EnabledChanged(object sender, EventArgs e)
  319. {
  320. if (startMerterBtn.Enabled == true)
  321. {
  322. startMerterBtn.BackColor = Color.LimeGreen;
  323. endMerterBtn.BackColor = Color.Silver;
  324. endMerterBtn.Enabled = false;
  325. }
  326. else {
  327. startMerterBtn.BackColor = Color.Silver;
  328. endMerterBtn.BackColor = Color.LimeGreen;
  329. endMerterBtn.Enabled = true;
  330. }
  331. }
  332. private void startMerterBtn_1_EnabledChanged(object sender, EventArgs e)
  333. {
  334. if (startMerterBtn_1.Enabled == true)
  335. {
  336. startMerterBtn_1.BackColor = Color.LimeGreen;
  337. endMerterBtn_1.BackColor = Color.Silver;
  338. endMerterBtn_1.Enabled = false;
  339. }
  340. else
  341. {
  342. startMerterBtn_1.BackColor = Color.Silver;
  343. endMerterBtn_1.BackColor = Color.LimeGreen;
  344. endMerterBtn_1.Enabled = true;
  345. }
  346. }
  347. //A开始校零
  348. private void startZeroBtn_EnabledChanged(object sender, EventArgs e)
  349. {
  350. if (startZeroBtn.Enabled == true)//开始校零为true时
  351. {
  352. startZeroBtn.BackColor = Color.LimeGreen;//开始
  353. ConfirmCalibrate.BackColor = Color.Silver;//确认
  354. ConfirmCalibrate.Enabled = false;
  355. CancelCalibrate.BackColor = Color.Silver;//放弃
  356. CancelCalibrate.Enabled = false;
  357. ClearTotal.BackColor = Color.LimeGreen;//累计量清零
  358. ClearTotal.Enabled = true;
  359. }
  360. else
  361. {
  362. startZeroBtn.BackColor = Color.Silver;//开始
  363. ConfirmCalibrate.BackColor = Color.LimeGreen;//确认
  364. ConfirmCalibrate.Enabled = true;
  365. CancelCalibrate.BackColor = Color.LimeGreen;//放弃
  366. CancelCalibrate.Enabled = true;
  367. ClearTotal.BackColor = Color.Silver;//累计
  368. ClearTotal.Enabled = true;
  369. ClearTotal.BackColor = Color.Silver;//累计
  370. ClearTotal.Enabled = false;
  371. }
  372. }
  373. private void startZeroBtn_1_EnabledChanged(object sender, EventArgs e)
  374. {
  375. if (startZeroBtn_1.Enabled == true)//开始校零为true时
  376. {
  377. startZeroBtn_1.BackColor = Color.LimeGreen;//开始
  378. ConfirmCalibrate_1.BackColor = Color.Silver;//确认
  379. ConfirmCalibrate_1.Enabled = false;
  380. CancelCalibrate_1.BackColor = Color.Silver;//放弃
  381. CancelCalibrate_1.Enabled = false;
  382. ClearTotal_1.BackColor = Color.LimeGreen;//累计
  383. ClearTotal_1.Enabled = false;
  384. ClearTotal_1.BackColor = Color.LimeGreen;//累计
  385. ClearTotal_1.Enabled = true;
  386. }
  387. else
  388. {
  389. startZeroBtn_1.BackColor = Color.Silver;//开始
  390. ConfirmCalibrate_1.BackColor = Color.LimeGreen;//确认
  391. ConfirmCalibrate_1.Enabled = true;
  392. CancelCalibrate_1.BackColor = Color.LimeGreen;//放弃
  393. CancelCalibrate_1.Enabled = true;
  394. ClearTotal_1.BackColor = Color.Silver;//累计
  395. ClearTotal_1.Enabled = true;
  396. ClearTotal_1.BackColor = Color.Silver;//累计
  397. ClearTotal_1.Enabled = false;
  398. }
  399. }
  400. //查找moxaip
  401. private Boolean findMoxa() {
  402. MeterBaseScalePointService monitorService = new MeterBaseScalePointService();
  403. RESTfulResult<List<MeterBaseScalePoint>> rmMonitor = monitorService.doQueryWf(new MeterBaseScalePoint { validFlag = "1", baseSpotNo = sPointNo });
  404. if (rmMonitor.Succeed)
  405. {
  406. scalePoints = rmMonitor.Data;
  407. return true;
  408. }
  409. else
  410. {
  411. l.WriteLog("皮带秤计量异常_", "获取仪表ip失败" + rmMonitor.Message);
  412. return false;
  413. }
  414. }
  415. //字符串分割 用于物料系数 目前没用到
  416. static string[] strProcess(string str)
  417. {
  418. string strProcessed;
  419. string pass = @"[\t\r\n\s]";
  420. strProcessed = Regex.Replace(str, pass, ""); //去掉、回车、换行、空格
  421. int strLength = strProcessed.Length; //统计经处理后的字符长度
  422. //判断待处理的字符串长度是否符合要求,并给出提示
  423. if (strLength % 2 != 0)
  424. {
  425. int absenceNum = 2 - strLength % 2;
  426. string notification = $"注意:请物料系数是否正确!\r\n[提示:数据似乎缺少{absenceNum}位数字数符]";
  427. MessageBox.Show(notification, "Tips", MessageBoxButtons.OK, MessageBoxIcon.Information);
  428. }
  429. int byteLength = strProcessed.Length / 2; //统计分割后字符数组长度,数组中每个元素长度为四个字节
  430. string[] strArrayH = new string[byteLength]; //存放字符串
  431. //将字符串分割为长度为2的字符数组
  432. for (int i = 0; i < (byteLength); i = i + 1)
  433. {
  434. try
  435. {
  436. strArrayH[i] = strProcessed.Substring(2 * i, 2);//i-起始位置,4-子串长度
  437. }
  438. catch (Exception e)
  439. {
  440. MessageBox.Show(e.ToString(), "异常提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
  441. continue;
  442. }
  443. }
  444. return strArrayH;
  445. }
  446. //限制不允许输入汉字和特殊字符
  447. private void A_mat_KeyPress(object sender, KeyPressEventArgs e)
  448. {
  449. int keyValue = (int)e.KeyChar;
  450. if ((keyValue >= 48 && keyValue <= 57) || keyValue == 8 || keyValue == 46)
  451. {
  452. if (sender != null && sender is TextBox && keyValue == 46)
  453. {
  454. if (((TextBox)sender).Text.IndexOf(".") >= 0)
  455. e.Handled = true;
  456. else
  457. e.Handled = false;
  458. }
  459. else
  460. e.Handled = false;
  461. }
  462. else
  463. e.Handled = true;
  464. }
  465. private void B_mat_KeyPress(object sender, KeyPressEventArgs e)
  466. {
  467. int keyValue = (int)e.KeyChar;
  468. if ((keyValue >= 48 && keyValue <= 57) || keyValue == 8 || keyValue == 46)
  469. {
  470. if (sender != null && sender is TextBox && keyValue == 46)
  471. {
  472. if (((TextBox)sender).Text.IndexOf(".") >= 0)
  473. e.Handled = true;
  474. else
  475. e.Handled = false;
  476. }
  477. else
  478. e.Handled = false;
  479. }
  480. else
  481. e.Handled = true;
  482. }
  483. #endregion
  484. #region 表格查询相关
  485. /// <summary>
  486. /// 预报查询接口
  487. /// </summary>
  488. private void queryScale(Boolean IsDoubleClik=true)
  489. {
  490. try
  491. {
  492. DataTable dtScaleTable = dataTable1.Clone();
  493. CommonPage<PreBeltScaleForecast> cp = new CommonPage<PreBeltScaleForecast>();
  494. cp.startTime = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd HH:mm:ss");
  495. cp.endTime = DateTime.Now.AddHours(1).ToString("yyyy-MM-dd HH:mm:ss");
  496. cp.param = new PreBeltScaleForecast { valueFlag = "8", baseSpotNo = sPointNo }; //状态为8时 查询1和2
  497. RESTfulResult<List<PreBeltScaleForecast>> rms = PreBeltScalePreService.doQueryTenWf(cp);
  498. if (rms.Succeed)
  499. {
  500. if (rms.Data != null && rms.Data.Count > 0)
  501. {
  502. dtScaleTable = rms.Data.ListToDataTable<PreBeltScaleForecast>();
  503. ClsControlPack.CopyDataToDatatable(ref dtScaleTable, ref dataTable1, true);
  504. foreach (UltraGridRow ugr in ultraGrid1.Rows)
  505. {
  506. if (ugr.Cells["valueFlag"].Value.ToString() == "2")
  507. {
  508. ugr.Appearance.BackColor = Color.YellowGreen;
  509. if (IsDoubleClik) {
  510. ultraGrid1_DoubleClickRow_Check(ugr);
  511. }
  512. }
  513. }
  514. ClsControlPack.RefreshAndAutoSize(ultraGrid1);
  515. }
  516. else
  517. {
  518. ClearFromInfo();
  519. dtScaleTable.Clear();
  520. ClsControlPack.CopyDataToDatatable(ref dtScaleTable, ref dataTable1, true);
  521. ClsControlPack.RefreshAndAutoSize(ultraGrid1);
  522. }
  523. }
  524. }
  525. catch (Exception ex)
  526. {
  527. MessageBox.Show("失败" + ex.Message);
  528. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  529. }
  530. }
  531. /// <summary>
  532. /// 定时数据查询接口
  533. /// </summary>
  534. private void querytiminginfo()
  535. {
  536. try
  537. {
  538. DataTable dtTmingTable = dataTable3.Clone();
  539. CommonPage<MeterWorkBeltTiminginfo> cp = new CommonPage<MeterWorkBeltTiminginfo>();
  540. cp.startTime = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd HH:mm:ss");
  541. cp.endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  542. cp.param = new MeterWorkBeltTiminginfo { valueFlag = "1", baseSpotNo = sPointNo, scaleName = "A",weightType="0" };
  543. RESTfulResult<List<MeterWorkBeltTiminginfo>> rms = meterWorkBeltTimingService.doQueryWf(cp);
  544. DataTable dtTmingTable1 = dataTable4.Clone();
  545. CommonPage<MeterWorkBeltTiminginfo> cp1 = new CommonPage<MeterWorkBeltTiminginfo>();
  546. cp1.startTime = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd HH:mm:ss");
  547. cp1.endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  548. cp1.param = new MeterWorkBeltTiminginfo { valueFlag = "1", baseSpotNo = sPointNo, scaleName = "B", weightType = "0" };
  549. RESTfulResult<List<MeterWorkBeltTiminginfo>> rms1 = meterWorkBeltTimingService.doQueryWf(cp1);
  550. if (rms.Succeed && rms1.Succeed)
  551. {
  552. if (rms.Data != null && rms.Data.Count > 0)
  553. {
  554. dtTmingTable = rms.Data.ListToDataTable<MeterWorkBeltTiminginfo>();
  555. ClsControlPack.CopyDataToDatatable(ref dtTmingTable, ref dataTable3, true);
  556. ClsControlPack.RefreshAndAutoSize(ultraGrid2);
  557. foreach (UltraGridRow ugr in ultraGrid2.Rows)
  558. {
  559. ugr.Cells["weightDiff"].Value = ugr.Cells["weightDiff"].Value.ToString() + "%";
  560. }
  561. }
  562. else
  563. {
  564. dtTmingTable.Clear();
  565. ClsControlPack.CopyDataToDatatable(ref dtTmingTable, ref dataTable3, true);
  566. ClsControlPack.RefreshAndAutoSize(ultraGrid2);
  567. }
  568. if (rms1.Data != null && rms1.Data.Count > 0)
  569. {
  570. dtTmingTable1 = rms1.Data.ListToDataTable<MeterWorkBeltTiminginfo>();
  571. ClsControlPack.CopyDataToDatatable(ref dtTmingTable1, ref dataTable4, true);
  572. ClsControlPack.RefreshAndAutoSize(ultraGrid3);
  573. }
  574. else
  575. {
  576. dtTmingTable1.Clear();
  577. ClsControlPack.CopyDataToDatatable(ref dtTmingTable1, ref dataTable4, true);
  578. ClsControlPack.RefreshAndAutoSize(ultraGrid3);
  579. }
  580. }
  581. }
  582. catch (Exception ex)
  583. {
  584. MessageBox.Show("失败" + ex.Message);
  585. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  586. }
  587. }
  588. /// <summary>
  589. /// 双击grid 赋值预报
  590. /// </summary>
  591. /// <param name="sender"></param>
  592. /// <param name="e"></param>
  593. private void ultraGrid1_DoubleClickRow(object sender, DoubleClickRowEventArgs e)
  594. {
  595. try
  596. {
  597. UltraGridRow row = ultraGrid1.ActiveRow;
  598. if (ultraGrid1.ActiveRow == null)
  599. {
  600. return;
  601. }
  602. if (startMerterBtn.Enabled == true && startMerterBtn_1.Enabled == true)
  603. { //在计量过程中不允许替换预报
  604. //界面赋值
  605. ultraGrid1_DoubleClickRow_Check(row);
  606. }
  607. else
  608. {
  609. if (row.Cells["valueFlag"].Text.Trim() == "使用中")
  610. {
  611. ultraGrid1_DoubleClickRow_Check(row);
  612. }
  613. else {
  614. MessageBox.Show("在计量过程中不允许更换其他预报!");
  615. return;
  616. }
  617. }
  618. }
  619. catch (Exception ex)
  620. {
  621. MessageBox.Show("ultraGrid1_ClickCell方法处理异常:" + ex);
  622. }
  623. }
  624. private void ultraGrid1_DoubleClickRow_Check(UltraGridRow ugr) {
  625. try {
  626. //重置物料系数
  627. materialParameter = "";
  628. materialParameterB = "";
  629. materialParameterImport = "";
  630. materialParameterImportB = "";
  631. CommonPage<PreBeltScaleForecast> cp = new CommonPage<PreBeltScaleForecast>();
  632. // cp.param = new PreBeltScaleForecast { valueFlag = "8", baseSpotNo = sPointNo }; //状态为8时 查询1和2
  633. if (ugr != null)
  634. {
  635. beltinfo.predictionNo = ugr.Cells["predictionNo"].Text.Trim(); //预报编号
  636. beltinfo.newMatName = ugr.Cells["newMatName"].Text.Trim(); //物料名称
  637. if (oldMat!= mat_nameTxt.Text.ToString()) {
  638. oldMat = mat_nameTxt.Text.ToString();//赋值旧物料
  639. }
  640. beltinfo.newSupplier = ugr.Cells["newSupplier"].Text.Trim();//发货单位
  641. beltinfo.receivingUintName = ugr.Cells["receivingUintName"].Text.Trim(); //收货单位
  642. beltinfo.forwardingUnitNo = ugr.Cells["forwardingUnitNo"].Text.Trim();//发货单位编号
  643. beltinfo.receivingUintNo = ugr.Cells["receivingUintNo"].Text.Trim();//收货单位编号
  644. beltinfo.productNo = ugr.Cells["productNo"].Text.Trim();//物料编号
  645. beltinfo.valueFlag = ugr.Cells["valueFlag"].Text.Trim();//状态
  646. autoAutoFill(beltinfo);
  647. beltinfo.newMatClass = ugr.Cells["newMatClass"].Text.Trim();//获取物料类别
  648. beltinfo.baseSpotNo = sPointNo;
  649. beltinfo.valueFlag = "1";
  650. cp.memo1 = "A";
  651. cp.param = beltinfo;
  652. RESTfulResult<List<MeterBasemeterMaterialpm>> rms = baseBeltMaterialpmService.doQueryByBeltType(cp);
  653. if (rms.Data.Count > 0&& !Isfrist)
  654. {
  655. materialParameter = rms.Data[0].materialParameter.ToString();
  656. materialParameterImport = rms.Data[0].materialParameterImport.ToString();
  657. Boolean IsUpdateMatPm = false;
  658. //根据进口或者非进口的来修改物料参数
  659. if (materialParameterImport != ""&& beltinfo.newMatClass.Contains("进口"))
  660. {
  661. if (materialParameterImport != getTedValue("parameter_Ted").ToString())
  662. {
  663. // megA.Text = "物料参数:进口" + materialParameterImport;
  664. if (MessageBox.Show("物料参数不一致,是否更改物料参数?", sPointName + " A秤", MessageBoxButtons.YesNo) == DialogResult.Yes)//如果点击“确定”按钮
  665. {
  666. updateMatParameter(materialParameterImport, "A");
  667. IsUpdateMatPm = true;
  668. }
  669. }
  670. }
  671. if (materialParameter != ""&& !beltinfo.newMatClass.Contains("进口"))
  672. {
  673. if (materialParameter != getTedValue("parameter_Ted").ToString())
  674. {
  675. // megA.Text = "物料参数:国内" + materialParameter;
  676. if (MessageBox.Show("物料参数不一致,是否更改物料参数?", sPointName + " A秤", MessageBoxButtons.YesNo) == DialogResult.Yes)//如果点击“确定”按钮
  677. {
  678. updateMatParameter(materialParameter, "A");
  679. IsUpdateMatPm = true;
  680. }
  681. }
  682. }
  683. cp.memo1 = "B";
  684. rms = baseBeltMaterialpmService.doQueryByBeltType(cp);
  685. if (rms.Data.Count > 0)
  686. {
  687. materialParameterB = rms.Data[0].materialParameter.ToString();
  688. materialParameterImportB = rms.Data[0].materialParameterImport.ToString();
  689. }
  690. if (beltinfo.newMatClass.Contains("进口") && materialParameterImportB != "")
  691. {
  692. //根据进口或者非进口的来修改物料参数
  693. if ( materialParameterImportB != getTedValue("parameter_Ted_1").ToString())
  694. {
  695. // megB.Text = "物料参数:进口" + materialParameterImportB;
  696. if (MessageBox.Show("物料参数不一致,是否更改物料参数?", sPointName + " B秤", MessageBoxButtons.YesNo) == DialogResult.Yes)//如果点击“确定”按钮
  697. {
  698. updateMatParameter(materialParameterImportB, "B");
  699. IsUpdateMatPm = true;
  700. }
  701. }
  702. }
  703. if (!beltinfo.newMatClass.Contains("进口") && materialParameterB != "")
  704. {
  705. if ( materialParameterB != getTedValue("parameter_Ted_1").ToString())
  706. {
  707. //megB.Text = "物料参数:国内" + materialParameterB ;
  708. if (MessageBox.Show("物料参数不一致,是否更改物料参数?", sPointName + " B秤", MessageBoxButtons.YesNo) == DialogResult.Yes)//如果点击“确定”按钮
  709. {
  710. updateMatParameter(materialParameterB, "B");
  711. IsUpdateMatPm = true;
  712. }
  713. }
  714. }
  715. if (IsUpdateMatPm) {
  716. MessageBox.Show("更改系数完成,请核对!");
  717. }
  718. }
  719. }
  720. if (MeterWorkBeltActual_NOW != null&& MeterWorkBeltActual_NOW.Data != null) {
  721. if (MeterWorkBeltActual_NOW.Data.Count == 1)
  722. {
  723. if (MeterWorkBeltActual_NOW.Data[0].scaleName == "A" )
  724. {
  725. if (MeterWorkBeltActual_NOW.Data[0].endTime != null)
  726. {
  727. startMerterBtn.Enabled = true; IsSaveA = false;
  728. }
  729. else {
  730. startMerterBtn.Enabled = false; IsSaveA = true;
  731. }
  732. }
  733. if (MeterWorkBeltActual_NOW.Data[0].scaleName == "B")
  734. {
  735. if (MeterWorkBeltActual_NOW.Data[0].endTime != null)
  736. {
  737. startMerterBtn_1.Enabled = true; IsSaveB = false;
  738. }
  739. else {
  740. startMerterBtn_1.Enabled = false; IsSaveB = true;
  741. }
  742. }
  743. }
  744. else if (MeterWorkBeltActual_NOW.Data.Count == 2)
  745. {
  746. if (MeterWorkBeltActual_NOW.Data[0].scaleName == "A") {
  747. if (MeterWorkBeltActual_NOW.Data[0].endTime == null&& MeterWorkBeltActual_NOW.Data[0].startTime != null) {
  748. _startWeight1 = Convert.ToDouble(MeterWorkBeltActual_NOW.Data[0].startWeight);
  749. IsSaveA = true;
  750. UpdateControl(1);//A开始计量
  751. }
  752. }
  753. if (MeterWorkBeltActual_NOW.Data[0].scaleName == "B")
  754. {
  755. if (MeterWorkBeltActual_NOW.Data[0].endTime == null && MeterWorkBeltActual_NOW.Data[0].startTime != null)
  756. {
  757. UpdateControl(2);//B开始计量
  758. _startWeight2 = Convert.ToDouble(MeterWorkBeltActual_NOW.Data[0].startWeight);
  759. IsSaveB = true;
  760. }
  761. }
  762. if (MeterWorkBeltActual_NOW.Data[1].scaleName == "A")
  763. {
  764. if (MeterWorkBeltActual_NOW.Data[1].endTime == null && MeterWorkBeltActual_NOW.Data[1].startTime != null)
  765. {
  766. _startWeight1 = Convert.ToDouble(MeterWorkBeltActual_NOW.Data[1].startWeight);
  767. IsSaveA = true;
  768. UpdateControl(1);//A开始计量
  769. }
  770. }
  771. if (MeterWorkBeltActual_NOW.Data[1].scaleName == "B")
  772. {
  773. if (MeterWorkBeltActual_NOW.Data[1].endTime == null && MeterWorkBeltActual_NOW.Data[1].startTime != null)
  774. {
  775. UpdateControl(2);//B开始计量
  776. _startWeight2 = Convert.ToDouble(MeterWorkBeltActual_NOW.Data[1].startWeight);
  777. IsSaveB = true;
  778. }
  779. }
  780. }
  781. }
  782. }
  783. catch (Exception ex)
  784. {
  785. MessageBox.Show("失败" + ex.Message);
  786. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  787. }
  788. }
  789. //根据预报编码查询实绩
  790. private void findActualById(string predictionNo) {
  791. try {
  792. MeterWorkBeltActual_NOW = null;//清空
  793. CommonPage<MeterWorkBeltActual> cp2 = new CommonPage<MeterWorkBeltActual>();
  794. MeterWorkBeltActual meterWorkBeltActual = new MeterWorkBeltActual();
  795. if (predictionNoTxt.Text.Trim() != "")
  796. {
  797. meterWorkBeltActual.valueFlag = "1";
  798. meterWorkBeltActual.baseSpotNo = sPointNo;
  799. meterWorkBeltActual.predictionNo = predictionNo;
  800. cp2.param = meterWorkBeltActual;
  801. MeterWorkBeltActual_NOW = MeterWorkBeltActualService.doQuery(cp2.param);
  802. }
  803. }
  804. catch (Exception ex)
  805. {
  806. MessageBox.Show("失败" + ex.Message);
  807. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  808. }
  809. }
  810. /// <summary>
  811. /// 实绩查询接口
  812. /// </summary>
  813. private void queryActual()
  814. {
  815. try
  816. {
  817. DataTable dtScaleTable = dataTable5.Clone();
  818. CommonPage<MeterWorkBeltActual> cp = new CommonPage<MeterWorkBeltActual>();
  819. cp.param = new MeterWorkBeltActual { valueFlag = "1", baseSpotNo = sPointNo,startTime=DateTime.Now
  820. };
  821. cp.startTime = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd HH:mm:ss");
  822. cp.endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  823. RESTfulResult<List<MeterWorkBeltActual>> rms = MeterWorkBeltActualService.doQueryAndMultiple(cp);
  824. if (rms.Succeed)
  825. {
  826. if (rms.Data != null && rms.Data.Count > 0)
  827. {
  828. dtScaleTable = rms.Data.ListToDataTable<MeterWorkBeltActual>();
  829. ClsControlPack.CopyDataToDatatable(ref dtScaleTable, ref dataTable5, true);
  830. ClsControlPack.RefreshAndAutoSize(ultraGridActual);
  831. }
  832. else
  833. {
  834. dtScaleTable.Clear();
  835. ClsControlPack.CopyDataToDatatable(ref dtScaleTable, ref dataTable5, true);
  836. ClsControlPack.RefreshAndAutoSize(ultraGridActual);
  837. }
  838. }
  839. }
  840. catch (Exception ex)
  841. {
  842. MessageBox.Show("失败" + ex.Message);
  843. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  844. }
  845. }
  846. #endregion
  847. #region 采集赋值
  848. protected delegate void WeightChangeDelegate(MeasData measData);
  849. private CoreStrapMeas _strapMeter1 = null;
  850. private CoreStrapMeas _strapMeter2 = null;
  851. private double _curTotalWeight1 = 0;//当前累计量
  852. private double _curTotalWeight2 = 0;
  853. private double _startWeight1 = 0;//起始量
  854. private double _startWeight2 = 0;
  855. public void OnWeightChanged1(object sender, MeasEventArgs e)
  856. {
  857. string aa = this.Name;
  858. if (!_strapMeter1.IsClose)
  859. {
  860. WeightChangeDelegate dlg = new WeightChangeDelegate(WeightChange1);
  861. Invoke(dlg, e.Value);
  862. }
  863. }
  864. public void OnWeightChanged2(object sender, MeasEventArgs e)
  865. {
  866. if (!_strapMeter1.IsClose)
  867. {
  868. string aa = this.Name;
  869. WeightChangeDelegate dlg = new WeightChangeDelegate(WeightChange2);
  870. Invoke(dlg, e.Value);
  871. }
  872. }
  873. private void InitScaleInfo(string measaddr1,string measaddr2) {
  874. string meastype1 = "SA600";
  875. string meastype2 = "SA600";
  876. if (!string.IsNullOrEmpty(meastype1)&&!string.IsNullOrEmpty(measaddr1))
  877. {
  878. _strapMeter1 = new CoreStrapMeas(ConvertMeasType(meastype1));
  879. _strapMeter1.onMeasChanged += new MeasChangedEventHandler(OnWeightChanged1);
  880. if (!_strapMeter1.Open(measaddr1))
  881. {
  882. MessageBox.Show("A秤打开失败,请检查仪表连接!");
  883. l.WriteLog("皮带秤计量异常_", "A秤打开失败,请检查仪表连接!");
  884. return;
  885. }
  886. }
  887. if (!string.IsNullOrEmpty(meastype2)&&!string.IsNullOrEmpty(measaddr2))
  888. {
  889. _strapMeter2 = new CoreStrapMeas(ConvertMeasType(meastype2));
  890. _strapMeter2.onMeasChanged += new MeasChangedEventHandler(OnWeightChanged2);
  891. if (!_strapMeter2.Open(measaddr2))
  892. {
  893. MessageBox.Show("B秤打开失败,请检查仪表连接!");
  894. l.WriteLog("皮带秤计量异常_", "B秤打开失败,请检查仪表连接!");
  895. return;
  896. }
  897. }
  898. }
  899. public void WeightChange1(MeasData measData)
  900. {
  901. try
  902. {
  903. setTedValue("instrument_weight_Ted", Math.Round(measData.Total, 2).ToString());//仪表重量
  904. if (IsSaveA) {
  905. setTedValue("cumulative_weight_Ted", Math.Round(measData.Total - _startWeight1, 2).ToString());//累计量
  906. }
  907. setTedValue("realtime_amount_Ted", Math.Round(measData.Flow, 2).ToString());//实时量
  908. setTedValue("belt_speed_Ted", Math.Round(measData.BeltSpeed, 2).ToString());//皮带速度
  909. setTedValue("temperature_Ted", Math.Round(measData.FieldTemp, 2).ToString());//温度
  910. setTedValue("parameter_Ted", measData.StdValue.ToString());//物料参数
  911. _curTotalWeight1 = Math.Round(measData.Total, 2);
  912. label36.Text = measData.IsConnect ? "" : "仪表连接异常,请检查仪表连接状态!";
  913. if (measData.IsConnect)
  914. {
  915. label36.Text = measData.MeterStatus ? "" : "A仪表为校秤状态!";
  916. }
  917. //向查看控件传输
  918. if (IsMaxBelt && maxscale != null)
  919. {
  920. maxscale.measDataA = measData;
  921. maxscale._curTotalWeight1 = _curTotalWeight1;
  922. maxscale._startWeight1 = _startWeight1;
  923. }
  924. }
  925. catch (Exception ex)
  926. {
  927. MessageBox.Show("失败" + ex.Message);
  928. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  929. }
  930. }
  931. public void WeightChange2(MeasData measData)
  932. {
  933. try
  934. {
  935. setTedValue("instrument_weight_Ted_1", Math.Round(measData.Total, 2).ToString());//仪表重量
  936. if (IsSaveB) {
  937. setTedValue("cumulative_weight_Ted_1", Math.Round(measData.Total - _startWeight2, 2).ToString());//累计量
  938. }
  939. setTedValue("realtime_amount_Ted_1", Math.Round(measData.Flow, 2).ToString());//实时量
  940. setTedValue("belt_speed_Ted_1", Math.Round(measData.BeltSpeed, 2).ToString());//皮带速度
  941. setTedValue("temperature_Ted_1", Math.Round(measData.FieldTemp, 2).ToString());//温度
  942. setTedValue("parameter_Ted_1", measData.StdValue.ToString());//物料参数
  943. _curTotalWeight2 = Math.Round(measData.Total, 2);
  944. label37.Text = measData.IsConnect ? "" : "仪表连接异常,请检查仪表连接状态!";
  945. if (measData.IsConnect)
  946. {
  947. label37.Text = measData.MeterStatus ? "" : "B仪表为校秤状态!";
  948. }
  949. //向查看控件传输
  950. if (IsMaxBelt && maxscale != null)
  951. {
  952. maxscale.measDataB = measData;
  953. maxscale._curTotalWeight2 = _curTotalWeight2;
  954. maxscale._startWeight2 = _startWeight2;
  955. }
  956. }
  957. catch (Exception ex)
  958. {
  959. MessageBox.Show("失败" + ex.Message);
  960. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  961. }
  962. }
  963. private StrapMeasType ConvertMeasType(string measTypeStr)
  964. {
  965. return StrapMeasType.SA600;
  966. }
  967. #endregion
  968. #region 绘制曲线
  969. private StrapSeries _series1 = new StrapSeries();
  970. private StrapSeries _series2 = new StrapSeries();
  971. private const int _maxPointCount = 300;
  972. //初始化流量曲线
  973. private void InitGraph()
  974. {
  975. ultraChart1.Series.Clear();
  976. ultraChart2.Series.Clear();
  977. ultraChart1.Series.Add(_series1);
  978. ultraChart2.Series.Add(_series2);
  979. StrapDataPoint point = new StrapDataPoint();
  980. point.NumericValue = 0;
  981. point.TimeValue = DateTime.Now.AddSeconds(-_maxPointCount);
  982. _series1.Points.Add(point);
  983. _series2.Points.Add(point);
  984. ultraChart1.Tooltips.Format = Infragistics.UltraChart.Shared.Styles.TooltipStyle.LabelPlusDataValue;
  985. ultraChart2.Tooltips.Format = Infragistics.UltraChart.Shared.Styles.TooltipStyle.LabelPlusDataValue;
  986. }
  987. private void timer1_Tick(object sender, EventArgs e)
  988. {
  989. try {
  990. DateTime now = DateTime.Now;
  991. string endTimeStr = now.ToString("HH:mm:ss");
  992. string startTimeStr = now.AddSeconds(-_maxPointCount).ToString("HH:mm:ss");
  993. lbl_EndTime1.Text = endTimeStr;
  994. lbl_EndTime2.Text = endTimeStr;
  995. lbl_StartTime1.Text = startTimeStr;
  996. lbl_StartTime2.Text = startTimeStr;
  997. StrapDataPoint point = new StrapDataPoint();
  998. point.TimeValue = now;
  999. point.NumericValue = Convert.ToDouble(getTedValue("realtime_amount_Ted"));
  1000. point.Label = "时间:" + point.TimeValue.ToString("HH:mm:ss") + "\r\n流量";
  1001. _series1.Points.Add(point);
  1002. if (_series1.Points.Count > _maxPointCount)
  1003. {
  1004. _series1.Points.RemoveAt(0);
  1005. }
  1006. point = new StrapDataPoint();
  1007. point.TimeValue = now;
  1008. point.NumericValue = Convert.ToDouble(getTedValue("realtime_amount_Ted_1"));
  1009. point.Label = "时间:" + point.TimeValue.ToString("HH:mm:ss") + "\r\n流量";
  1010. _series2.Points.Add(point);
  1011. if (_series2.Points.Count > _maxPointCount)
  1012. {
  1013. _series2.Points.RemoveAt(0);
  1014. }
  1015. }
  1016. catch (Exception ex)
  1017. {
  1018. MessageBox.Show("失败" + ex.Message);
  1019. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  1020. }
  1021. }
  1022. #endregion
  1023. #region 校零赋值
  1024. private delegate void TimerDelegate();
  1025. //A 校零定时器
  1026. private void timer3_Tick(object sender, EventArgs e)
  1027. {
  1028. Thread thread = new Thread(new ThreadStart(Calibrate1_TickDelegate));
  1029. thread.Start();
  1030. }
  1031. //B 校零定时器
  1032. private void timer4_Tick(object sender, EventArgs e)
  1033. {
  1034. Thread thread = new Thread(new ThreadStart(Calibrate1_TickDelegate1));
  1035. thread.Start();
  1036. }
  1037. private void Calibrate1_TickDelegate()
  1038. {
  1039. TimerDelegate td = new TimerDelegate(Calibrate1_Tick);
  1040. Invoke(td);
  1041. }
  1042. private void Calibrate1_TickDelegate1()
  1043. {
  1044. TimerDelegate td = new TimerDelegate(Calibrate1_Tick1);
  1045. Invoke(td);
  1046. }
  1047. private void Calibrate1_Tick()
  1048. {
  1049. try {
  1050. CalibrateData[] cbDatas = _strapMeter1.FreshCalibrateData();
  1051. //向查看控件传输
  1052. if (IsMaxBelt && maxscale != null)
  1053. {
  1054. maxscale.cbDataByControlA = cbDatas;
  1055. maxscale.StartXiaoLingA = true;
  1056. maxscale.oldzeroA = oldzeroTxt.Text;
  1057. maxscale.oldzeroB = oldzeroTxt_1.Text;
  1058. }
  1059. if (cbDatas != null)
  1060. {
  1061. for (int i = 0; i < cbDatas.Length; i++)
  1062. {
  1063. CalibrateChanged(cbDatas[i], "A");
  1064. }
  1065. }
  1066. }
  1067. catch (Exception ex)
  1068. {
  1069. MessageBox.Show("失败" + ex.Message);
  1070. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  1071. }
  1072. }
  1073. private void Calibrate1_Tick1()
  1074. {
  1075. try
  1076. {
  1077. CalibrateData[] cbDatas = _strapMeter2.FreshCalibrateData();
  1078. //向查看控件传输
  1079. if (IsMaxBelt && maxscale != null)
  1080. {
  1081. maxscale.cbDataByControlB = cbDatas;
  1082. maxscale.StartXiaoLingB = true;
  1083. }
  1084. if (cbDatas != null)
  1085. {
  1086. for (int i = 0; i < cbDatas.Length; i++)
  1087. {
  1088. CalibrateChanged(cbDatas[i], "B");
  1089. }
  1090. }
  1091. }
  1092. catch (Exception ex)
  1093. {
  1094. MessageBox.Show("失败" + ex.Message);
  1095. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  1096. }
  1097. }
  1098. public void CalibrateChanged(CalibrateData cbData, String weightType)
  1099. {
  1100. try {
  1101. if (cbData == null) return;
  1102. switch (weightType)
  1103. {
  1104. case "A":
  1105. beltlengthTxt.Text = Math.Round(cbData.MeasLength, 3).ToString();//带长
  1106. maxnumTxt.Text = Math.Round(cbData.MaxValue, 3).ToString();//最大值
  1107. minnumTxt.Text = Math.Round(cbData.MinValue, 3).ToString();//最小值
  1108. // oldzeroTxt.Text = Math.Round(cbData.OldZero, 3).ToString();//旧零点
  1109. newnumTxt.Text = Math.Round(cbData.NewZero, 5).ToString();//新零点
  1110. remaining_timeTxt.Text = cbData.RemainSeconds.ToString();//剩余时间
  1111. if (cbData.DevStatus)
  1112. {
  1113. timer3.Stop();
  1114. ConfirmCalibrate.Enabled = true; //确认校零
  1115. }
  1116. break;
  1117. case "B":
  1118. beltlengthTxt_1.Text = Math.Round(cbData.MeasLength, 3).ToString();//带长
  1119. maxnumTxt_1.Text = Math.Round(cbData.MaxValue, 3).ToString();//最大值
  1120. minnumTxt_1.Text = Math.Round(cbData.MinValue, 3).ToString();//最小值
  1121. // oldzeroTxt_1.Text = Math.Round(cbData.OldZero, 3).ToString();//旧零点
  1122. newnumTxt_1.Text = Math.Round(cbData.NewZero, 5).ToString();//新零点
  1123. remaining_timeTxt_1.Text = cbData.RemainSeconds.ToString();//剩余时间
  1124. if (cbData.DevStatus)
  1125. {
  1126. timer4.Stop();
  1127. ConfirmCalibrate_1.Enabled = true;
  1128. }
  1129. break;
  1130. }
  1131. }
  1132. catch (Exception ex)
  1133. {
  1134. MessageBox.Show("失败" + ex.Message);
  1135. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  1136. }
  1137. }
  1138. //开始校零
  1139. private void startZeroBtn_Click(object sender, EventArgs e)
  1140. {
  1141. try {
  1142. //if (startMerterBtn.Enabled==false) {
  1143. // MessageBox.Show("计量中不允许校零!");
  1144. // return;
  1145. //}
  1146. string oldzero = FindScaleZero("A");
  1147. if (oldzero == "500"|| oldzero == "600")
  1148. {
  1149. oldzero = "";
  1150. MessageBox.Show("A秤查询旧零点出错或者是没查到");
  1151. }
  1152. //根据计量点查找最后的零点
  1153. oldzeroTxt.Text = oldzero;
  1154. if (predictionNoTxt.Text == "")
  1155. {
  1156. MessageBox.Show("预报不能为空,请选择预报后再校零。");
  1157. return;
  1158. }
  1159. if (_strapMeter1 != null)
  1160. {
  1161. _strapMeter1.StartCalibrateZero();
  1162. timer3.Start();
  1163. startZeroBtn.Enabled = false;//开始校零后禁用【开始校零】按钮
  1164. // IsXiaolingA = true;
  1165. }
  1166. }
  1167. catch (Exception ex)
  1168. {
  1169. MessageBox.Show("失败" + ex.Message);
  1170. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  1171. }
  1172. }
  1173. //B开始校零
  1174. private void button8_Click(object sender, EventArgs e)
  1175. {
  1176. try {
  1177. //if (startMerterBtn_1.Enabled == false)
  1178. //{
  1179. // MessageBox.Show("计量中不允许校零!");
  1180. // return;
  1181. //}
  1182. string oldzero = FindScaleZero("B");
  1183. if (oldzero == "500")
  1184. {
  1185. oldzero = "";
  1186. MessageBox.Show("B秤查询旧零点出错或者是没查到!");
  1187. }
  1188. //根据计量点查找最后的零点
  1189. oldzeroTxt_1.Text = oldzero;
  1190. if (predictionNoTxt.Text == "")
  1191. {
  1192. MessageBox.Show("预报不能为空,请选择预报后再校零。");
  1193. return;
  1194. }
  1195. if (_strapMeter2 != null)
  1196. {
  1197. _strapMeter2.StartCalibrateZero();
  1198. timer4.Start();
  1199. startZeroBtn_1.Enabled = false;
  1200. // IsXiaolingB = true;
  1201. }
  1202. }
  1203. catch (Exception ex)
  1204. {
  1205. MessageBox.Show("失败" + ex.Message);
  1206. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  1207. }
  1208. }
  1209. private string FindScaleZero(string ScaleName)
  1210. {
  1211. try
  1212. {
  1213. CommonPage<MeterWorkBeltXiaopi> cp = new CommonPage<MeterWorkBeltXiaopi>();
  1214. MeterWorkBeltXiaopi beltXiaopi = new MeterWorkBeltXiaopi();
  1215. beltXiaopi.baseSpotNo = sPointNo;//计量点编码
  1216. beltXiaopi.scaleName = ScaleName;//秤体
  1217. cp.memo1 = "2";//查询旧零点
  1218. cp.param = beltXiaopi;
  1219. RESTfulResult<List<MeterWorkBeltXiaopi>> result = workBeltXiaopiService.doQueryWf(cp);
  1220. if (result.Succeed)
  1221. {
  1222. if (result.Data != null && result.Data.Count > 0)
  1223. {
  1224. return result.Data[0].newZero.ToString();
  1225. }
  1226. else
  1227. {
  1228. return "500";
  1229. }
  1230. }
  1231. return "500";
  1232. }
  1233. catch (Exception ex)
  1234. {
  1235. MessageBox.Show("失败" + ex.Message);
  1236. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  1237. return "500";
  1238. }
  1239. }
  1240. //确认校零
  1241. private void button6_Click(object sender, EventArgs e)
  1242. {
  1243. try
  1244. {
  1245. _strapMeter1.ConfirmCalibrateValue();
  1246. timer3.Stop();//关闭线程
  1247. startZeroBtn.Enabled = true;
  1248. xiaopi("A");
  1249. }
  1250. catch (Exception ex)
  1251. {
  1252. MessageBox.Show("失败" + ex.Message);
  1253. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  1254. }
  1255. //IsXiaolingA = false;
  1256. }
  1257. //确认校零B
  1258. private void ConfirmCalibrate_1_Click(object sender, EventArgs e)
  1259. {
  1260. try {
  1261. _strapMeter2.ConfirmCalibrateValue();
  1262. timer4.Stop();
  1263. startZeroBtn_1.Enabled = true;
  1264. xiaopi("B");
  1265. //IsXiaolingB = false;
  1266. }
  1267. catch (Exception ex)
  1268. {
  1269. MessageBox.Show("失败" + ex.Message);
  1270. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  1271. }
  1272. }
  1273. //放弃校零
  1274. private void button4_Click(object sender, EventArgs e)
  1275. {
  1276. try {
  1277. _strapMeter1.CancelCalibrateZero();
  1278. timer3.Stop();
  1279. startZeroBtn.Enabled = true;
  1280. // IsXiaolingA = false;
  1281. beltlengthTxt.Text = "";//带长
  1282. maxnumTxt.Text = "";//最大值
  1283. minnumTxt.Text = "";//最小值
  1284. oldzeroTxt.Text = "";//旧零点
  1285. newnumTxt.Text = "";//新零点
  1286. remaining_timeTxt.Text = "";//剩余时间
  1287. }
  1288. catch (Exception ex)
  1289. {
  1290. MessageBox.Show("失败" + ex.Message);
  1291. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  1292. }
  1293. }
  1294. //放弃校零B
  1295. private void CancelCalibrate_1_Click(object sender, EventArgs e)
  1296. {
  1297. try
  1298. {
  1299. _strapMeter2.CancelCalibrateZero();
  1300. timer4.Stop();
  1301. startZeroBtn_1.Enabled = true;
  1302. // IsXiaolingB = false;
  1303. beltlengthTxt_1.Text = "";//带长
  1304. maxnumTxt_1.Text = "";//最大值
  1305. minnumTxt_1.Text = "";//最小值
  1306. oldzeroTxt_1.Text = "";//旧零点
  1307. newnumTxt_1.Text = "";//新零点
  1308. remaining_timeTxt_1.Text = "";//剩余时间
  1309. }
  1310. catch (Exception ex)
  1311. {
  1312. MessageBox.Show("失败" + ex.Message);
  1313. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  1314. }
  1315. }
  1316. public void xiaopi(string ScaleName)
  1317. {
  1318. // 校皮:预报、时间、ScaleName 、计量点编码、计量点名称、新零点、物料
  1319. MeterWorkBeltXiaopi beltXiaopi = new MeterWorkBeltXiaopi();
  1320. beltXiaopi.predictionNo = predictionNoTxt.Text;//预报编号
  1321. if (ScaleName == "A")
  1322. {
  1323. beltXiaopi.newZero = newnumTxt.Text.ToString().Trim()==""?0:Convert.ToDouble(newnumTxt.Text.ToString());
  1324. }
  1325. else if (ScaleName == "B")
  1326. {
  1327. beltXiaopi.newZero = newnumTxt_1.Text.ToString()==""?0:Convert.ToDouble(newnumTxt_1.Text.ToString());
  1328. }
  1329. if (beltXiaopi.newZero==0) {
  1330. MessageBox.Show("新零点为空,校零失败!");
  1331. return;
  1332. }
  1333. beltXiaopi.baseSpotNo = sPointNo;//计量点编码
  1334. beltXiaopi.baseSpotName = sPointName;//计量点
  1335. beltXiaopi.productNo = beltinfo.productNo;//物料编码
  1336. beltXiaopi.productName = mat_nameTxt.Text;//物料名称
  1337. beltXiaopi.createManNo = sUserId;//用户id
  1338. beltXiaopi.createManName = sUserName;//用户名称
  1339. beltXiaopi.scaleName = ScaleName;//秤体
  1340. RESTfulResult<string> rm = workBeltXiaopiService.doAddWf(beltXiaopi);
  1341. if (rm.Succeed)
  1342. {
  1343. if ((!label36.Text.Contains("为校秤状态") && ScaleName == "A") || (!label37.Text.Contains("为校秤状态") && ScaleName == "B"))
  1344. {
  1345. MessageBox.Show(ScaleName + "秤确认校零成功!");
  1346. }
  1347. else
  1348. {
  1349. MessageBox.Show("请注意" + ScaleName + "秤红色提示是否还在确认是否校零成功!");
  1350. }
  1351. return;
  1352. }
  1353. else
  1354. {
  1355. MessageBox.Show("计量失败,请联系技术中心!");
  1356. l.WriteLog("皮带秤计量异常_", "计量失败"+rm.Message);
  1357. return;
  1358. }
  1359. }
  1360. //累计量清零
  1361. private void ClearTotal_Click(object sender, EventArgs e)
  1362. {
  1363. try
  1364. {
  1365. if (startMerterBtn.Enabled == true && endMerterBtn.Enabled == false)
  1366. {
  1367. if (_strapMeter1 != null && MessageBox.Show("是否确定清零?", sPointName + " A秤", MessageBoxButtons.YesNo) == DialogResult.Yes)
  1368. {
  1369. startZeroBtn.Enabled = false;
  1370. _strapMeter1.ClearTotal();
  1371. startZeroBtn.Enabled = true;
  1372. }
  1373. }
  1374. else
  1375. {
  1376. MessageBox.Show("此船未结束,不允许清零!");
  1377. return;
  1378. }
  1379. }
  1380. catch (Exception ex)
  1381. {
  1382. MessageBox.Show("累积量清零"+ex.Message);
  1383. l.WriteLog("皮带秤计量异常_", "累积量清零" + ex.Message);
  1384. }
  1385. }
  1386. //累计量清零 B
  1387. private void ClearTotal_1_Click(object sender, EventArgs e)
  1388. {
  1389. try
  1390. {
  1391. if (startMerterBtn_1.Enabled == true && endMerterBtn_1.Enabled == false)
  1392. {
  1393. if (_strapMeter2 != null && MessageBox.Show("是否确定清零?", sPointName + " B秤", MessageBoxButtons.YesNo) == DialogResult.Yes)
  1394. {
  1395. ClearTotal_1.Enabled = false;
  1396. _strapMeter2.ClearTotal();
  1397. ClearTotal_1.Enabled = true;
  1398. }
  1399. }
  1400. else
  1401. {
  1402. MessageBox.Show("此船未结束,不允许清零!");
  1403. return;
  1404. }
  1405. }
  1406. catch (Exception ex)
  1407. {
  1408. MessageBox.Show("累积量清零" + ex.Message);
  1409. l.WriteLog("皮带秤计量异常_", "累积量清零" + ex.Message);
  1410. }
  1411. }
  1412. //显示差值
  1413. private void remaining_timeTxt_TextChanged(object sender, EventArgs e)
  1414. {
  1415. if (remaining_timeTxt.Text.Trim() == "0" && newnumTxt.Text.Trim() != "" && oldzeroTxt.Text.Trim() != "")
  1416. {
  1417. differenceTxt.Text = (Math.Round(Convert.ToDouble(newnumTxt.Text.Trim()), 6) - Math.Round(Convert.ToDouble(oldzeroTxt.Text.Trim()), 6)).ToString("0.00000");
  1418. }
  1419. }
  1420. private void remaining_timeTxt_1_TextChanged(object sender, EventArgs e)
  1421. {
  1422. if (remaining_timeTxt_1.Text.Trim() == "0" && newnumTxt_1.Text.Trim() != "" && oldzeroTxt_1.Text.Trim() != "")
  1423. {
  1424. differenceTxt_1.Text = (Math.Round(Convert.ToDouble(newnumTxt_1.Text.Trim()), 6) - Math.Round(Convert.ToDouble(oldzeroTxt_1.Text.Trim()), 6)).ToString("0.00000");
  1425. }
  1426. }
  1427. #endregion
  1428. #region 修改仪表物料参数
  1429. private void updateMatParameter(string parameter,string ScaleName) {// (10)21003 (16)520b
  1430. int pm = Convert.ToInt32(Convert.ToDouble(parameter) * 10000);
  1431. byte[] C = intToBytes2(pm);
  1432. byte[] pmBytes = new byte[2];
  1433. pmBytes[0] = C[2];
  1434. pmBytes[1] = C[3];
  1435. switch (ScaleName)
  1436. {
  1437. case "A":
  1438. Addlog(getTedValue("parameter_Ted").ToString(), parameter, ScaleName, predictionNoTxt.Text.ToString(),oldMat);
  1439. _strapMeter1.setMatParameter(pmBytes);
  1440. break;
  1441. case "B":
  1442. Addlog(getTedValue("parameter_Ted_1").ToString(), parameter, ScaleName, predictionNoTxt.Text.ToString(),oldMat);
  1443. _strapMeter2.setMatParameter(pmBytes);
  1444. break;
  1445. }
  1446. }
  1447. public void Addlog(string materialParameter_old, string materialParameter_new, string scaleName, string preNo,string mat)
  1448. {
  1449. MeterBaseOperationLog log = new MeterBaseOperationLog();
  1450. log.operationId = preNo;
  1451. log.operationPage = "仪表参数";
  1452. log.operationFunction = "修改";
  1453. log.operationBeforeFix = "-计量点:" + sPointName + "-秤台:" + scaleName + "物料:"+oldMat+"仪表参数:" + materialParameter_old;
  1454. log.operationAfterFix = "-计量点:" + sPointName + "-秤台:" + scaleName + "物料:"+mat_nameTxt.Text.ToString()+"仪表参数:" + materialParameter_new;
  1455. log.logType = "皮带秤";
  1456. log.logTypeCode = "001002005";
  1457. log.createManNo = sUserId;
  1458. log.createManName = sUserName;
  1459. RESTfulResult<string> rESTfulResult = LogService.AddLog(log);
  1460. if (!rESTfulResult.Succeed)
  1461. {
  1462. MessageBox.Show("新增日志错误" + rESTfulResult.Message);
  1463. return;
  1464. }
  1465. }
  1466. public static byte[] intToBytes2(int value)
  1467. {
  1468. byte[] src = new byte[4];
  1469. src[0] = (byte)((value >> 24) & 0xFF);
  1470. src[1] = (byte)((value >> 16) & 0xFF);
  1471. src[2] = (byte)((value >> 8) & 0xFF);
  1472. src[3] = (byte)(value & 0xFF);
  1473. return src;
  1474. }
  1475. #endregion
  1476. #region 定时数据 实时量保存
  1477. //保存定时数据
  1478. private void timer2_Tick(object sender, EventArgs e)
  1479. {
  1480. DateTime dt = System.DateTime.Now;
  1481. if (dt.Minute == 30 || dt.Minute == 0)
  1482. {
  1483. SaveTimingInfo();
  1484. }
  1485. }
  1486. private void SaveTimingInfo() {
  1487. double diff = 0;
  1488. //A磅定时数据
  1489. beltTiminginfo.scaleName = "A";
  1490. beltTiminginfo.weight = getTedValue("instrument_weight_Ted");//仪表重量
  1491. beltTiminginfo.realtimeAmount = getTedValue("realtime_amount_Ted");//实时量
  1492. beltTiminginfo.beltSpeed = getTedValue("belt_speed_Ted");//皮带速度
  1493. beltTiminginfo.predictionNo = predictionNoTxt.Text.ToString();//预报编号
  1494. beltTiminginfo.createManNo = sUserId;//登录信息
  1495. beltTiminginfo.createManName = sUserName;
  1496. beltTiminginfo.meterClass = userClass;
  1497. beltTiminginfo.meterGroup = userGroup;
  1498. beltTiminginfo.productNo = beltinfo.productNo;
  1499. beltTiminginfo.productName = beltinfo.newMatName;
  1500. beltTiminginfo.forwardingUnitNo = beltinfo.forwardingUnitNo;
  1501. beltTiminginfo.forwardingUnitName = beltinfo.newSupplier; ;//发货单位
  1502. beltTiminginfo.receivingUintNo = beltinfo.receivingUintNo; ;//收货单位
  1503. beltTiminginfo.receivingUintName = beltinfo.receivingUintName;
  1504. beltTiminginfo.baseSpotNo = sPointNo;
  1505. beltTiminginfo.baseSpotName = sPointName;
  1506. beltTiminginfo.weightType = "0";
  1507. beltTiminginfo.packageNo = sPointNo + DateTime.Now.ToString("yyyyMMddHHmmss");
  1508. double Aweight = getTedValue("instrument_weight_Ted")==0?1: getTedValue("instrument_weight_Ted");
  1509. diff = getTedValue("instrument_weight_Ted_1") - Aweight;
  1510. beltTiminginfo.difference = diff == 0 ? 0 : Math.Round((diff / Aweight) * 100, 3);
  1511. if (diff != 0)
  1512. {
  1513. double df = (double)beltTiminginfo.difference;
  1514. beltTiminginfo.weightDiff = Math.Round((df / Aweight) * 100,4);
  1515. }
  1516. RESTfulResult<string> rm = null;
  1517. if (IsSaveA)
  1518. {
  1519. l.WriteLog("皮带秤计量异常_", "定时数据" + "Aweight" + Aweight + "---Bweight"+ getTedValue("instrument_weight_Ted_1")+ "---df" + beltTiminginfo.difference + "---weightDiff"+ beltTiminginfo.weightDiff);
  1520. rm = meterWorkBeltTimingService.doAddWf(beltTiminginfo);
  1521. if (rm.Succeed)
  1522. {
  1523. MeterWorkBeltTiminginfo beltTiminginfos = new MeterWorkBeltTiminginfo();
  1524. //A磅定时数据
  1525. beltTiminginfo.scaleName = "B";
  1526. beltTiminginfo.weight = getTedValue("instrument_weight_Ted_1");//仪表重量
  1527. beltTiminginfo.realtimeAmount = getTedValue("realtime_amount_Ted_1");//实时量
  1528. beltTiminginfo.beltSpeed = getTedValue("belt_speed_Ted_1");//皮带速度
  1529. if (IsSaveB)
  1530. {
  1531. rm = meterWorkBeltTimingService.doAddWf(beltTiminginfo);
  1532. }
  1533. if (rm.Succeed)
  1534. {
  1535. timer2.Interval = 1000 * 60 * 3;
  1536. //表格更新
  1537. querytiminginfo();
  1538. }
  1539. else
  1540. {
  1541. MessageBox.Show("定时计量失败,请联系技术中心!");
  1542. l.WriteLog("皮带秤计量异常_", "计量失败" + rm.Message);
  1543. return;
  1544. }
  1545. }
  1546. else
  1547. {
  1548. MessageBox.Show("定时计量失败,请联系技术中心!");
  1549. l.WriteLog("皮带秤计量异常_", "计量失败" + rm.Message);
  1550. return;
  1551. }
  1552. }
  1553. }
  1554. int zs = 0;//间隔五秒数据没动静则报警
  1555. double csum1 = 0;
  1556. double csum2 = 0;
  1557. //保存实时量
  1558. private void realtime_Tick(object sender, EventArgs e)
  1559. {
  1560. queryScale(false);//每分钟刷新一次预报 不触发更改样式
  1561. if (IsSaveA || IsSaveB) {
  1562. //A实时量
  1563. beltTiminginfo1.scaleName = "A";
  1564. beltTiminginfo1.realtimeAmount = getTedValue("realtime_amount_Ted");//实时量
  1565. beltTiminginfo1.baseSpotNo = sPointNo;
  1566. beltTiminginfo1.baseSpotName = sPointName;
  1567. beltTiminginfo1.weightType = "1";//实时量
  1568. RESTfulResult<string> rm = meterWorkBeltTimingService.doAddWf(beltTiminginfo1);
  1569. if (rm.Succeed)
  1570. {
  1571. MeterWorkBeltTiminginfo beltTiminginfos = new MeterWorkBeltTiminginfo();
  1572. //B实时量
  1573. beltTiminginfo1.scaleName = "B";
  1574. beltTiminginfo1.realtimeAmount = getTedValue("realtime_amount_Ted_1");//实时量
  1575. rm = meterWorkBeltTimingService.doAddWf(beltTiminginfo1);
  1576. if (!rm.Succeed)
  1577. {
  1578. MessageBox.Show("保存实时量失败,请联系技术中心!");
  1579. l.WriteLog("皮带秤计量异常_", "保存实时量失败" + rm.Message);
  1580. return;
  1581. }
  1582. }
  1583. else
  1584. {
  1585. MessageBox.Show("保存实时量失败,请联系技术中心!");
  1586. l.WriteLog("皮带秤计量异常_", "保存实时量失败" + rm.Message);
  1587. return;
  1588. }
  1589. }
  1590. zs = zs + 1;
  1591. if (zs == 5)
  1592. {
  1593. if (sPointNo == "00039")//西区焦粉皮带秤
  1594. {
  1595. if (getTedValue("realtime_amount_Ted_1") > 0 && getTedValue("belt_speed_Ted_1") > 1)
  1596. {
  1597. if (getTedValue("instrument_weight_Ted_1") == csum2)
  1598. {
  1599. MessageBox.Show("请注意," + sPointName + "皮带带速或瞬时流量异常!");
  1600. }
  1601. }
  1602. }
  1603. else
  1604. {
  1605. if (getTedValue("realtime_amount_Ted") > 0 && getTedValue("belt_speed_Ted") > 1 && getTedValue("realtime_amount_Ted_1") > 0 && getTedValue("belt_speed_Ted_1") > 1)
  1606. {
  1607. if (getTedValue("instrument_weight_Ted") == csum1|| getTedValue("instrument_weight_Ted_1") == csum2)
  1608. {
  1609. MessageBox.Show("请注意," + sPointName + "皮带带速或瞬时流量异常!");
  1610. }
  1611. }
  1612. }
  1613. zs = 0;
  1614. if (sPointNo == "00039")//西区焦粉皮带秤
  1615. {
  1616. csum2 = getTedValue("instrument_weight_Ted_1");
  1617. }
  1618. else
  1619. {
  1620. csum1 = getTedValue("instrument_weight_Ted");
  1621. csum2 = getTedValue("instrument_weight_Ted_1");
  1622. }
  1623. }
  1624. }
  1625. #endregion
  1626. #region 按钮事件 计量
  1627. //查看
  1628. private void checkBtn_Click(object sender, EventArgs e)
  1629. {
  1630. try
  1631. {
  1632. //if (startMerterBtn.Enabled == false && startMerterBtn_1.Enabled == false)
  1633. //{
  1634. // BtnType = 9;//都在计量
  1635. //}
  1636. //if (startMerterBtn.Enabled == false && startMerterBtn_1.Enabled == true)
  1637. //{
  1638. // BtnType = 1;//A开始计量
  1639. //}
  1640. //if (startMerterBtn.Enabled == true && startMerterBtn_1.Enabled == false)
  1641. //{
  1642. // BtnType = 2;//B开始计量
  1643. //}
  1644. //if (this.startMerterBtn.Enabled == true && this.startMerterBtn_1.Enabled == true)
  1645. //{
  1646. // BtnType = 0;//未计量
  1647. //}
  1648. maxscale = new FrmMaxBletScale();
  1649. maxscale.Name = "maxscale" + sPointNo;
  1650. maxscale.sIpAddress = sIpAddress;
  1651. maxscale.sPointNo = sPointNo;
  1652. maxscale.sPointName = sPointName;
  1653. maxscale.sUserId = sUserId;
  1654. maxscale.sUserName = sUserName;
  1655. maxscale.userClass = userClass;
  1656. maxscale.userGroup = userGroup;
  1657. // maxscale.BtnType = BtnType;
  1658. maxscale.StartPosition = FormStartPosition.CenterScreen;
  1659. maxscale.beltinfo = beltinfo;
  1660. IsMaxBelt = true;
  1661. maxscale.ShowDialog();
  1662. queryScale();
  1663. // UpdateControl(maxscale.BtnType);
  1664. }
  1665. catch (Exception ex)
  1666. {
  1667. MessageBox.Show("失败" + ex.Message);
  1668. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  1669. }
  1670. //maxscale.Dispose();
  1671. }
  1672. //新增卫生料计划
  1673. private void button1_Click(object sender, EventArgs e)
  1674. {
  1675. try
  1676. {
  1677. RESTfulResult<string> rm = PreBeltScalePreService.doAddBeltScalePrediction(findFromInfo());
  1678. if (rm.Succeed)
  1679. {
  1680. queryScale();
  1681. MessageBox.Show("新增卫生料预报成功");
  1682. return;
  1683. }
  1684. else
  1685. {
  1686. MessageBox.Show("新增实绩失败,请联系技术中心!" + rm.Message);
  1687. return;
  1688. }
  1689. }
  1690. catch (Exception ex)
  1691. {
  1692. MessageBox.Show("失败" + ex.Message);
  1693. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  1694. }
  1695. }
  1696. private PreBeltScaleForecast findFromInfo()
  1697. {
  1698. PreBeltScaleForecast beltinfo = new PreBeltScaleForecast();
  1699. beltinfo.baseSpotNo = sPointNo;//计量点编码
  1700. beltinfo.baseSpotName = sPointName;//计量点
  1701. beltinfo.forwardingUnitNo = "456786";//发货单位编码
  1702. beltinfo.newSupplier = "卫生料专用发货单位";//发货单位
  1703. beltinfo.receivingUintNo = "456789";//收货单位编码
  1704. beltinfo.receivingUintName = "卫生料专用收货单位";
  1705. beltinfo.productNo = "456788";//物料编码
  1706. beltinfo.newMatName = "卫生料";//物料名称
  1707. beltinfo.forwardingWeight = Convert.ToDouble("8888");//发运重量
  1708. beltinfo.orderNo = "WSL-WSL-WSL-WSL-WSL";//合同号
  1709. beltinfo.shipNo = "卫生料船号";//船号
  1710. beltinfo.overstock = DateTime.Now;
  1711. beltinfo.createManNo = sUserId;
  1712. beltinfo.createManName = sUserName;
  1713. return beltinfo;
  1714. }
  1715. //刷新
  1716. private void flashBtn_Click(object sender, EventArgs e)
  1717. {
  1718. loadFrom();
  1719. }
  1720. //A开始计量
  1721. private void startMerterBtn_Click(object sender, EventArgs e)
  1722. {
  1723. string message = checkStartSave("A");
  1724. if (message != "200")
  1725. {
  1726. MessageBox.Show(message);
  1727. return;
  1728. }
  1729. StartMeter("A", 1);
  1730. }
  1731. //B开始计量
  1732. private void button11_Click(object sender, EventArgs e)
  1733. {
  1734. string message = checkStartSave("B");
  1735. if (message != "200")
  1736. {
  1737. MessageBox.Show(message);
  1738. return;
  1739. }
  1740. StartMeter("B", 2);
  1741. }
  1742. //开始计量之前的效验
  1743. private string checkStartSave(string ScaleName) {
  1744. if (predictionNoTxt.Text == "")
  1745. {
  1746. return "请选择预报在进行计量!";
  1747. }
  1748. else if(predictionNoTxt.Text.ToString()!= beltinfo.predictionNo)
  1749. {
  1750. return "核对预报是否错误!";
  1751. }
  1752. if (getTedValue("instrument_weight_Ted") != 0 && ScaleName == "A")
  1753. {
  1754. return ScaleName + "仪表不为0时不能开始计量!";
  1755. }
  1756. if (getTedValue("instrument_weight_Ted_1") != 0 && ScaleName == "B")
  1757. {
  1758. return ScaleName + "仪表不为0时不能开始计量!";
  1759. }
  1760. if (mat_nameTxt.Text.ToString().Trim()==""|| shippingTxt.Text.ToString().Trim() == ""|| receivingTxt.Text.ToString().Trim() == "")
  1761. {
  1762. return "物料名称、收发货单位不能为空!";
  1763. }
  1764. if (MeterWorkBeltActual_NOW != null && MeterWorkBeltActual_NOW.Data != null)
  1765. {
  1766. if (MeterWorkBeltActual_NOW.Data.Count == 1)
  1767. {
  1768. if (MeterWorkBeltActual_NOW.Data[0].scaleName == ScaleName && MeterWorkBeltActual_NOW.Data[0].predictionNo == predictionNoTxt.Text.ToString() && MeterWorkBeltActual_NOW.Data[0].endTime != null)
  1769. {
  1770. return "预报" + predictionNoTxt.Text.ToString() + "----" + ScaleName + "秤已计量!请勿重复计量!";
  1771. }
  1772. }
  1773. }
  1774. bool IsHaveUse=false;
  1775. for (int i = 1; i < ultraGrid1.Rows.Count; i++)
  1776. {
  1777. string value = ultraGrid1.Rows[i].Cells["valueFlag"].Text.ToString();
  1778. if (value.Contains("0") || value.Contains("使用中")) {
  1779. IsHaveUse=true;
  1780. }
  1781. }
  1782. if (IsHaveUse) {
  1783. return "存在未完成计量的预报,请双击该预报结束计量或者找计量班长作废该预报!";
  1784. }
  1785. return "200";
  1786. }
  1787. //结束计量之前的效验
  1788. private string checkEndSave(string ScaleName)
  1789. {
  1790. //if (getTedValue("instrument_weight_Ted") == 0 && ScaleName == "A")
  1791. //{
  1792. // return ScaleName + "仪表为0时不能结束计量!";
  1793. //}
  1794. //if (getTedValue("instrument_weight_Ted_1") == 0 && ScaleName == "B")
  1795. //{
  1796. // return ScaleName + "仪表为0时不能结束计量!";
  1797. //}
  1798. if (predictionNoTxt.Text == "")
  1799. {
  1800. return "预报为空,不能结束";
  1801. }
  1802. else if (predictionNoTxt.Text.ToString() != beltinfo.predictionNo)
  1803. {
  1804. return "核对预报是否错误!";
  1805. }
  1806. return "200";
  1807. }
  1808. //开始计量
  1809. private void StartMeter(string ScaleName,int controlId) {
  1810. try
  1811. {
  1812. MeterWorkBeltActual beltActual = new MeterWorkBeltActual();
  1813. beltActual.predictionNo = predictionNoTxt.Text;//预报编号
  1814. if (ScaleName == "A")
  1815. {
  1816. beltActual.startWeight = getTedValue("instrument_weight_Ted");
  1817. }
  1818. else if (ScaleName == "B")
  1819. {
  1820. beltActual.startWeight = getTedValue("instrument_weight_Ted_1");
  1821. }
  1822. // beltActual.startTime = DateTime.Now.ToString();
  1823. beltActual.baseSpotNo = sPointNo;//计量点编码
  1824. beltActual.baseSpotName = sPointName;//计量点
  1825. beltActual.forwardingUnitNo = beltinfo.forwardingUnitNo;//发货单位编码
  1826. beltActual.newSupplier = shippingTxt.Text;//发货单位
  1827. beltActual.receivingUintNo = beltinfo.receivingUintNo;//收货单位编码
  1828. beltActual.receivingUintName = receivingTxt.Text;//收货单位
  1829. beltActual.productNo = beltinfo.productNo;//物料编码
  1830. beltActual.newMatName = mat_nameTxt.Text;//物料名称
  1831. beltActual.createManNo = sUserId;//用户id
  1832. beltActual.createManName = sUserName;//用户名称
  1833. beltActual.meterClass = userClass;//班级班组
  1834. beltActual.meterGroup = userGroup;
  1835. beltActual.scaleName = ScaleName;//秤体
  1836. beltActual.heatNo = "1";//表示为开始计量的创建
  1837. RESTfulResult<string> rm = MeterWorkBeltActualService.doAddWf(beltActual);
  1838. if (rm.Succeed)
  1839. {
  1840. SaveTimingInfo();//开始计量成功时 保存实时量
  1841. UpdateControl(controlId);
  1842. loadFrom();
  1843. }
  1844. else
  1845. {
  1846. MessageBox.Show("计量失败,请联系技术中心!");
  1847. l.WriteLog("皮带秤计量异常_", "计量失败" + rm.Message);
  1848. }
  1849. }
  1850. catch (Exception ex)
  1851. {
  1852. MessageBox.Show("失败" + ex.Message);
  1853. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  1854. }
  1855. }
  1856. //A结束计量
  1857. private void endMerterBtn_Click(object sender, EventArgs e)
  1858. {
  1859. if (MessageBox.Show("是否确定结束计量?", sPointName + " A秤", MessageBoxButtons.YesNo) == DialogResult.Yes)
  1860. {
  1861. string message = checkEndSave("A");
  1862. if (message != "200")
  1863. {
  1864. MessageBox.Show(message);
  1865. return;
  1866. }
  1867. EndMerter("A", 3);
  1868. }
  1869. }
  1870. //B结束计量
  1871. private void endMerterBtn_1_Click(object sender, EventArgs e)
  1872. {
  1873. if (MessageBox.Show("是否确定结束计量?", sPointName + " B秤", MessageBoxButtons.YesNo) == DialogResult.Yes)
  1874. {
  1875. string message = checkEndSave("B");
  1876. if (message != "200")
  1877. {
  1878. MessageBox.Show(message);
  1879. return;
  1880. }
  1881. EndMerter("B", 4);
  1882. }
  1883. }
  1884. //结束计量
  1885. private void EndMerter(string ScaleName,int controlId) {
  1886. try
  1887. {
  1888. CommonPage<MeterWorkBeltActual> cp = new CommonPage<MeterWorkBeltActual>();
  1889. cp.param = new MeterWorkBeltActual { valueFlag = "1", baseSpotNo = sPointNo, scaleName = ScaleName, predictionNo = predictionNoTxt.Text.ToString() };
  1890. RESTfulResult<List<MeterWorkBeltActual>> rms = MeterWorkBeltActualService.doQuery(cp.param);
  1891. if (!rms.Succeed)
  1892. {
  1893. MessageBox.Show("查找原有预报失败,请联系技术中心!" + rms.Message);
  1894. l.WriteLog("皮带秤计量异常_", "计量失败" + rms.Message);
  1895. return;
  1896. }
  1897. MeterWorkBeltActual beltActual = new MeterWorkBeltActual();
  1898. if (ScaleName == "A")
  1899. {
  1900. beltActual.endWeight = getTedValue("instrument_weight_Ted");
  1901. }
  1902. else if (ScaleName == "B")
  1903. {
  1904. beltActual.endWeight = getTedValue("instrument_weight_Ted_1");
  1905. }
  1906. beltActual.startWeight = rms.Data[0].startWeight;
  1907. beltActual.actualNo = rms.Data[0].actualNo;
  1908. beltActual.predictionNo = predictionNoTxt.Text;//预报编号
  1909. beltActual.updateManNo = sUserId;
  1910. beltActual.updateManName = sUserName;
  1911. RESTfulResult<string> rm = MeterWorkBeltActualService.endMeter(beltActual);
  1912. if (rm.Succeed)
  1913. {
  1914. SaveTimingInfo();//结束计量成功时 保存实时量
  1915. UpdateControl(controlId);
  1916. if (ScaleName == "A")
  1917. {
  1918. IsSaveA = false;
  1919. _startWeight1 = 0;
  1920. setTedValue("cumulative_weight_Ted", "0");//累计量
  1921. }
  1922. else
  1923. {
  1924. IsSaveB = false;
  1925. _startWeight2 = 0;
  1926. setTedValue("cumulative_weight_Ted_1", "0");//累计量
  1927. }
  1928. loadFrom();
  1929. }
  1930. else
  1931. {
  1932. MessageBox.Show("计量失败,请联系技术中心!" + rm.Message);
  1933. _startWeight1 = getTedValue("cumulative_weight_Ted");
  1934. _startWeight2 = getTedValue("cumulative_weight_Ted_1");
  1935. l.WriteLog("皮带秤计量异常_", "计量失败" + rm.Message);
  1936. return;
  1937. }
  1938. }
  1939. catch (Exception ex)
  1940. {
  1941. MessageBox.Show("失败" + ex.Message);
  1942. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  1943. }
  1944. }
  1945. //修改A仪表 的物料参数
  1946. private void updateA_mat_Click(object sender, EventArgs e)
  1947. {
  1948. updateMatParameter(A_mat.Text.ToString().Trim(), "A");
  1949. }
  1950. //修改B仪表的物料参数
  1951. private void updateB_mat_Click(object sender, EventArgs e)
  1952. {
  1953. updateMatParameter(B_mat.Text.ToString().Trim(), "B");
  1954. }
  1955. #endregion
  1956. #region 退出关闭
  1957. public void Close()
  1958. {
  1959. try
  1960. {
  1961. if (_strapMeter1 != null)
  1962. {
  1963. _strapMeter1.Close();
  1964. }
  1965. if (_strapMeter2 != null)
  1966. {
  1967. _strapMeter2.Close();
  1968. }
  1969. timer1.Stop();
  1970. timer2.Stop();
  1971. timer3.Stop();
  1972. timer4.Stop();
  1973. realtime.Stop();
  1974. beltinfo = null;
  1975. beltTiminginfo = null;
  1976. this.Name = "关闭";
  1977. }
  1978. catch (Exception ex)
  1979. {
  1980. MessageBox.Show("失败" + ex.Message);
  1981. l.WriteLog("皮带秤计量异常_", "失败" + ex.Message);
  1982. }
  1983. }
  1984. #endregion
  1985. }
  1986. }