| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- /*******************************************************************************
- * 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
- {
- /// <summary>
- /// PLC相关处理
- /// </summary>
- public class PLCModuleLogic
- {
- #region 恒洁三水三车间工位对应PLC操作
- /// <summary>
- /// 恒洁三水三车间工位对应PLC操作 xuwei modify 2020-06-29
- /// </summary>
- /// <param name="sUserInfo"></param>
- /// <returns></returns>
- 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();
- }
- }
- }
- /// <summary>
- /// 获取工位类型ID xuwei add 2020-06-29
- /// </summary>
- /// <param name="conn"></param>
- /// <param name="userCode"></param>
- /// <returns></returns>
- 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)
- ));
- }
- /// <summary>
- /// 写PLC xuwei add 2020-06-29
- /// </summary>
- /// <param name="conn"></param>
- /// <param name="userCode"></param>
- /// <param name="workStationType"></param>
- /// <param name="plcPara"></param>
- /// <returns></returns>
- 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<SiemensS7_1200Model> plc = new SocketClient<SiemensS7_1200Model>())
- {
- //手动写
- //plc.Connect(ip, port);
- //plc.Write<string>("D", "102.2", plcPara["barcode"].ToString());
- //plc.Write<short>("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<string>(plcObj[i]["code"].ToString(), plcObj[i]["number"].ToString(), plcPara[plcObj[i]["name"].ToString()].ToString());
- else if (plcObj[i]["type"].ToString().ToLower() == "int")
- plc.Write<short>(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
- }
- }
|