/******************************************************************************* * Copyright(c) 2014 DongkeSoft All rights reserved. / Confidential * 类的信息: * 1.程序名称:PLCModuleLogic.cs * 2.功能描述:发送信息到智能设备。 * 编辑履历: * 作者 日期 版本 修改内容 * 陈晓野 2018/10/18 1.00 新建 *******************************************************************************/ using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Net.Sockets; using System.Text; using Curtain.DataAccess; using Curtain.Framework.Json; using Curtain.Net.Sockets.PLC; using Curtain.Net.Sockets.PLC.Model.Siemens; using Dongke.IBOSS.PRD.Basics.BaseResources; using Dongke.IBOSS.PRD.Basics.DataAccess; using Dongke.IBOSS.PRD.Service.DataModels; using Dongke.IBOSS.PRD.WCF.DataModels; using Microsoft.Win32; using Newtonsoft.Json.Linq; namespace Dongke.IBOSS.PRD.Service.CMNModuleService { /// /// PLC相关处理 /// public class PLCModuleLogic { #region 恒洁三水三车间工位对应PLC操作 /// /// 恒洁三水三车间工位对应PLC操作 xuwei modify 2020-06-29 /// /// /// public static ServiceResultEntity DoPLCWorkByUser_HEGII_S3(SUserInfo sUserInfo, string barcode, int procedureid, int workStationType = 0 ) { using (IDataAccess conn = DataAccess.Create()) { try { //按当前登录用户在工位表中的当前工号查找工位类型 workStationType = getWorkStationType(conn, sUserInfo.UserCode); //成检交接3211 if (workStationType == 3211) { //读取产品型号 object goodsModel = conn.ExecuteScalar(@" SELECT g.SEATCOVERCODE FROM TP_PM_GROUTINGDAILYDETAIL p LEFT JOIN TP_MST_GOODS g ON g.GOODSID = p.GOODSID WHERE p.VALUEFLAG = '1' AND p.BARCODE = @BARCODE@ ", new CDAParameter("BARCODE", barcode) ); //调用PLC的参数集合 Hashtable plcPara = new Hashtable(); plcPara.Add("barcode", barcode); plcPara.Add("procedureid", procedureid); plcPara.Add("goodsmodel", goodsModel); return plcWrite(conn, sUserInfo.UserCode, workStationType, plcPara); } //成检交接3212 if (workStationType == 3212) { } return new ServiceResultEntity() { Status = Constant.ServiceResultStatus.Other, Message = "当前工号无工位信息" }; } catch (Exception ex) { Curtain.Log.Logger.Error(ex); return new ServiceResultEntity() { Status = Constant.ServiceResultStatus.Other, Message = "PLC写入失败!" }; } finally { conn?.Close(); } } } /// /// 获取工位类型ID xuwei add 2020-06-29 /// /// /// /// private static int getWorkStationType(IDataAccess conn,string userCode) { return Convert.ToInt32(conn.ExecuteScalar(@" SELECT t.WORKSTATIONTYPEID FROM TP_MST_WORKSTATION w LEFT JOIN TP_SYS_WORKSTATIONTYPE t ON w.WORKSTATIONTYPEID = t.WORKSTATIONTYPEID WHERE w.USERCODE = @USERCODE@ ", new CDAParameter("USERCODE", userCode) )); } /// /// 写PLC xuwei add 2020-06-29 /// /// /// /// /// /// private static ServiceResultEntity plcWrite(IDataAccess conn,string userCode,int workStationType,Hashtable plcPara) { //读取工位配置信息 DataTable dataTable = conn.ExecuteDatatable(@" SELECT * FROM TP_MST_WORKSTATION t WHERE t.WORKSTATIONTYPEID = @WORKSTATIONTYPE@ AND USERCODE =@USERCODE@ ", new CDAParameter("WORKSTATIONTYPE", workStationType), new CDAParameter("USERCODE", userCode) ); if (dataTable == null || dataTable.Rows.Count == 0) { return new ServiceResultEntity() { Status = Constant.ServiceResultStatus.Other, Message = "当前工号无工位信息" }; } string ip = dataTable.Rows[0]["PLCIP"] + ""; int port = Convert.ToInt32(dataTable.Rows[0]["PLCPORT"]); JArray plcObj = JArray.Parse(dataTable.Rows[0]["PLCOBJECT"].ToString()); //写入PLC using (SocketClient plc = new SocketClient()) { //手动写 //plc.Connect(ip, port); //plc.Write("D", "102.2", plcPara["barcode"].ToString()); //plc.Write("D", "102.14", Convert.ToInt16(plcPara["goodsmodel"])); //自动按配置写 plc.Connect(ip, port); for (int i = 0; i < plcObj.Count; i++) { if (plcObj[i]["type"].ToString().ToLower() == "string") plc.Write(plcObj[i]["code"].ToString(), plcObj[i]["number"].ToString(), plcPara[plcObj[i]["name"].ToString()].ToString()); else if (plcObj[i]["type"].ToString().ToLower() == "int") plc.Write(plcObj[i]["code"].ToString(), plcObj[i]["number"].ToString(), Convert.ToInt16(plcPara[plcObj[i]["name"].ToString()])); } } //写入操作成功日志 Curtain.Log.Logger.Debug("PLC写入成功!"); //PLC操作成功 return new ServiceResultEntity() { Status = Constant.ServiceResultStatus.Success, Message = "" //一定不可以有值,为空时才是提交成功 }; } #endregion } }