using ModelBasic; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data; //using WeifenLuo.WinFormsUI.Docking; //using static SqlManage.ExecSql; /// /// /// namespace DTTest { /// /// /// public partial class E { } /// /// /// public partial class ModelManagement { /// /// /// /// /// /// public bool GetSignalTable(out DataTable dt_Signal, out DataTable dt_Device) { var b = false; dt_Signal = CreateOpcSignalTable(); dt_Device = CreateOpcDeviceTable(); var dc_TagType_TypeIDAndLong = new Dictionary(); dc_TagType_TypeIDAndLong.Add("INT16","2,2"); dc_TagType_TypeIDAndLong.Add("INT32","3,4"); dc_TagType_TypeIDAndLong.Add("FLOAT", "4,4"); dc_TagType_TypeIDAndLong.Add("UINT64", "7,8"); dc_TagType_TypeIDAndLong.Add("STRING", "8,?"); dc_TagType_TypeIDAndLong.Add("BOOL", "11,1"); dc_TagType_TypeIDAndLong.Add("BYTE", "17,1"); dc_TagType_TypeIDAndLong.Add("UINT16", "18,2"); dc_TagType_TypeIDAndLong.Add("DOUBLE", "19,8"); dc_TagType_TypeIDAndLong.Add("INT", "2,2"); dc_TagType_TypeIDAndLong.Add("DINT", "3,4"); dc_TagType_TypeIDAndLong.Add("WORD", "18,2"); dc_TagType_TypeIDAndLong.Add("DWORD", "3,4"); dc_TagType_TypeIDAndLong.Add("REAL", "4,4"); dc_TagType_TypeIDAndLong.Add("LREAL", "19,8"); //[DeviceCode],[Name],[IP],[DeviceType],[IsEnable],[Explain] var deviceTable = SqlOperation.SqlSignalTree.Select_Connect(); var countDeviceTable = deviceTable.Rows.Count; for (int i = 0; i < countDeviceTable; i++) { //[ID],[IP],[DeviceType],[IsEnable] var ip = deviceTable.Rows[i]["IP"].ToString(); var deviceType = deviceTable.Rows[i]["DeviceType"].ToString(); var isEnable = Convert.ToInt32(deviceTable.Rows[i]["IsEnable"]).ToString(); dt_Device.Rows.Add(ip, deviceType, isEnable); } var opcDataTable = SqlOperation.SqlSignalTree.SelectSignalForOpc(PP.ProjectCode); var count = opcDataTable.Rows.Count; for(int i = 0; i < count; i++) { var Region = opcDataTable.Rows[i]["Region"].ToString(); var addr = opcDataTable.Rows[i]["Address"].ToString(); var addr1 = ""; var addr2 = ""; if (addr.Contains(".")) { addr1 = addr.Split('.')[0]; addr2 = "."+addr.Split('.')[1]; } else { addr1 = addr; addr2 = ""; } var tagType = opcDataTable.Rows[i]["Type"].ToString().ToUpper(); var tagTypeID = dc_TagType_TypeIDAndLong[tagType].Split(',')[0]; var tagLong = dc_TagType_TypeIDAndLong[tagType].Split(',')[1]; //if (tagType == "STRING") //{ // tagLong = (Convert.ToInt32(addr2) + 2).ToString(); //} if (tagType == "STRING") { var length_1 = ""; if (addr2.Contains(".")) { length_1 = addr2.Replace(".", ""); } tagLong = (Convert.ToInt32(length_1) + 2).ToString(); } var tagID = opcDataTable.Rows[i]["DeviceCode"].ToString(); var tagName = opcDataTable.Rows[i]["Name"].ToString(); var isEnable = Convert.ToInt32(opcDataTable.Rows[i]["IsEnable"]).ToString(); var devicePid = opcDataTable.Rows[i]["DevicePid"].ToString(); var ip = "127.0.0.1"; var dr_Connect = deviceTable.Select($"DeviceCode = '{devicePid}'"); if (dr_Connect.Length > 0) { ip = dr_Connect[0]["IP"].ToString(); } var opName = "OP_"+ ip; var isMonitor = opcDataTable.Rows[i]["IsMonitor"].ToString (); switch (isMonitor) { case "1": case "True": case "TRUE": case "true": isMonitor = "1"; break; default: isMonitor = "0"; break; } var resourcesCode = opcDataTable.Rows[i]["Resources"].ToString(); dt_Signal.Rows.Add( tagID,//TagID tagName,//TagName opName, //工位号 opName, //数据来源 ip, //IP tagTypeID, //TagTypeID tagLong, //TagLong Region, //DbName tagType, //变量类型 addr1, //变量地址 addr2, //变量其它 "0",//演示偏移 "2",//列位置 resourcesCode,//测量位置 tagName,//测量项目 "",//测量单位 "3",//变量类型代码 "数字孪生变量",//变量类型名称 "127",//机体类型 "",//线体类型 "无",//"S7:[127.0.0.1|VFD1|S7ONLINE|01.00,127.0.0.1,02.02,1]DB411,B1",//TagAdr "无",//"S7:[@LOCALSERVER]DB411,INT1",//TagAdrDemo isEnable,//是否启用 "Group1",//监控组 "100",//监控时间间隔 "0",//OpcServer_OPNAME "0",//变量特点 isMonitor,//是否监控 "0",//变量排序 "0",//工序能力 "1",//监控属性代码 "0",//测量位置短 "100",//上限值 "0",//下限值 "50",//理论值 "1",//IsGoodBad "0",//IsSaveToSql "0"//IsWebSocket ); } return b; } private DataTable CreateOpcSignalTable() { //TagID TagName 工位号 数据来源 IP TagTypeID TagLong DbName 变量类型 变量地址 变量其它 演示偏移 列位置 测量位置 测量项目 测量单位 变量类型代码 变量类型名称 机体类型 线体类型 TagAdr TagAdrDemo 是否启用 监控组 监控时间间隔 OpcServer_OPNAME 变量特点 是否监控 变量排序 工序能力 监控属性代码 测量位置短 上限值 下限值 理论值 IsGoodBad IsSaveToSql IsWebSocket var dt = new DataTable(); dt.Columns.Add("TagID"); dt.Columns.Add("TagName"); dt.Columns.Add("工位号"); dt.Columns.Add("数据来源"); dt.Columns.Add("IP"); dt.Columns.Add("TagTypeID"); dt.Columns.Add("TagLong"); dt.Columns.Add("DbName"); dt.Columns.Add("变量类型"); dt.Columns.Add("变量地址"); dt.Columns.Add("变量其它"); dt.Columns.Add("演示偏移"); dt.Columns.Add("列位置"); dt.Columns.Add("测量位置"); dt.Columns.Add("测量项目"); dt.Columns.Add("测量单位"); dt.Columns.Add("变量类型代码"); dt.Columns.Add("变量类型名称"); dt.Columns.Add("机体类型"); dt.Columns.Add("线体类型"); dt.Columns.Add("TagAdr"); dt.Columns.Add("TagAdrDemo"); dt.Columns.Add("是否启用"); dt.Columns.Add("监控组"); dt.Columns.Add("监控时间间隔"); dt.Columns.Add("OpcServer_OPNAME"); dt.Columns.Add("变量特点"); dt.Columns.Add("是否监控"); dt.Columns.Add("变量排序"); dt.Columns.Add("工序能力"); dt.Columns.Add("监控属性代码"); dt.Columns.Add("测量位置短"); dt.Columns.Add("上限值"); dt.Columns.Add("下限值"); dt.Columns.Add("理论值"); dt.Columns.Add("IsGoodBad"); dt.Columns.Add("IsSaveToSql"); dt.Columns.Add("IsWebSocket"); return dt; } private DataTable CreateOpcDeviceTable() { //设备IP 设备类型 是否启用 var dt = new DataTable(); dt.Columns.Add("设备IP"); dt.Columns.Add("设备类型"); dt.Columns.Add("是否启用"); return dt; } public void GetSignalTableForAdvanced( DataTable dt_Signal , out Dictionary dc_IP_InstanceName , out Dictionary dc_TagID_InstanceName , out Dictionary dc_TagID_Addr , out Dictionary dc_TagID_TagTypeCode) { dc_IP_InstanceName = new Dictionary(); var dt_Device = SqlOperation.SqlSignalTree.Select_Connect(); foreach (DataRow dr in dt_Device.Rows) { var ip = dr["IP"].ToString(); var name = dr["Name"].ToString(); dc_IP_InstanceName.Add(ip, name); } dc_TagID_InstanceName = new Dictionary(); dc_TagID_Addr = new Dictionary(); dc_TagID_TagTypeCode = new Dictionary(); for (int i = 0; i < dt_Signal.Rows.Count; i++) { var tagID = dt_Signal.Rows[i]["TagID"].ToString(); var ip = dt_Signal.Rows[i]["IP"].ToString(); var dbName = dt_Signal.Rows[i]["DbName"].ToString(); var 变量地址 = dt_Signal.Rows[i]["变量地址"].ToString(); var 变量其它 = dt_Signal.Rows[i]["变量其它"].ToString(); var addr = dbName + 变量地址 + 变量其它; var tagTypeCode = Convert.ToInt32(dt_Signal.Rows[i]["TagTypeID"]); if (addr.Contains("I") | addr.Contains("Q")) { dc_TagID_InstanceName.Add(tagID, dc_IP_InstanceName[ip]); dc_TagID_Addr.Add(tagID, addr); dc_TagID_TagTypeCode.Add(tagID, tagTypeCode); } } } } }