1.Resolved multiple issues and defects

2.Implemented a license management system requiring users to obtain updated "license.lic" files from the author
This commit is contained in:
CoderShen
2025-11-08 12:20:08 +08:00
parent 40cf60b069
commit b7d6993fa3
37 changed files with 476 additions and 452 deletions

Binary file not shown.

View File

@@ -10,14 +10,13 @@ using S7CommPlusDriver;
using S7CommPlusDriver.ClientApi; using S7CommPlusDriver.ClientApi;
namespace DriverTest namespace DriverTest
{ {
class Program class Program
{ {
static void Main(string[] args) static void Main(string[] args)
{ {
string HostIp = "192.168.0.1"; string HostIp = "192.168.0.250";
string Password = ""; string Password = "";
int res; int res;
List<ItemAddress> readlist = new List<ItemAddress>(); List<ItemAddress> readlist = new List<ItemAddress>();
@@ -33,7 +32,8 @@ namespace DriverTest
Console.WriteLine("Main - Versuche Verbindungsaufbau zu: " + HostIp); Console.WriteLine("Main - Versuche Verbindungsaufbau zu: " + HostIp);
S7CommPlusConnection conn = new S7CommPlusConnection(); S7CommPlusConnection conn = new S7CommPlusConnection();
conn.OnlySecurePGOrPCAndHMI = true;//Only secure PG/PC and HMI communication conn.OnlySecurePGOrPCAndHMI = false;
System.Diagnostics.Stopwatch stopwatch1 = new System.Diagnostics.Stopwatch(); System.Diagnostics.Stopwatch stopwatch1 = new System.Diagnostics.Stopwatch();
stopwatch1.Start(); stopwatch1.Start();
res = conn.Connect(HostIp, Password); res = conn.Connect(HostIp, Password);
@@ -53,7 +53,7 @@ namespace DriverTest
res = conn.Browse(out vars); res = conn.Browse(out vars);
Console.WriteLine("Main - Browse res=" + res); Console.WriteLine("Main - Browse res=" + res);
#endregion #endregion
List<VarInfo> vars_ = vars.GetRange(0,50); List<VarInfo> vars_ = vars.GetRange(0, 1000);
#if _TEST_PLCTAG #if _TEST_PLCTAG
#region Werte aller Variablen einlesen #region Werte aller Variablen einlesen
Console.WriteLine("Main - Lese Werte aller Variablen aus"); Console.WriteLine("Main - Lese Werte aller Variablen aus");
@@ -63,7 +63,8 @@ namespace DriverTest
foreach (var v in vars_) foreach (var v in vars_)
{ {
taglist.Add(PlcTags.TagFactory(v.Name, new ItemAddress(v.AccessSequence), v.Softdatatype)); ItemAddress itemAddress = new ItemAddress(v.AccessSequence);
taglist.Add(PlcTags.TagFactory(v.Name, itemAddress, v.Softdatatype));
} }
foreach (var t in taglist) foreach (var t in taglist)
{ {
@@ -98,6 +99,7 @@ namespace DriverTest
string header = $"读取{vars_.Count}个变量耗时{ms}毫秒"; string header = $"读取{vars_.Count}个变量耗时{ms}毫秒";
Console.WriteLine(header); Console.WriteLine(header);
} }
System.Threading.Thread.Sleep(10);
} }
#endif #endif

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,5 +0,0 @@
SERVER_HANDSHAKE_TRAFFIC_SECRET 9d2884bb6d1ca343e259a23ffd195961228283a253916cb75661a90dbfa056f0 54afed328765987b013f17d3425b5ad139cd775ded5d8e9bd12fa96f93166508f793dca53267752de04c627218b51e4c
EXPORTER_SECRET 9d2884bb6d1ca343e259a23ffd195961228283a253916cb75661a90dbfa056f0 eaa6ef9882ce9d8c002ab41043f699f94d2a34fae101b9a2cd773dfdf7e6329acb65f2f6301c6894331bb62c35a63429
SERVER_TRAFFIC_SECRET_0 9d2884bb6d1ca343e259a23ffd195961228283a253916cb75661a90dbfa056f0 87149d68005b5512c6efbce24dcfb35146a4c49dcc2cc29d84294c566a45ee66b53df30eafea7c3f4070df9959d7f6be
CLIENT_HANDSHAKE_TRAFFIC_SECRET 9d2884bb6d1ca343e259a23ffd195961228283a253916cb75661a90dbfa056f0 d1d792a9d1a2f49dbda3f09b48a25de60192cef4434efd5cf51a61f73ce9e6d7c4f4dc466a6694a6d5612efd2773f784
CLIENT_TRAFFIC_SECRET_0 9d2884bb6d1ca343e259a23ffd195961228283a253916cb75661a90dbfa056f0 2238f875c69a7f5704c1792f3dec81b98af34d18643b467cccb730efc123c789632303c6e2c48dd2a397652ddfcf890a

View File

@@ -1,5 +0,0 @@
SERVER_HANDSHAKE_TRAFFIC_SECRET ef29f3273eb4c3848fb8e869418198253bb70d55e234e55ed14bf4b4bab5c5b4 5c61d992793df1e85a7f6d9c3ffd27084373954871a262ccd827c65dc9a10b0fb8153392ced7cacdcb5c523d5eac9adb
EXPORTER_SECRET ef29f3273eb4c3848fb8e869418198253bb70d55e234e55ed14bf4b4bab5c5b4 97ed8911dac9e9e8543496c3ebf120a804da5fa88f70854e693a83db5b9f39d45a7c223f2782c6fc6943f18916c797f7
SERVER_TRAFFIC_SECRET_0 ef29f3273eb4c3848fb8e869418198253bb70d55e234e55ed14bf4b4bab5c5b4 3ca5d277257f1f536affba73730ec5561eb3654eddb53146e3935f79f3dde5d9b11220936506aa7c2806ba0fd3df065c
CLIENT_HANDSHAKE_TRAFFIC_SECRET ef29f3273eb4c3848fb8e869418198253bb70d55e234e55ed14bf4b4bab5c5b4 caf02ef79a590b2d9dd78149774174c4a305bc9255fb1df90c66f61e9445be5d74c43b2eff8be2aebfab27ca40751d3c
CLIENT_TRAFFIC_SECRET_0 ef29f3273eb4c3848fb8e869418198253bb70d55e234e55ed14bf4b4bab5c5b4 9d6d6cc9fc091479726907304d7c47d84e718db4b09319871d009dc7eb19c5795487528194c362708cd86faf4452f73b

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<license id="fe76d797-6ecf-4e79-aa95-e2d30037a4c2" generate="2025-11-03T03:21:24.1952286" expiration="2025-11-10T03:21:24.1952286" type="Standard" AppName="Application" Fingerprint="0E963B0E20A1F6AC">
<name>EasyLicense</name>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
<DigestValue>2ARv1/EpdnU8XLyDEGR1br2dBD1EhjPyTuIem87R0YM=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>DB6lmvc3b0zI9Y7k+SvGegAroCRxNxbIOAZydZMz7EpFW8yNDy6iIU9uuUBIhSYdk4mEIoroxFA6Ra2Ha9Gc0bShMtJdnyBVw2My+9DNFf1iA0Nzf7qdEUfR3dd4I+w/awgGBfAqO67LxPrCva3i+AitHgSMywadcJ+45lKJDbE=</SignatureValue>
</Signature>
</license>

View File

@@ -3,12 +3,6 @@ C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\DriverTest\bin\Debug\D
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\DriverTest\bin\Debug\DriverTest.exe C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\DriverTest\bin\Debug\DriverTest.exe
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\DriverTest\bin\Debug\DriverTest.pdb C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\DriverTest\bin\Debug\DriverTest.pdb
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\DriverTest\bin\Debug\S7CommPlusDriver.dll C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\DriverTest\bin\Debug\S7CommPlusDriver.dll
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\DriverTest\bin\Debug\S7PublicKeys.dll
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\DriverTest\bin\Debug\S7Utilities.dll
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\DriverTest\bin\Debug\zlib.net.dll
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\DriverTest\bin\Debug\S7CommPlusAuth.dll
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\DriverTest\bin\Debug\S7Family0.dll
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\DriverTest\obj\Debug\DriverTest.csproj.CopyComplete C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\DriverTest\obj\Debug\DriverTest.csproj.CopyComplete
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\DriverTest\obj\Debug\DriverTest.exe C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\DriverTest\obj\Debug\DriverTest.exe
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\DriverTest\obj\Debug\DriverTest.pdb C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\DriverTest\obj\Debug\DriverTest.pdb
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\DriverTest\obj\Debug\DriverTest.csprojAssemblyReference.cache

Binary file not shown.

Binary file not shown.

BIN
Lib/License.Lib.dll Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -26,8 +26,7 @@
this.components = new System.ComponentModel.Container(); this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
this.groupBox1 = new System.Windows.Forms.GroupBox(); this.groupBox1 = new System.Windows.Forms.GroupBox();
this.lbStatus = new System.Windows.Forms.Label(); this.checkBox1 = new System.Windows.Forms.CheckBox();
this.label6 = new System.Windows.Forms.Label();
this.btnDisconnect = new System.Windows.Forms.Button(); this.btnDisconnect = new System.Windows.Forms.Button();
this.btnConnect = new System.Windows.Forms.Button(); this.btnConnect = new System.Windows.Forms.Button();
this.label2 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label();
@@ -45,6 +44,7 @@
this.tbSymbol = new System.Windows.Forms.TextBox(); this.tbSymbol = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label();
this.statusStrip1 = new System.Windows.Forms.StatusStrip(); this.statusStrip1 = new System.Windows.Forms.StatusStrip();
this.lbStatus = new System.Windows.Forms.ToolStripStatusLabel();
this.txt_plcInfo = new System.Windows.Forms.ToolStripStatusLabel(); this.txt_plcInfo = new System.Windows.Forms.ToolStripStatusLabel();
this.groupBox1.SuspendLayout(); this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout(); this.groupBox2.SuspendLayout();
@@ -53,8 +53,7 @@
// //
// groupBox1 // groupBox1
// //
this.groupBox1.Controls.Add(this.lbStatus); this.groupBox1.Controls.Add(this.checkBox1);
this.groupBox1.Controls.Add(this.label6);
this.groupBox1.Controls.Add(this.btnDisconnect); this.groupBox1.Controls.Add(this.btnDisconnect);
this.groupBox1.Controls.Add(this.btnConnect); this.groupBox1.Controls.Add(this.btnConnect);
this.groupBox1.Controls.Add(this.label2); this.groupBox1.Controls.Add(this.label2);
@@ -68,21 +67,16 @@
this.groupBox1.TabStop = false; this.groupBox1.TabStop = false;
this.groupBox1.Text = "Connection"; this.groupBox1.Text = "Connection";
// //
// lbStatus // checkBox1
// //
this.lbStatus.Location = new System.Drawing.Point(44, 114); this.checkBox1.AutoSize = true;
this.lbStatus.Name = "lbStatus"; this.checkBox1.Location = new System.Drawing.Point(9, 112);
this.lbStatus.Size = new System.Drawing.Size(116, 15); this.checkBox1.Name = "checkBox1";
this.lbStatus.TabIndex = 7; this.checkBox1.Size = new System.Drawing.Size(156, 16);
// this.checkBox1.TabIndex = 12;
// label6 this.checkBox1.Text = "Only secure PG/PC -HMI";
// this.checkBox1.UseVisualStyleBackColor = true;
this.label6.AutoSize = true; this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
this.label6.Location = new System.Drawing.Point(6, 114);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(47, 12);
this.label6.TabIndex = 6;
this.label6.Text = "Status:";
// //
// btnDisconnect // btnDisconnect
// //
@@ -136,7 +130,7 @@
this.tbIpAddress.Name = "tbIpAddress"; this.tbIpAddress.Name = "tbIpAddress";
this.tbIpAddress.Size = new System.Drawing.Size(151, 21); this.tbIpAddress.Size = new System.Drawing.Size(151, 21);
this.tbIpAddress.TabIndex = 0; this.tbIpAddress.TabIndex = 0;
this.tbIpAddress.Text = "192.168.0.250"; this.tbIpAddress.Text = "192.168.0.1";
// //
// treeView1 // treeView1
// //
@@ -282,6 +276,7 @@
// statusStrip1 // statusStrip1
// //
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.lbStatus,
this.txt_plcInfo}); this.txt_plcInfo});
this.statusStrip1.Location = new System.Drawing.Point(0, 393); this.statusStrip1.Location = new System.Drawing.Point(0, 393);
this.statusStrip1.Name = "statusStrip1"; this.statusStrip1.Name = "statusStrip1";
@@ -289,6 +284,12 @@
this.statusStrip1.TabIndex = 3; this.statusStrip1.TabIndex = 3;
this.statusStrip1.Text = "statusStrip1"; this.statusStrip1.Text = "statusStrip1";
// //
// lbStatus
//
this.lbStatus.Name = "lbStatus";
this.lbStatus.Size = new System.Drawing.Size(46, 17);
this.lbStatus.Text = "Status:";
//
// txt_plcInfo // txt_plcInfo
// //
this.txt_plcInfo.Name = "txt_plcInfo"; this.txt_plcInfo.Name = "txt_plcInfo";
@@ -335,12 +336,12 @@
private System.Windows.Forms.Label label4; private System.Windows.Forms.Label label4;
private System.Windows.Forms.TextBox tbSymbol; private System.Windows.Forms.TextBox tbSymbol;
private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label lbStatus;
private System.Windows.Forms.Label label6;
private System.Windows.Forms.Button btnRead; private System.Windows.Forms.Button btnRead;
private System.Windows.Forms.ImageList imageListTreeIcons; private System.Windows.Forms.ImageList imageListTreeIcons;
private System.Windows.Forms.StatusStrip statusStrip1; private System.Windows.Forms.StatusStrip statusStrip1;
private System.Windows.Forms.ToolStripStatusLabel txt_plcInfo; private System.Windows.Forms.ToolStripStatusLabel txt_plcInfo;
private System.Windows.Forms.ToolStripStatusLabel lbStatus;
private System.Windows.Forms.CheckBox checkBox1;
} }
} }

View File

@@ -1,406 +1,412 @@
using S7CommPlusDriver; using S7CommPlusDriver;
using S7CommPlusDriver.ClientApi; using S7CommPlusDriver.ClientApi;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Windows.Forms; using System.Windows.Forms;
namespace S7CommPlusGUIBrowser namespace S7CommPlusGUIBrowser
{ {
public partial class Form1 : Form public partial class Form1 : Form
{ {
private S7CommPlusConnection conn = null; private S7CommPlusConnection conn = null;
private bool onlySecurePGOrPCAndHMI = false;
public Form1()
{ public Form1()
InitializeComponent(); {
InitializeComponent();
string[] args = Environment.GetCommandLineArgs();
// 1st argument can be the plc ip-address, otherwise use default string[] args = Environment.GetCommandLineArgs();
if (args.Length >= 2) // 1st argument can be the plc ip-address, otherwise use default
{ if (args.Length >= 2)
tbIpAddress.Text = args[1]; {
} tbIpAddress.Text = args[1];
// 2nd argument can be the plc password, otherwise use default (no password) }
if (args.Length >= 3) // 2nd argument can be the plc password, otherwise use default (no password)
{ if (args.Length >= 3)
tbPassword.Text = args[2]; {
} tbPassword.Text = args[2];
} }
}
private void setStatus(string status)
{ private void setStatus(string status)
lbStatus.Text = status; {
lbStatus.Refresh(); lbStatus.Text = $"Status:{status}|";
} }
private void btnConnect_Click(object sender, EventArgs e) private void btnConnect_Click(object sender, EventArgs e)
{ {
setStatus("connecting..."); setStatus("connecting...");
if (conn != null) conn.Disconnect(); if (conn != null) conn.Disconnect();
conn = new S7CommPlusConnection(); conn = new S7CommPlusConnection();
int res = conn.Connect(tbIpAddress.Text, tbPassword.Text); conn.OnlySecurePGOrPCAndHMI = onlySecurePGOrPCAndHMI;
if (res != 0) int res = conn.Connect(tbIpAddress.Text, tbPassword.Text);
{ if (res != 0)
setStatus("error"); {
return; setStatus("error");
} return;
setStatus("connected"); }
txt_plcInfo.Text = $"PLCType: {conn.PLCInformation.PLCType}"; setStatus("connected");
treeView1.Nodes.Clear(); txt_plcInfo.Text = $"PLCType: {conn.PLCInformation.PLCType}|MLFB: {conn.PLCInformation.MLFB}|Firmware: {conn.PLCInformation.Firmware}";
setStatus("loading..."); treeView1.Nodes.Clear();
List<S7CommPlusConnection.DatablockInfo> dbInfoList; setStatus("loading...");
res = conn.GetListOfDatablocks(out dbInfoList); List<S7CommPlusConnection.DatablockInfo> dbInfoList;
if (res != 0) res = conn.GetListOfDatablocks(out dbInfoList);
{ if (res != 0)
setStatus("error"); {
return; setStatus("error");
} return;
TreeNode tn; }
foreach (S7CommPlusConnection.DatablockInfo dbInfo in dbInfoList) TreeNode tn;
{ foreach (S7CommPlusConnection.DatablockInfo dbInfo in dbInfoList)
tn = treeView1.Nodes.Add(dbInfo.db_name); {
tn.Nodes.Add("Loading..."); tn = treeView1.Nodes.Add(dbInfo.db_name);
tn.Tag = dbInfo.db_block_ti_relid; tn.Nodes.Add("Loading...");
tn.ImageKey = "Datablock"; tn.Tag = dbInfo.db_block_ti_relid;
tn.SelectedImageKey = tn.ImageKey; tn.ImageKey = "Datablock";
} tn.SelectedImageKey = tn.ImageKey;
// Inputs }
tn = treeView1.Nodes.Add("Inputs"); // Inputs
tn.Nodes.Add("Loading..."); tn = treeView1.Nodes.Add("Inputs");
tn.Tag = 0x90010000; tn.Nodes.Add("Loading...");
tn.ImageKey = "Default"; tn.Tag = 0x90010000;
tn.SelectedImageKey = tn.ImageKey; tn.ImageKey = "Default";
// Outputs tn.SelectedImageKey = tn.ImageKey;
tn = treeView1.Nodes.Add("Outputs"); // Outputs
tn.Nodes.Add("Loading..."); tn = treeView1.Nodes.Add("Outputs");
tn.Tag = 0x90020000; tn.Nodes.Add("Loading...");
tn.ImageKey = "Default"; tn.Tag = 0x90020000;
tn.SelectedImageKey = tn.ImageKey; tn.ImageKey = "Default";
// Merker tn.SelectedImageKey = tn.ImageKey;
tn = treeView1.Nodes.Add("Merker"); // Merker
tn.Nodes.Add("Loading..."); tn = treeView1.Nodes.Add("Merker");
tn.Tag = 0x90030000; tn.Nodes.Add("Loading...");
tn.ImageKey = "Default"; tn.Tag = 0x90030000;
tn.SelectedImageKey = tn.ImageKey; tn.ImageKey = "Default";
// S7Timers tn.SelectedImageKey = tn.ImageKey;
tn = treeView1.Nodes.Add("S7Timers"); // S7Timers
tn.Nodes.Add("Loading..."); tn = treeView1.Nodes.Add("S7Timers");
tn.Tag = 0x90050000; tn.Nodes.Add("Loading...");
tn.ImageKey = "Default"; tn.Tag = 0x90050000;
tn.SelectedImageKey = tn.ImageKey; tn.ImageKey = "Default";
// S7Counters tn.SelectedImageKey = tn.ImageKey;
tn = treeView1.Nodes.Add("S7Counters"); // S7Counters
tn.Nodes.Add("Loading..."); tn = treeView1.Nodes.Add("S7Counters");
tn.Tag = 0x90060000; tn.Nodes.Add("Loading...");
tn.ImageKey = "Default"; tn.Tag = 0x90060000;
tn.SelectedImageKey = tn.ImageKey; tn.ImageKey = "Default";
tn.SelectedImageKey = tn.ImageKey;
setStatus("connected");
} setStatus("connected");
}
private void btnDisconnect_Click(object sender, EventArgs e)
{ private void btnDisconnect_Click(object sender, EventArgs e)
setStatus("disconnecting..."); {
setStatus("disconnecting...");
if (conn != null) conn.Disconnect();
conn = null; if (conn != null) conn.Disconnect();
treeView1.Nodes.Clear(); conn = null;
txt_plcInfo.Text = "PLCType:"; treeView1.Nodes.Clear();
setStatus("disconnected"); txt_plcInfo.Text = "PLCType:";
} setStatus("disconnected");
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{ private void Form1_FormClosed(object sender, FormClosedEventArgs e)
if (conn != null) conn.Disconnect(); {
} if (conn != null) conn.Disconnect();
}
private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
{ private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
if (e.Node.Nodes.Count < 0 || e.Node.Nodes[0].Text != "Loading...") return; {
if (e.Node.Nodes.Count < 0 || e.Node.Nodes[0].Text != "Loading...") return;
setStatus("loading...");
e.Node.Nodes.Clear(); setStatus("loading...");
uint relTiId = (uint)e.Node.Tag; e.Node.Nodes.Clear();
PObject pObj = conn.getTypeInfoByRelId(relTiId); uint relTiId = (uint)e.Node.Tag;
setStatus("connected"); PObject pObj = conn.getTypeInfoByRelId(relTiId);
setStatus("connected");
if (pObj == null || pObj.VarnameList == null) return;
TreeNode tn; if (pObj == null || pObj.VarnameList == null) return;
TreeNode tnarr; TreeNode tn;
for (int i = 0; i < pObj.VarnameList.Names.Count; ++i) TreeNode tnarr;
{ for (int i = 0; i < pObj.VarnameList.Names.Count; ++i)
tn = e.Node.Nodes.Add(pObj.VarnameList.Names[i]); {
SetImageKey(ref tn, pObj.VartypeList.Elements[i]); tn = e.Node.Nodes.Add(pObj.VarnameList.Names[i]);
if (pObj.VartypeList.Elements[i].OffsetInfoType.Is1Dim()) SetImageKey(ref tn, pObj.VartypeList.Elements[i]);
{ if (pObj.VartypeList.Elements[i].OffsetInfoType.Is1Dim())
var ioitarr = (IOffsetInfoType_1Dim)pObj.VartypeList.Elements[i].OffsetInfoType; {
uint arrayElementCount = ioitarr.GetArrayElementCount(); var ioitarr = (IOffsetInfoType_1Dim)pObj.VartypeList.Elements[i].OffsetInfoType;
int arrayLowerBounds = ioitarr.GetArrayLowerBounds(); uint arrayElementCount = ioitarr.GetArrayElementCount();
for (int j = 0; j < arrayElementCount; ++j) int arrayLowerBounds = ioitarr.GetArrayLowerBounds();
{ for (int j = 0; j < arrayElementCount; ++j)
tnarr = tn.Nodes.Add(pObj.VarnameList.Names[i] + "[" + (j + arrayLowerBounds) + "]"); {
SetImageKey(ref tnarr, pObj.VartypeList.Elements[i]); tnarr = tn.Nodes.Add(pObj.VarnameList.Names[i] + "[" + (j + arrayLowerBounds) + "]");
if (pObj.VartypeList.Elements[i].OffsetInfoType.HasRelation()) SetImageKey(ref tnarr, pObj.VartypeList.Elements[i]);
{ if (pObj.VartypeList.Elements[i].OffsetInfoType.HasRelation())
var ioit = (IOffsetInfoType_Relation)pObj.VartypeList.Elements[i].OffsetInfoType; {
tnarr.Nodes.Add("Loading..."); var ioit = (IOffsetInfoType_Relation)pObj.VartypeList.Elements[i].OffsetInfoType;
tnarr.Tag = ioit.GetRelationId(); tnarr.Nodes.Add("Loading...");
SetImageKey(ref tnarr, pObj.VartypeList.Elements[i]); tnarr.Tag = ioit.GetRelationId();
} SetImageKey(ref tnarr, pObj.VartypeList.Elements[i]);
} }
tn.Tag = (uint)0; // is array }
} tn.Tag = (uint)0; // is array
else if (pObj.VartypeList.Elements[i].OffsetInfoType.IsMDim()) }
{ else if (pObj.VartypeList.Elements[i].OffsetInfoType.IsMDim())
var ioitarrm = (IOffsetInfoType_MDim)pObj.VartypeList.Elements[i].OffsetInfoType; {
uint[] MdimArrayElementCount = ioitarrm.GetMdimArrayElementCount(); var ioitarrm = (IOffsetInfoType_MDim)pObj.VartypeList.Elements[i].OffsetInfoType;
int[] MdimArrayLowerBounds = ioitarrm.GetMdimArrayLowerBounds(); uint[] MdimArrayElementCount = ioitarrm.GetMdimArrayElementCount();
int dimCount = MdimArrayElementCount.Aggregate(0, (acc, act) => acc += (act > 0) ? 1 : 0); int[] MdimArrayLowerBounds = ioitarrm.GetMdimArrayLowerBounds();
int[] indexes = new int[dimCount]; int dimCount = MdimArrayElementCount.Aggregate(0, (acc, act) => acc += (act > 0) ? 1 : 0);
bool stop = false; int[] indexes = new int[dimCount];
while (!stop) bool stop = false;
{ while (!stop)
string arrIdxStr = ""; {
for (int j = dimCount - 1; j >= 0; --j) string arrIdxStr = "";
{ for (int j = dimCount - 1; j >= 0; --j)
arrIdxStr += (arrIdxStr != "" ? "," : "") + (indexes[j] + MdimArrayLowerBounds[j]); {
} arrIdxStr += (arrIdxStr != "" ? "," : "") + (indexes[j] + MdimArrayLowerBounds[j]);
tnarr = tn.Nodes.Add(pObj.VarnameList.Names[i] + "[" + arrIdxStr + "]"); }
SetImageKey(ref tnarr, pObj.VartypeList.Elements[i]); tnarr = tn.Nodes.Add(pObj.VarnameList.Names[i] + "[" + arrIdxStr + "]");
if (pObj.VartypeList.Elements[i].OffsetInfoType.HasRelation()) SetImageKey(ref tnarr, pObj.VartypeList.Elements[i]);
{ if (pObj.VartypeList.Elements[i].OffsetInfoType.HasRelation())
var ioit = (IOffsetInfoType_Relation)pObj.VartypeList.Elements[i].OffsetInfoType; {
tnarr.Nodes.Add("Loading..."); var ioit = (IOffsetInfoType_Relation)pObj.VartypeList.Elements[i].OffsetInfoType;
tnarr.Tag = ioit.GetRelationId(); tnarr.Nodes.Add("Loading...");
SetImageKey(ref tnarr, pObj.VartypeList.Elements[i]); tnarr.Tag = ioit.GetRelationId();
} SetImageKey(ref tnarr, pObj.VartypeList.Elements[i]);
++indexes[0]; }
for (int j = 0; j < dimCount; ++j) ++indexes[0];
{ for (int j = 0; j < dimCount; ++j)
if (indexes[j] >= MdimArrayElementCount[j]) {
{ if (indexes[j] >= MdimArrayElementCount[j])
if (j + 1 < dimCount) {
{ if (j + 1 < dimCount)
indexes[j] = 0; {
++indexes[j + 1]; indexes[j] = 0;
} ++indexes[j + 1];
else }
{ else
stop = true; {
} stop = true;
} }
else }
{ else
break; {
} break;
} }
} }
tn.Tag = (uint)0; // is array }
} tn.Tag = (uint)0; // is array
else }
{ else
if (pObj.VartypeList.Elements[i].OffsetInfoType.HasRelation()) {
{ if (pObj.VartypeList.Elements[i].OffsetInfoType.HasRelation())
var ioit = (IOffsetInfoType_Relation)pObj.VartypeList.Elements[i].OffsetInfoType; {
tn.Nodes.Add("Loading..."); var ioit = (IOffsetInfoType_Relation)pObj.VartypeList.Elements[i].OffsetInfoType;
tn.Tag = ioit.GetRelationId(); tn.Nodes.Add("Loading...");
SetImageKey(ref tn, pObj.VartypeList.Elements[i]); tn.Tag = ioit.GetRelationId();
} SetImageKey(ref tn, pObj.VartypeList.Elements[i]);
} }
} }
} }
}
private void SetImageKey(ref TreeNode tn, PVartypeListElement vte)
{ private void SetImageKey(ref TreeNode tn, PVartypeListElement vte)
string sk = "Tag"; {
switch (vte.Softdatatype) string sk = "Tag";
{ switch (vte.Softdatatype)
case Softdatatype.S7COMMP_SOFTDATATYPE_BOOL: {
case Softdatatype.S7COMMP_SOFTDATATYPE_BBOOL: case Softdatatype.S7COMMP_SOFTDATATYPE_BOOL:
sk = "Boolean"; case Softdatatype.S7COMMP_SOFTDATATYPE_BBOOL:
break; sk = "Boolean";
case Softdatatype.S7COMMP_SOFTDATATYPE_INT: break;
case Softdatatype.S7COMMP_SOFTDATATYPE_DINT: case Softdatatype.S7COMMP_SOFTDATATYPE_INT:
case Softdatatype.S7COMMP_SOFTDATATYPE_ULINT: case Softdatatype.S7COMMP_SOFTDATATYPE_DINT:
case Softdatatype.S7COMMP_SOFTDATATYPE_LINT: case Softdatatype.S7COMMP_SOFTDATATYPE_ULINT:
case Softdatatype.S7COMMP_SOFTDATATYPE_USINT: case Softdatatype.S7COMMP_SOFTDATATYPE_LINT:
case Softdatatype.S7COMMP_SOFTDATATYPE_UINT: case Softdatatype.S7COMMP_SOFTDATATYPE_USINT:
case Softdatatype.S7COMMP_SOFTDATATYPE_UDINT: case Softdatatype.S7COMMP_SOFTDATATYPE_UINT:
case Softdatatype.S7COMMP_SOFTDATATYPE_SINT: case Softdatatype.S7COMMP_SOFTDATATYPE_UDINT:
// Derived types case Softdatatype.S7COMMP_SOFTDATATYPE_SINT:
case Softdatatype.S7COMMP_SOFTDATATYPE_BLOCKFB: // Derived types
case Softdatatype.S7COMMP_SOFTDATATYPE_BLOCKFC: case Softdatatype.S7COMMP_SOFTDATATYPE_BLOCKFB:
case Softdatatype.S7COMMP_SOFTDATATYPE_OBANY: case Softdatatype.S7COMMP_SOFTDATATYPE_BLOCKFC:
case Softdatatype.S7COMMP_SOFTDATATYPE_OBDELAY: case Softdatatype.S7COMMP_SOFTDATATYPE_OBANY:
case Softdatatype.S7COMMP_SOFTDATATYPE_OBTOD: case Softdatatype.S7COMMP_SOFTDATATYPE_OBDELAY:
case Softdatatype.S7COMMP_SOFTDATATYPE_OBCYCLIC: case Softdatatype.S7COMMP_SOFTDATATYPE_OBTOD:
case Softdatatype.S7COMMP_SOFTDATATYPE_OBATT: case Softdatatype.S7COMMP_SOFTDATATYPE_OBCYCLIC:
case Softdatatype.S7COMMP_SOFTDATATYPE_PORT: case Softdatatype.S7COMMP_SOFTDATATYPE_OBATT:
case Softdatatype.S7COMMP_SOFTDATATYPE_RTM: case Softdatatype.S7COMMP_SOFTDATATYPE_PORT:
case Softdatatype.S7COMMP_SOFTDATATYPE_PIP: case Softdatatype.S7COMMP_SOFTDATATYPE_RTM:
case Softdatatype.S7COMMP_SOFTDATATYPE_OBPCYCLE: case Softdatatype.S7COMMP_SOFTDATATYPE_PIP:
case Softdatatype.S7COMMP_SOFTDATATYPE_OBHWINT: case Softdatatype.S7COMMP_SOFTDATATYPE_OBPCYCLE:
case Softdatatype.S7COMMP_SOFTDATATYPE_OBDIAG: case Softdatatype.S7COMMP_SOFTDATATYPE_OBHWINT:
case Softdatatype.S7COMMP_SOFTDATATYPE_OBTIMEERROR: case Softdatatype.S7COMMP_SOFTDATATYPE_OBDIAG:
case Softdatatype.S7COMMP_SOFTDATATYPE_OBSTARTUP: case Softdatatype.S7COMMP_SOFTDATATYPE_OBTIMEERROR:
case Softdatatype.S7COMMP_SOFTDATATYPE_DBANY: case Softdatatype.S7COMMP_SOFTDATATYPE_OBSTARTUP:
case Softdatatype.S7COMMP_SOFTDATATYPE_DBWWW: case Softdatatype.S7COMMP_SOFTDATATYPE_DBANY:
case Softdatatype.S7COMMP_SOFTDATATYPE_DBDYN: case Softdatatype.S7COMMP_SOFTDATATYPE_DBWWW:
sk = "Integer2"; case Softdatatype.S7COMMP_SOFTDATATYPE_DBDYN:
break; sk = "Integer2";
case Softdatatype.S7COMMP_SOFTDATATYPE_BYTE: break;
case Softdatatype.S7COMMP_SOFTDATATYPE_WORD: case Softdatatype.S7COMMP_SOFTDATATYPE_BYTE:
case Softdatatype.S7COMMP_SOFTDATATYPE_DWORD: case Softdatatype.S7COMMP_SOFTDATATYPE_WORD:
case Softdatatype.S7COMMP_SOFTDATATYPE_LWORD: case Softdatatype.S7COMMP_SOFTDATATYPE_DWORD:
// Derived types case Softdatatype.S7COMMP_SOFTDATATYPE_LWORD:
case Softdatatype.S7COMMP_SOFTDATATYPE_AOMIDENT: // Derived types
case Softdatatype.S7COMMP_SOFTDATATYPE_EVENTANY: case Softdatatype.S7COMMP_SOFTDATATYPE_AOMIDENT:
case Softdatatype.S7COMMP_SOFTDATATYPE_EVENTATT: case Softdatatype.S7COMMP_SOFTDATATYPE_EVENTANY:
case Softdatatype.S7COMMP_SOFTDATATYPE_AOMLINK: case Softdatatype.S7COMMP_SOFTDATATYPE_EVENTATT:
case Softdatatype.S7COMMP_SOFTDATATYPE_HWANY: case Softdatatype.S7COMMP_SOFTDATATYPE_AOMLINK:
case Softdatatype.S7COMMP_SOFTDATATYPE_HWIOSYSTEM: case Softdatatype.S7COMMP_SOFTDATATYPE_HWANY:
case Softdatatype.S7COMMP_SOFTDATATYPE_HWDPMASTER: case Softdatatype.S7COMMP_SOFTDATATYPE_HWIOSYSTEM:
case Softdatatype.S7COMMP_SOFTDATATYPE_HWDEVICE: case Softdatatype.S7COMMP_SOFTDATATYPE_HWDPMASTER:
case Softdatatype.S7COMMP_SOFTDATATYPE_HWDPSLAVE: case Softdatatype.S7COMMP_SOFTDATATYPE_HWDEVICE:
case Softdatatype.S7COMMP_SOFTDATATYPE_HWIO: case Softdatatype.S7COMMP_SOFTDATATYPE_HWDPSLAVE:
case Softdatatype.S7COMMP_SOFTDATATYPE_HWMODULE: case Softdatatype.S7COMMP_SOFTDATATYPE_HWIO:
case Softdatatype.S7COMMP_SOFTDATATYPE_HWSUBMODULE: case Softdatatype.S7COMMP_SOFTDATATYPE_HWMODULE:
case Softdatatype.S7COMMP_SOFTDATATYPE_HWHSC: case Softdatatype.S7COMMP_SOFTDATATYPE_HWSUBMODULE:
case Softdatatype.S7COMMP_SOFTDATATYPE_HWPWM: case Softdatatype.S7COMMP_SOFTDATATYPE_HWHSC:
case Softdatatype.S7COMMP_SOFTDATATYPE_HWPTO: case Softdatatype.S7COMMP_SOFTDATATYPE_HWPWM:
case Softdatatype.S7COMMP_SOFTDATATYPE_HWINTERFACE: case Softdatatype.S7COMMP_SOFTDATATYPE_HWPTO:
case Softdatatype.S7COMMP_SOFTDATATYPE_HWIEPORT: case Softdatatype.S7COMMP_SOFTDATATYPE_HWINTERFACE:
case Softdatatype.S7COMMP_SOFTDATATYPE_CONNANY: case Softdatatype.S7COMMP_SOFTDATATYPE_HWIEPORT:
case Softdatatype.S7COMMP_SOFTDATATYPE_CONNPRG: case Softdatatype.S7COMMP_SOFTDATATYPE_CONNANY:
case Softdatatype.S7COMMP_SOFTDATATYPE_CONNOUC: case Softdatatype.S7COMMP_SOFTDATATYPE_CONNPRG:
case Softdatatype.S7COMMP_SOFTDATATYPE_CONNRID: case Softdatatype.S7COMMP_SOFTDATATYPE_CONNOUC:
sk = "Binary2"; case Softdatatype.S7COMMP_SOFTDATATYPE_CONNRID:
break; sk = "Binary2";
case Softdatatype.S7COMMP_SOFTDATATYPE_REAL: break;
case Softdatatype.S7COMMP_SOFTDATATYPE_LREAL: case Softdatatype.S7COMMP_SOFTDATATYPE_REAL:
sk = "Number2"; case Softdatatype.S7COMMP_SOFTDATATYPE_LREAL:
break; sk = "Number2";
case Softdatatype.S7COMMP_SOFTDATATYPE_CHAR: break;
case Softdatatype.S7COMMP_SOFTDATATYPE_WCHAR: case Softdatatype.S7COMMP_SOFTDATATYPE_CHAR:
sk = "Char"; case Softdatatype.S7COMMP_SOFTDATATYPE_WCHAR:
break; sk = "Char";
case Softdatatype.S7COMMP_SOFTDATATYPE_STRING: break;
case Softdatatype.S7COMMP_SOFTDATATYPE_WSTRING: case Softdatatype.S7COMMP_SOFTDATATYPE_STRING:
sk = "Text"; case Softdatatype.S7COMMP_SOFTDATATYPE_WSTRING:
break; sk = "Text";
case Softdatatype.S7COMMP_SOFTDATATYPE_DATE: break;
sk = "Date"; case Softdatatype.S7COMMP_SOFTDATATYPE_DATE:
break; sk = "Date";
case Softdatatype.S7COMMP_SOFTDATATYPE_TIMEOFDAY: break;
case Softdatatype.S7COMMP_SOFTDATATYPE_LTOD: case Softdatatype.S7COMMP_SOFTDATATYPE_TIMEOFDAY:
sk = "Time"; case Softdatatype.S7COMMP_SOFTDATATYPE_LTOD:
break; sk = "Time";
case Softdatatype.S7COMMP_SOFTDATATYPE_TIME: break;
case Softdatatype.S7COMMP_SOFTDATATYPE_LTIME: case Softdatatype.S7COMMP_SOFTDATATYPE_TIME:
case Softdatatype.S7COMMP_SOFTDATATYPE_S5TIME: case Softdatatype.S7COMMP_SOFTDATATYPE_LTIME:
case Softdatatype.S7COMMP_SOFTDATATYPE_TIMER: case Softdatatype.S7COMMP_SOFTDATATYPE_S5TIME:
sk = "Timer"; // Duration case Softdatatype.S7COMMP_SOFTDATATYPE_TIMER:
break; sk = "Timer"; // Duration
case Softdatatype.S7COMMP_SOFTDATATYPE_DATEANDTIME: break;
case Softdatatype.S7COMMP_SOFTDATATYPE_LDT: case Softdatatype.S7COMMP_SOFTDATATYPE_DATEANDTIME:
case Softdatatype.S7COMMP_SOFTDATATYPE_DTL: case Softdatatype.S7COMMP_SOFTDATATYPE_LDT:
sk = "DateTime"; case Softdatatype.S7COMMP_SOFTDATATYPE_DTL:
break; sk = "DateTime";
case Softdatatype.S7COMMP_SOFTDATATYPE_ANY: break;
case Softdatatype.S7COMMP_SOFTDATATYPE_POINTER: case Softdatatype.S7COMMP_SOFTDATATYPE_ANY:
case Softdatatype.S7COMMP_SOFTDATATYPE_REMOTE: case Softdatatype.S7COMMP_SOFTDATATYPE_POINTER:
sk = "Any"; case Softdatatype.S7COMMP_SOFTDATATYPE_REMOTE:
break; sk = "Any";
} break;
if (vte.OffsetInfoType.HasRelation()) }
{ if (vte.OffsetInfoType.HasRelation())
sk = "Structure"; {
} sk = "Structure";
tn.ImageKey = sk; }
tn.SelectedImageKey = tn.ImageKey; tn.ImageKey = sk;
} tn.SelectedImageKey = tn.ImageKey;
}
private string escapeTiaString(string str, bool isRootNode, bool isArray)
{ private string escapeTiaString(string str, bool isRootNode, bool isArray)
if (isRootNode) return '"' + str + '"'; {
Regex re = new Regex("(^[0-9]|[^0-9A-Za-z_])"); if (isRootNode) return '"' + str + '"';
if (isArray) Regex re = new Regex("(^[0-9]|[^0-9A-Za-z_])");
{ if (isArray)
Regex reArr = new Regex("^([^\"]*)(\\[[0-9, ]+\\])$"); {
Match m = reArr.Match(str); Regex reArr = new Regex("^([^\"]*)(\\[[0-9, ]+\\])$");
if (!m.Success) return str; Match m = reArr.Match(str);
if (re.Match(m.Groups[1].Value).Success) return '"' + m.Groups[1].Value + '"' + m.Groups[2].Value; if (!m.Success) return str;
return str; if (re.Match(m.Groups[1].Value).Success) return '"' + m.Groups[1].Value + '"' + m.Groups[2].Value;
} return str;
if (re.IsMatch(str)) return '"' + str + '"'; }
return str; if (re.IsMatch(str)) return '"' + str + '"';
} return str;
}
private void readTagBySymbol()
{ private void readTagBySymbol()
tbValue.Text = ""; {
tbSymbolicAddress.Text = ""; tbValue.Text = "";
tbSymbolicAddress.Text = "";
setStatus("loading...");
PlcTag tag = conn.getPlcTagBySymbol(tbSymbol.Text); setStatus("loading...");
setStatus("connected"); PlcTag tag = conn.getPlcTagBySymbol(tbSymbol.Text);
if (tag == null) return; setStatus("connected");
if (tag == null) return;
tbSymbolicAddress.Text = tag.Address.GetAccessString();
tbSymbolicAddress.Text = tag.Address.GetAccessString();
PlcTags tags = new PlcTags();
tags.AddTag(tag); PlcTags tags = new PlcTags();
if (tags.ReadTags(conn) != 0) return; tags.AddTag(tag);
tbValue.Text = tag.ToString(); if (tags.ReadTags(conn) != 0) return;
} tbValue.Text = tag.ToString();
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{ private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
if (e.Node.Tag != null) return; // has relId {
if (e.Node.Tag != null) return; // has relId
string name = "";
TreeNode tn = e.Node; string name = "";
while (tn != null) TreeNode tn = e.Node;
{ while (tn != null)
bool isArray = false; {
string nodeText = tn.Text; bool isArray = false;
tn = tn.Parent; string nodeText = tn.Text;
if (tn != null && tn.Tag != null) tn = tn.Parent;
{ // is array if (tn != null && tn.Tag != null)
if ((uint)tn.Tag == 0) { // is array
{ if ((uint)tn.Tag == 0)
isArray = true; {
tn = tn.Parent; // skip array parent isArray = true;
} tn = tn.Parent; // skip array parent
} }
if (tn != null && tn.Tag != null) }
{ // don't add in/out/merker area as tag if (tn != null && tn.Tag != null)
uint relId = (uint)tn.Tag; { // don't add in/out/merker area as tag
if (relId == 0x90010000 || relId == 0x90020000 || relId == 0x90030000) tn = null; uint relId = (uint)tn.Tag;
} if (relId == 0x90010000 || relId == 0x90020000 || relId == 0x90030000) tn = null;
name = escapeTiaString(nodeText, tn == null, isArray) + (name != "" ? "." : "") + name; }
} name = escapeTiaString(nodeText, tn == null, isArray) + (name != "" ? "." : "") + name;
tbSymbol.Text = name; }
tbSymbol.Text = name;
readTagBySymbol();
} readTagBySymbol();
}
private void btnRead_Click(object sender, EventArgs e)
{ private void btnRead_Click(object sender, EventArgs e)
if (tbSymbol.Text == "") return; {
if (tbSymbol.Text == "") return;
try
{ try
readTagBySymbol(); {
} readTagBySymbol();
catch (Exception ex) }
{ catch (Exception ex)
MessageBox.Show("ERROR: " + ex.Message); {
} MessageBox.Show("ERROR: " + ex.Message);
} }
} }
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
onlySecurePGOrPCAndHMI = checkBox1.Checked;
}
}
}

View File

@@ -125,7 +125,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC4 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC4
KgAAAk1TRnQBSQFMAgEBJAEAAagBAAGoAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo KgAAAk1TRnQBSQFMAgEBJAEAAbgBAAG4AQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAAaADAAEBAQABCAYAASgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AwABQAMAAaADAAEBAQABCAYAASgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<license id="fe76d797-6ecf-4e79-aa95-e2d30037a4c2" generate="2025-11-03T03:21:24.1952286" expiration="2025-11-10T03:21:24.1952286" type="Standard" AppName="Application" Fingerprint="0E963B0E20A1F6AC">
<name>EasyLicense</name>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
<DigestValue>2ARv1/EpdnU8XLyDEGR1br2dBD1EhjPyTuIem87R0YM=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>DB6lmvc3b0zI9Y7k+SvGegAroCRxNxbIOAZydZMz7EpFW8yNDy6iIU9uuUBIhSYdk4mEIoroxFA6Ra2Ha9Gc0bShMtJdnyBVw2My+9DNFf1iA0Nzf7qdEUfR3dd4I+w/awgGBfAqO67LxPrCva3i+AitHgSMywadcJ+45lKJDbE=</SignatureValue>
</Signature>
</license>

View File

@@ -10,8 +10,3 @@ C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\S7CommPlusGUIBrowser\o
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\S7CommPlusGUIBrowser\obj\Debug\S7CommPlusGUIBrowser.csproj.CopyComplete C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\S7CommPlusGUIBrowser\obj\Debug\S7CommPlusGUIBrowser.csproj.CopyComplete
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\S7CommPlusGUIBrowser\obj\Debug\S7CommPlusGUIBrowser.exe C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\S7CommPlusGUIBrowser\obj\Debug\S7CommPlusGUIBrowser.exe
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\S7CommPlusGUIBrowser\obj\Debug\S7CommPlusGUIBrowser.pdb C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\S7CommPlusGUIBrowser\obj\Debug\S7CommPlusGUIBrowser.pdb
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\S7CommPlusGUIBrowser\bin\Debug\S7PublicKeys.dll
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\S7CommPlusGUIBrowser\bin\Debug\S7Utilities.dll
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\S7CommPlusGUIBrowser\bin\Debug\zlib.net.dll
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\S7CommPlusGUIBrowser\bin\Debug\S7CommPlusAuth.dll
C:\Users\ShenX\Desktop\DiscoverDevices\S7CommPlusV3Driver\S7CommPlusGUIBrowser\bin\Debug\S7Family0.dll