mirror of
https://gitee.com/lircy/S7CommPlusV3Driver
synced 2026-03-23 15:06:35 +08:00
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:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -10,14 +10,13 @@ using S7CommPlusDriver;
|
||||
|
||||
using S7CommPlusDriver.ClientApi;
|
||||
|
||||
|
||||
namespace DriverTest
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
string HostIp = "192.168.0.1";
|
||||
string HostIp = "192.168.0.250";
|
||||
string Password = "";
|
||||
int res;
|
||||
List<ItemAddress> readlist = new List<ItemAddress>();
|
||||
@@ -33,7 +32,8 @@ namespace DriverTest
|
||||
Console.WriteLine("Main - Versuche Verbindungsaufbau zu: " + HostIp);
|
||||
|
||||
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();
|
||||
stopwatch1.Start();
|
||||
res = conn.Connect(HostIp, Password);
|
||||
@@ -53,7 +53,7 @@ namespace DriverTest
|
||||
res = conn.Browse(out vars);
|
||||
Console.WriteLine("Main - Browse res=" + res);
|
||||
#endregion
|
||||
List<VarInfo> vars_ = vars.GetRange(0,50);
|
||||
List<VarInfo> vars_ = vars.GetRange(0, 1000);
|
||||
#if _TEST_PLCTAG
|
||||
#region Werte aller Variablen einlesen
|
||||
Console.WriteLine("Main - Lese Werte aller Variablen aus");
|
||||
@@ -63,7 +63,8 @@ namespace DriverTest
|
||||
|
||||
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)
|
||||
{
|
||||
@@ -98,6 +99,7 @@ namespace DriverTest
|
||||
string header = $"读取{vars_.Count}个变量耗时{ms}毫秒";
|
||||
Console.WriteLine(header);
|
||||
}
|
||||
System.Threading.Thread.Sleep(10);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
BIN
DriverTest/bin/Debug/License.Lib.dll
Normal file
BIN
DriverTest/bin/Debug/License.Lib.dll
Normal file
Binary file not shown.
Binary file not shown.
@@ -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
|
||||
@@ -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
|
||||
BIN
DriverTest/bin/Debug/libcrypto-3-x64.dll
Normal file
BIN
DriverTest/bin/Debug/libcrypto-3-x64.dll
Normal file
Binary file not shown.
BIN
DriverTest/bin/Debug/libssl-3-x64.dll
Normal file
BIN
DriverTest/bin/Debug/libssl-3-x64.dll
Normal file
Binary file not shown.
18
DriverTest/bin/Debug/license.lic
Normal file
18
DriverTest/bin/Debug/license.lic
Normal 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>
|
||||
@@ -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.pdb
|
||||
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.exe
|
||||
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.
Binary file not shown.
BIN
Lib/License.Lib.dll
Normal file
BIN
Lib/License.Lib.dll
Normal file
Binary file not shown.
Binary file not shown.
43
S7CommPlusGUIBrowser/Form1.Designer.cs
generated
43
S7CommPlusGUIBrowser/Form1.Designer.cs
generated
@@ -26,8 +26,7 @@
|
||||
this.components = new System.ComponentModel.Container();
|
||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.lbStatus = new System.Windows.Forms.Label();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.checkBox1 = new System.Windows.Forms.CheckBox();
|
||||
this.btnDisconnect = new System.Windows.Forms.Button();
|
||||
this.btnConnect = new System.Windows.Forms.Button();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
@@ -45,6 +44,7 @@
|
||||
this.tbSymbol = new System.Windows.Forms.TextBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.statusStrip1 = new System.Windows.Forms.StatusStrip();
|
||||
this.lbStatus = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.txt_plcInfo = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
@@ -53,8 +53,7 @@
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Controls.Add(this.lbStatus);
|
||||
this.groupBox1.Controls.Add(this.label6);
|
||||
this.groupBox1.Controls.Add(this.checkBox1);
|
||||
this.groupBox1.Controls.Add(this.btnDisconnect);
|
||||
this.groupBox1.Controls.Add(this.btnConnect);
|
||||
this.groupBox1.Controls.Add(this.label2);
|
||||
@@ -68,21 +67,16 @@
|
||||
this.groupBox1.TabStop = false;
|
||||
this.groupBox1.Text = "Connection";
|
||||
//
|
||||
// lbStatus
|
||||
// checkBox1
|
||||
//
|
||||
this.lbStatus.Location = new System.Drawing.Point(44, 114);
|
||||
this.lbStatus.Name = "lbStatus";
|
||||
this.lbStatus.Size = new System.Drawing.Size(116, 15);
|
||||
this.lbStatus.TabIndex = 7;
|
||||
//
|
||||
// label6
|
||||
//
|
||||
this.label6.AutoSize = true;
|
||||
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:";
|
||||
this.checkBox1.AutoSize = true;
|
||||
this.checkBox1.Location = new System.Drawing.Point(9, 112);
|
||||
this.checkBox1.Name = "checkBox1";
|
||||
this.checkBox1.Size = new System.Drawing.Size(156, 16);
|
||||
this.checkBox1.TabIndex = 12;
|
||||
this.checkBox1.Text = "Only secure PG/PC -HMI";
|
||||
this.checkBox1.UseVisualStyleBackColor = true;
|
||||
this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged);
|
||||
//
|
||||
// btnDisconnect
|
||||
//
|
||||
@@ -136,7 +130,7 @@
|
||||
this.tbIpAddress.Name = "tbIpAddress";
|
||||
this.tbIpAddress.Size = new System.Drawing.Size(151, 21);
|
||||
this.tbIpAddress.TabIndex = 0;
|
||||
this.tbIpAddress.Text = "192.168.0.250";
|
||||
this.tbIpAddress.Text = "192.168.0.1";
|
||||
//
|
||||
// treeView1
|
||||
//
|
||||
@@ -282,6 +276,7 @@
|
||||
// statusStrip1
|
||||
//
|
||||
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.lbStatus,
|
||||
this.txt_plcInfo});
|
||||
this.statusStrip1.Location = new System.Drawing.Point(0, 393);
|
||||
this.statusStrip1.Name = "statusStrip1";
|
||||
@@ -289,6 +284,12 @@
|
||||
this.statusStrip1.TabIndex = 3;
|
||||
this.statusStrip1.Text = "statusStrip1";
|
||||
//
|
||||
// lbStatus
|
||||
//
|
||||
this.lbStatus.Name = "lbStatus";
|
||||
this.lbStatus.Size = new System.Drawing.Size(46, 17);
|
||||
this.lbStatus.Text = "Status:";
|
||||
//
|
||||
// txt_plcInfo
|
||||
//
|
||||
this.txt_plcInfo.Name = "txt_plcInfo";
|
||||
@@ -335,12 +336,12 @@
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.TextBox tbSymbol;
|
||||
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.ImageList imageListTreeIcons;
|
||||
private System.Windows.Forms.StatusStrip statusStrip1;
|
||||
private System.Windows.Forms.ToolStripStatusLabel txt_plcInfo;
|
||||
private System.Windows.Forms.ToolStripStatusLabel lbStatus;
|
||||
private System.Windows.Forms.CheckBox checkBox1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,406 +1,412 @@
|
||||
using S7CommPlusDriver;
|
||||
using S7CommPlusDriver.ClientApi;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace S7CommPlusGUIBrowser
|
||||
{
|
||||
public partial class Form1 : Form
|
||||
{
|
||||
|
||||
private S7CommPlusConnection conn = null;
|
||||
|
||||
public Form1()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
string[] args = Environment.GetCommandLineArgs();
|
||||
// 1st argument can be the plc ip-address, otherwise use default
|
||||
if (args.Length >= 2)
|
||||
{
|
||||
tbIpAddress.Text = args[1];
|
||||
}
|
||||
// 2nd argument can be the plc password, otherwise use default (no password)
|
||||
if (args.Length >= 3)
|
||||
{
|
||||
tbPassword.Text = args[2];
|
||||
}
|
||||
}
|
||||
|
||||
private void setStatus(string status)
|
||||
{
|
||||
lbStatus.Text = status;
|
||||
lbStatus.Refresh();
|
||||
}
|
||||
|
||||
private void btnConnect_Click(object sender, EventArgs e)
|
||||
{
|
||||
setStatus("connecting...");
|
||||
|
||||
if (conn != null) conn.Disconnect();
|
||||
conn = new S7CommPlusConnection();
|
||||
int res = conn.Connect(tbIpAddress.Text, tbPassword.Text);
|
||||
if (res != 0)
|
||||
{
|
||||
setStatus("error");
|
||||
return;
|
||||
}
|
||||
setStatus("connected");
|
||||
txt_plcInfo.Text = $"PLCType: {conn.PLCInformation.PLCType}";
|
||||
treeView1.Nodes.Clear();
|
||||
setStatus("loading...");
|
||||
List<S7CommPlusConnection.DatablockInfo> dbInfoList;
|
||||
res = conn.GetListOfDatablocks(out dbInfoList);
|
||||
if (res != 0)
|
||||
{
|
||||
setStatus("error");
|
||||
return;
|
||||
}
|
||||
TreeNode tn;
|
||||
foreach (S7CommPlusConnection.DatablockInfo dbInfo in dbInfoList)
|
||||
{
|
||||
tn = treeView1.Nodes.Add(dbInfo.db_name);
|
||||
tn.Nodes.Add("Loading...");
|
||||
tn.Tag = dbInfo.db_block_ti_relid;
|
||||
tn.ImageKey = "Datablock";
|
||||
tn.SelectedImageKey = tn.ImageKey;
|
||||
}
|
||||
// Inputs
|
||||
tn = treeView1.Nodes.Add("Inputs");
|
||||
tn.Nodes.Add("Loading...");
|
||||
tn.Tag = 0x90010000;
|
||||
tn.ImageKey = "Default";
|
||||
tn.SelectedImageKey = tn.ImageKey;
|
||||
// Outputs
|
||||
tn = treeView1.Nodes.Add("Outputs");
|
||||
tn.Nodes.Add("Loading...");
|
||||
tn.Tag = 0x90020000;
|
||||
tn.ImageKey = "Default";
|
||||
tn.SelectedImageKey = tn.ImageKey;
|
||||
// Merker
|
||||
tn = treeView1.Nodes.Add("Merker");
|
||||
tn.Nodes.Add("Loading...");
|
||||
tn.Tag = 0x90030000;
|
||||
tn.ImageKey = "Default";
|
||||
tn.SelectedImageKey = tn.ImageKey;
|
||||
// S7Timers
|
||||
tn = treeView1.Nodes.Add("S7Timers");
|
||||
tn.Nodes.Add("Loading...");
|
||||
tn.Tag = 0x90050000;
|
||||
tn.ImageKey = "Default";
|
||||
tn.SelectedImageKey = tn.ImageKey;
|
||||
// S7Counters
|
||||
tn = treeView1.Nodes.Add("S7Counters");
|
||||
tn.Nodes.Add("Loading...");
|
||||
tn.Tag = 0x90060000;
|
||||
tn.ImageKey = "Default";
|
||||
tn.SelectedImageKey = tn.ImageKey;
|
||||
|
||||
setStatus("connected");
|
||||
}
|
||||
|
||||
private void btnDisconnect_Click(object sender, EventArgs e)
|
||||
{
|
||||
setStatus("disconnecting...");
|
||||
|
||||
if (conn != null) conn.Disconnect();
|
||||
conn = null;
|
||||
treeView1.Nodes.Clear();
|
||||
txt_plcInfo.Text = "PLCType:";
|
||||
setStatus("disconnected");
|
||||
}
|
||||
|
||||
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
|
||||
{
|
||||
if (conn != null) conn.Disconnect();
|
||||
}
|
||||
|
||||
private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
|
||||
{
|
||||
if (e.Node.Nodes.Count < 0 || e.Node.Nodes[0].Text != "Loading...") return;
|
||||
|
||||
setStatus("loading...");
|
||||
e.Node.Nodes.Clear();
|
||||
uint relTiId = (uint)e.Node.Tag;
|
||||
PObject pObj = conn.getTypeInfoByRelId(relTiId);
|
||||
setStatus("connected");
|
||||
|
||||
if (pObj == null || pObj.VarnameList == null) return;
|
||||
TreeNode tn;
|
||||
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]);
|
||||
if (pObj.VartypeList.Elements[i].OffsetInfoType.Is1Dim())
|
||||
{
|
||||
var ioitarr = (IOffsetInfoType_1Dim)pObj.VartypeList.Elements[i].OffsetInfoType;
|
||||
uint arrayElementCount = ioitarr.GetArrayElementCount();
|
||||
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]);
|
||||
if (pObj.VartypeList.Elements[i].OffsetInfoType.HasRelation())
|
||||
{
|
||||
var ioit = (IOffsetInfoType_Relation)pObj.VartypeList.Elements[i].OffsetInfoType;
|
||||
tnarr.Nodes.Add("Loading...");
|
||||
tnarr.Tag = ioit.GetRelationId();
|
||||
SetImageKey(ref tnarr, pObj.VartypeList.Elements[i]);
|
||||
}
|
||||
}
|
||||
tn.Tag = (uint)0; // is array
|
||||
}
|
||||
else if (pObj.VartypeList.Elements[i].OffsetInfoType.IsMDim())
|
||||
{
|
||||
var ioitarrm = (IOffsetInfoType_MDim)pObj.VartypeList.Elements[i].OffsetInfoType;
|
||||
uint[] MdimArrayElementCount = ioitarrm.GetMdimArrayElementCount();
|
||||
int[] MdimArrayLowerBounds = ioitarrm.GetMdimArrayLowerBounds();
|
||||
int dimCount = MdimArrayElementCount.Aggregate(0, (acc, act) => acc += (act > 0) ? 1 : 0);
|
||||
int[] indexes = new int[dimCount];
|
||||
bool stop = false;
|
||||
while (!stop)
|
||||
{
|
||||
string arrIdxStr = "";
|
||||
for (int j = dimCount - 1; j >= 0; --j)
|
||||
{
|
||||
arrIdxStr += (arrIdxStr != "" ? "," : "") + (indexes[j] + MdimArrayLowerBounds[j]);
|
||||
}
|
||||
tnarr = tn.Nodes.Add(pObj.VarnameList.Names[i] + "[" + arrIdxStr + "]");
|
||||
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...");
|
||||
tnarr.Tag = ioit.GetRelationId();
|
||||
SetImageKey(ref tnarr, pObj.VartypeList.Elements[i]);
|
||||
}
|
||||
++indexes[0];
|
||||
for (int j = 0; j < dimCount; ++j)
|
||||
{
|
||||
if (indexes[j] >= MdimArrayElementCount[j])
|
||||
{
|
||||
if (j + 1 < dimCount)
|
||||
{
|
||||
indexes[j] = 0;
|
||||
++indexes[j + 1];
|
||||
}
|
||||
else
|
||||
{
|
||||
stop = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
tn.Tag = (uint)0; // is array
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pObj.VartypeList.Elements[i].OffsetInfoType.HasRelation())
|
||||
{
|
||||
var ioit = (IOffsetInfoType_Relation)pObj.VartypeList.Elements[i].OffsetInfoType;
|
||||
tn.Nodes.Add("Loading...");
|
||||
tn.Tag = ioit.GetRelationId();
|
||||
SetImageKey(ref tn, pObj.VartypeList.Elements[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void SetImageKey(ref TreeNode tn, PVartypeListElement vte)
|
||||
{
|
||||
string sk = "Tag";
|
||||
switch (vte.Softdatatype)
|
||||
{
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_BOOL:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_BBOOL:
|
||||
sk = "Boolean";
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_INT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_DINT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_ULINT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_LINT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_USINT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_UINT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_UDINT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_SINT:
|
||||
// Derived types
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_BLOCKFB:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_BLOCKFC:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBANY:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBDELAY:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBTOD:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBCYCLIC:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBATT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_PORT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_RTM:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_PIP:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBPCYCLE:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBHWINT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBDIAG:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBTIMEERROR:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBSTARTUP:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_DBANY:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_DBWWW:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_DBDYN:
|
||||
sk = "Integer2";
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_BYTE:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_WORD:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_DWORD:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_LWORD:
|
||||
// Derived types
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_AOMIDENT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_EVENTANY:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_EVENTATT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_AOMLINK:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWANY:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWIOSYSTEM:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWDPMASTER:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWDEVICE:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWDPSLAVE:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWIO:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWMODULE:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWSUBMODULE:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWHSC:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWPWM:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWPTO:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWINTERFACE:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWIEPORT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_CONNANY:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_CONNPRG:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_CONNOUC:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_CONNRID:
|
||||
sk = "Binary2";
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_REAL:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_LREAL:
|
||||
sk = "Number2";
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_CHAR:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_WCHAR:
|
||||
sk = "Char";
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_STRING:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_WSTRING:
|
||||
sk = "Text";
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_DATE:
|
||||
sk = "Date";
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_TIMEOFDAY:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_LTOD:
|
||||
sk = "Time";
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_TIME:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_LTIME:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_S5TIME:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_TIMER:
|
||||
sk = "Timer"; // Duration
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_DATEANDTIME:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_LDT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_DTL:
|
||||
sk = "DateTime";
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_ANY:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_POINTER:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_REMOTE:
|
||||
sk = "Any";
|
||||
break;
|
||||
}
|
||||
if (vte.OffsetInfoType.HasRelation())
|
||||
{
|
||||
sk = "Structure";
|
||||
}
|
||||
tn.ImageKey = sk;
|
||||
tn.SelectedImageKey = tn.ImageKey;
|
||||
}
|
||||
|
||||
private string escapeTiaString(string str, bool isRootNode, bool isArray)
|
||||
{
|
||||
if (isRootNode) return '"' + str + '"';
|
||||
Regex re = new Regex("(^[0-9]|[^0-9A-Za-z_])");
|
||||
if (isArray)
|
||||
{
|
||||
Regex reArr = new Regex("^([^\"]*)(\\[[0-9, ]+\\])$");
|
||||
Match m = reArr.Match(str);
|
||||
if (!m.Success) 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;
|
||||
}
|
||||
|
||||
private void readTagBySymbol()
|
||||
{
|
||||
tbValue.Text = "";
|
||||
tbSymbolicAddress.Text = "";
|
||||
|
||||
setStatus("loading...");
|
||||
PlcTag tag = conn.getPlcTagBySymbol(tbSymbol.Text);
|
||||
setStatus("connected");
|
||||
if (tag == null) return;
|
||||
|
||||
tbSymbolicAddress.Text = tag.Address.GetAccessString();
|
||||
|
||||
PlcTags tags = new PlcTags();
|
||||
tags.AddTag(tag);
|
||||
if (tags.ReadTags(conn) != 0) return;
|
||||
tbValue.Text = tag.ToString();
|
||||
}
|
||||
|
||||
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
|
||||
{
|
||||
if (e.Node.Tag != null) return; // has relId
|
||||
|
||||
string name = "";
|
||||
TreeNode tn = e.Node;
|
||||
while (tn != null)
|
||||
{
|
||||
bool isArray = false;
|
||||
string nodeText = tn.Text;
|
||||
tn = tn.Parent;
|
||||
if (tn != null && tn.Tag != null)
|
||||
{ // is array
|
||||
if ((uint)tn.Tag == 0)
|
||||
{
|
||||
isArray = true;
|
||||
tn = tn.Parent; // skip array parent
|
||||
}
|
||||
}
|
||||
if (tn != null && tn.Tag != null)
|
||||
{ // don't add in/out/merker area as tag
|
||||
uint relId = (uint)tn.Tag;
|
||||
if (relId == 0x90010000 || relId == 0x90020000 || relId == 0x90030000) tn = null;
|
||||
}
|
||||
name = escapeTiaString(nodeText, tn == null, isArray) + (name != "" ? "." : "") + name;
|
||||
}
|
||||
tbSymbol.Text = name;
|
||||
|
||||
readTagBySymbol();
|
||||
}
|
||||
|
||||
private void btnRead_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (tbSymbol.Text == "") return;
|
||||
|
||||
try
|
||||
{
|
||||
readTagBySymbol();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("ERROR: " + ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace S7CommPlusGUIBrowser
|
||||
{
|
||||
public partial class Form1 : Form
|
||||
{
|
||||
|
||||
private S7CommPlusConnection conn = null;
|
||||
private bool onlySecurePGOrPCAndHMI = false;
|
||||
|
||||
public Form1()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
string[] args = Environment.GetCommandLineArgs();
|
||||
// 1st argument can be the plc ip-address, otherwise use default
|
||||
if (args.Length >= 2)
|
||||
{
|
||||
tbIpAddress.Text = args[1];
|
||||
}
|
||||
// 2nd argument can be the plc password, otherwise use default (no password)
|
||||
if (args.Length >= 3)
|
||||
{
|
||||
tbPassword.Text = args[2];
|
||||
}
|
||||
}
|
||||
|
||||
private void setStatus(string status)
|
||||
{
|
||||
lbStatus.Text = $"Status:{status}|";
|
||||
}
|
||||
|
||||
private void btnConnect_Click(object sender, EventArgs e)
|
||||
{
|
||||
setStatus("connecting...");
|
||||
|
||||
if (conn != null) conn.Disconnect();
|
||||
conn = new S7CommPlusConnection();
|
||||
conn.OnlySecurePGOrPCAndHMI = onlySecurePGOrPCAndHMI;
|
||||
int res = conn.Connect(tbIpAddress.Text, tbPassword.Text);
|
||||
if (res != 0)
|
||||
{
|
||||
setStatus("error");
|
||||
return;
|
||||
}
|
||||
setStatus("connected");
|
||||
txt_plcInfo.Text = $"PLCType: {conn.PLCInformation.PLCType}|MLFB: {conn.PLCInformation.MLFB}|Firmware: {conn.PLCInformation.Firmware}";
|
||||
treeView1.Nodes.Clear();
|
||||
setStatus("loading...");
|
||||
List<S7CommPlusConnection.DatablockInfo> dbInfoList;
|
||||
res = conn.GetListOfDatablocks(out dbInfoList);
|
||||
if (res != 0)
|
||||
{
|
||||
setStatus("error");
|
||||
return;
|
||||
}
|
||||
TreeNode tn;
|
||||
foreach (S7CommPlusConnection.DatablockInfo dbInfo in dbInfoList)
|
||||
{
|
||||
tn = treeView1.Nodes.Add(dbInfo.db_name);
|
||||
tn.Nodes.Add("Loading...");
|
||||
tn.Tag = dbInfo.db_block_ti_relid;
|
||||
tn.ImageKey = "Datablock";
|
||||
tn.SelectedImageKey = tn.ImageKey;
|
||||
}
|
||||
// Inputs
|
||||
tn = treeView1.Nodes.Add("Inputs");
|
||||
tn.Nodes.Add("Loading...");
|
||||
tn.Tag = 0x90010000;
|
||||
tn.ImageKey = "Default";
|
||||
tn.SelectedImageKey = tn.ImageKey;
|
||||
// Outputs
|
||||
tn = treeView1.Nodes.Add("Outputs");
|
||||
tn.Nodes.Add("Loading...");
|
||||
tn.Tag = 0x90020000;
|
||||
tn.ImageKey = "Default";
|
||||
tn.SelectedImageKey = tn.ImageKey;
|
||||
// Merker
|
||||
tn = treeView1.Nodes.Add("Merker");
|
||||
tn.Nodes.Add("Loading...");
|
||||
tn.Tag = 0x90030000;
|
||||
tn.ImageKey = "Default";
|
||||
tn.SelectedImageKey = tn.ImageKey;
|
||||
// S7Timers
|
||||
tn = treeView1.Nodes.Add("S7Timers");
|
||||
tn.Nodes.Add("Loading...");
|
||||
tn.Tag = 0x90050000;
|
||||
tn.ImageKey = "Default";
|
||||
tn.SelectedImageKey = tn.ImageKey;
|
||||
// S7Counters
|
||||
tn = treeView1.Nodes.Add("S7Counters");
|
||||
tn.Nodes.Add("Loading...");
|
||||
tn.Tag = 0x90060000;
|
||||
tn.ImageKey = "Default";
|
||||
tn.SelectedImageKey = tn.ImageKey;
|
||||
|
||||
setStatus("connected");
|
||||
}
|
||||
|
||||
private void btnDisconnect_Click(object sender, EventArgs e)
|
||||
{
|
||||
setStatus("disconnecting...");
|
||||
|
||||
if (conn != null) conn.Disconnect();
|
||||
conn = null;
|
||||
treeView1.Nodes.Clear();
|
||||
txt_plcInfo.Text = "PLCType:";
|
||||
setStatus("disconnected");
|
||||
}
|
||||
|
||||
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
|
||||
{
|
||||
if (conn != null) conn.Disconnect();
|
||||
}
|
||||
|
||||
private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
|
||||
{
|
||||
if (e.Node.Nodes.Count < 0 || e.Node.Nodes[0].Text != "Loading...") return;
|
||||
|
||||
setStatus("loading...");
|
||||
e.Node.Nodes.Clear();
|
||||
uint relTiId = (uint)e.Node.Tag;
|
||||
PObject pObj = conn.getTypeInfoByRelId(relTiId);
|
||||
setStatus("connected");
|
||||
|
||||
if (pObj == null || pObj.VarnameList == null) return;
|
||||
TreeNode tn;
|
||||
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]);
|
||||
if (pObj.VartypeList.Elements[i].OffsetInfoType.Is1Dim())
|
||||
{
|
||||
var ioitarr = (IOffsetInfoType_1Dim)pObj.VartypeList.Elements[i].OffsetInfoType;
|
||||
uint arrayElementCount = ioitarr.GetArrayElementCount();
|
||||
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]);
|
||||
if (pObj.VartypeList.Elements[i].OffsetInfoType.HasRelation())
|
||||
{
|
||||
var ioit = (IOffsetInfoType_Relation)pObj.VartypeList.Elements[i].OffsetInfoType;
|
||||
tnarr.Nodes.Add("Loading...");
|
||||
tnarr.Tag = ioit.GetRelationId();
|
||||
SetImageKey(ref tnarr, pObj.VartypeList.Elements[i]);
|
||||
}
|
||||
}
|
||||
tn.Tag = (uint)0; // is array
|
||||
}
|
||||
else if (pObj.VartypeList.Elements[i].OffsetInfoType.IsMDim())
|
||||
{
|
||||
var ioitarrm = (IOffsetInfoType_MDim)pObj.VartypeList.Elements[i].OffsetInfoType;
|
||||
uint[] MdimArrayElementCount = ioitarrm.GetMdimArrayElementCount();
|
||||
int[] MdimArrayLowerBounds = ioitarrm.GetMdimArrayLowerBounds();
|
||||
int dimCount = MdimArrayElementCount.Aggregate(0, (acc, act) => acc += (act > 0) ? 1 : 0);
|
||||
int[] indexes = new int[dimCount];
|
||||
bool stop = false;
|
||||
while (!stop)
|
||||
{
|
||||
string arrIdxStr = "";
|
||||
for (int j = dimCount - 1; j >= 0; --j)
|
||||
{
|
||||
arrIdxStr += (arrIdxStr != "" ? "," : "") + (indexes[j] + MdimArrayLowerBounds[j]);
|
||||
}
|
||||
tnarr = tn.Nodes.Add(pObj.VarnameList.Names[i] + "[" + arrIdxStr + "]");
|
||||
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...");
|
||||
tnarr.Tag = ioit.GetRelationId();
|
||||
SetImageKey(ref tnarr, pObj.VartypeList.Elements[i]);
|
||||
}
|
||||
++indexes[0];
|
||||
for (int j = 0; j < dimCount; ++j)
|
||||
{
|
||||
if (indexes[j] >= MdimArrayElementCount[j])
|
||||
{
|
||||
if (j + 1 < dimCount)
|
||||
{
|
||||
indexes[j] = 0;
|
||||
++indexes[j + 1];
|
||||
}
|
||||
else
|
||||
{
|
||||
stop = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
tn.Tag = (uint)0; // is array
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pObj.VartypeList.Elements[i].OffsetInfoType.HasRelation())
|
||||
{
|
||||
var ioit = (IOffsetInfoType_Relation)pObj.VartypeList.Elements[i].OffsetInfoType;
|
||||
tn.Nodes.Add("Loading...");
|
||||
tn.Tag = ioit.GetRelationId();
|
||||
SetImageKey(ref tn, pObj.VartypeList.Elements[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void SetImageKey(ref TreeNode tn, PVartypeListElement vte)
|
||||
{
|
||||
string sk = "Tag";
|
||||
switch (vte.Softdatatype)
|
||||
{
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_BOOL:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_BBOOL:
|
||||
sk = "Boolean";
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_INT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_DINT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_ULINT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_LINT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_USINT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_UINT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_UDINT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_SINT:
|
||||
// Derived types
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_BLOCKFB:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_BLOCKFC:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBANY:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBDELAY:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBTOD:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBCYCLIC:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBATT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_PORT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_RTM:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_PIP:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBPCYCLE:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBHWINT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBDIAG:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBTIMEERROR:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_OBSTARTUP:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_DBANY:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_DBWWW:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_DBDYN:
|
||||
sk = "Integer2";
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_BYTE:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_WORD:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_DWORD:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_LWORD:
|
||||
// Derived types
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_AOMIDENT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_EVENTANY:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_EVENTATT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_AOMLINK:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWANY:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWIOSYSTEM:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWDPMASTER:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWDEVICE:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWDPSLAVE:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWIO:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWMODULE:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWSUBMODULE:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWHSC:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWPWM:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWPTO:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWINTERFACE:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_HWIEPORT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_CONNANY:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_CONNPRG:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_CONNOUC:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_CONNRID:
|
||||
sk = "Binary2";
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_REAL:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_LREAL:
|
||||
sk = "Number2";
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_CHAR:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_WCHAR:
|
||||
sk = "Char";
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_STRING:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_WSTRING:
|
||||
sk = "Text";
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_DATE:
|
||||
sk = "Date";
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_TIMEOFDAY:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_LTOD:
|
||||
sk = "Time";
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_TIME:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_LTIME:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_S5TIME:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_TIMER:
|
||||
sk = "Timer"; // Duration
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_DATEANDTIME:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_LDT:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_DTL:
|
||||
sk = "DateTime";
|
||||
break;
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_ANY:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_POINTER:
|
||||
case Softdatatype.S7COMMP_SOFTDATATYPE_REMOTE:
|
||||
sk = "Any";
|
||||
break;
|
||||
}
|
||||
if (vte.OffsetInfoType.HasRelation())
|
||||
{
|
||||
sk = "Structure";
|
||||
}
|
||||
tn.ImageKey = sk;
|
||||
tn.SelectedImageKey = tn.ImageKey;
|
||||
}
|
||||
|
||||
private string escapeTiaString(string str, bool isRootNode, bool isArray)
|
||||
{
|
||||
if (isRootNode) return '"' + str + '"';
|
||||
Regex re = new Regex("(^[0-9]|[^0-9A-Za-z_])");
|
||||
if (isArray)
|
||||
{
|
||||
Regex reArr = new Regex("^([^\"]*)(\\[[0-9, ]+\\])$");
|
||||
Match m = reArr.Match(str);
|
||||
if (!m.Success) 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;
|
||||
}
|
||||
|
||||
private void readTagBySymbol()
|
||||
{
|
||||
tbValue.Text = "";
|
||||
tbSymbolicAddress.Text = "";
|
||||
|
||||
setStatus("loading...");
|
||||
PlcTag tag = conn.getPlcTagBySymbol(tbSymbol.Text);
|
||||
setStatus("connected");
|
||||
if (tag == null) return;
|
||||
|
||||
tbSymbolicAddress.Text = tag.Address.GetAccessString();
|
||||
|
||||
PlcTags tags = new PlcTags();
|
||||
tags.AddTag(tag);
|
||||
if (tags.ReadTags(conn) != 0) return;
|
||||
tbValue.Text = tag.ToString();
|
||||
}
|
||||
|
||||
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
|
||||
{
|
||||
if (e.Node.Tag != null) return; // has relId
|
||||
|
||||
string name = "";
|
||||
TreeNode tn = e.Node;
|
||||
while (tn != null)
|
||||
{
|
||||
bool isArray = false;
|
||||
string nodeText = tn.Text;
|
||||
tn = tn.Parent;
|
||||
if (tn != null && tn.Tag != null)
|
||||
{ // is array
|
||||
if ((uint)tn.Tag == 0)
|
||||
{
|
||||
isArray = true;
|
||||
tn = tn.Parent; // skip array parent
|
||||
}
|
||||
}
|
||||
if (tn != null && tn.Tag != null)
|
||||
{ // don't add in/out/merker area as tag
|
||||
uint relId = (uint)tn.Tag;
|
||||
if (relId == 0x90010000 || relId == 0x90020000 || relId == 0x90030000) tn = null;
|
||||
}
|
||||
name = escapeTiaString(nodeText, tn == null, isArray) + (name != "" ? "." : "") + name;
|
||||
}
|
||||
tbSymbol.Text = name;
|
||||
|
||||
readTagBySymbol();
|
||||
}
|
||||
|
||||
private void btnRead_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (tbSymbol.Text == "") return;
|
||||
|
||||
try
|
||||
{
|
||||
readTagBySymbol();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show("ERROR: " + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkBox1_CheckedChanged(object sender, EventArgs e)
|
||||
{
|
||||
onlySecurePGOrPCAndHMI = checkBox1.Checked;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC4
|
||||
KgAAAk1TRnQBSQFMAgEBJAEAAagBAAGoAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||
KgAAAk1TRnQBSQFMAgEBJAEAAbgBAAG4AQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||
AwABQAMAAaADAAEBAQABCAYAASgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
|
||||
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
|
||||
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
|
||||
|
||||
BIN
S7CommPlusGUIBrowser/bin/Debug/License.Lib.dll
Normal file
BIN
S7CommPlusGUIBrowser/bin/Debug/License.Lib.dll
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
S7CommPlusGUIBrowser/bin/Debug/libcrypto-3-x64.dll
Normal file
BIN
S7CommPlusGUIBrowser/bin/Debug/libcrypto-3-x64.dll
Normal file
Binary file not shown.
BIN
S7CommPlusGUIBrowser/bin/Debug/libssl-3-x64.dll
Normal file
BIN
S7CommPlusGUIBrowser/bin/Debug/libssl-3-x64.dll
Normal file
Binary file not shown.
18
S7CommPlusGUIBrowser/bin/Debug/license.lic
Normal file
18
S7CommPlusGUIBrowser/bin/Debug/license.lic
Normal 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>
|
||||
Binary file not shown.
@@ -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.exe
|
||||
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
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user