Files
2026-05-29 10:07:05 +08:00

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);
}
}
}
}
}