299 lines
10 KiB
C#
299 lines
10 KiB
C#
using ModelBasic;
|
|
using Newtonsoft.Json;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
//using WeifenLuo.WinFormsUI.Docking;
|
|
//using static SqlManage.ExecSql;
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
namespace DTTest
|
|
{
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public partial class E { }
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public partial class ModelManagement
|
|
{
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="dt_Signal"></param>
|
|
/// <param name="dt_Device"></param>
|
|
/// <returns></returns>
|
|
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<String, String>();
|
|
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<String, String> dc_IP_InstanceName
|
|
, out Dictionary<String,String> dc_TagID_InstanceName
|
|
, out Dictionary<String, String> dc_TagID_Addr
|
|
, out Dictionary<String, Int32> dc_TagID_TagTypeCode)
|
|
{
|
|
|
|
dc_IP_InstanceName = new Dictionary<String, String>();
|
|
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<String, String>();
|
|
dc_TagID_Addr = new Dictionary<String, String>();
|
|
dc_TagID_TagTypeCode = new Dictionary<String, Int32>();
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|