Skip to content

Commit c7980ee

Browse files
committed
支持读取String类型的地址数据:DB1015.STRING0.60
1 parent 61448f9 commit c7980ee

File tree

4 files changed

+52
-29
lines changed

4 files changed

+52
-29
lines changed

NewLife.Siemens/Drivers/SiemensS7Driver.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.ComponentModel;
2+
using System.Text;
23
using NewLife.IoT;
34
using NewLife.IoT.Drivers;
45
using NewLife.IoT.ThingModels;
@@ -148,10 +149,20 @@ public override void Close(INode node)
148149
// 借助物模型转换数据类型
149150
if (point.GetNetType() != null)
150151
{
151-
if (spec != null)
152-
dic[name] = spec.DecodeByThingModel(data, point);
152+
//类型string的时候直接返回ToHex
153+
if (point.GetNetType() == typeof(string))
154+
{
155+
//默认去除返回的3C1E开始的通讯分隔符
156+
dic[name] = data.ToStr(Encoding.UTF8, 2);
157+
}
153158
else
154-
dic[name] = point.Convert(data.Swap(true, true));
159+
{
160+
if (spec != null)
161+
dic[name] = spec.DecodeByThingModel(data, point);
162+
else
163+
dic[name] = point.Convert(data.Swap(true, true));
164+
165+
}
155166
}
156167
else
157168
dic[name] = data;

NewLife.Siemens/NewLife.Siemens.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@
5858
</ItemGroup>
5959

6060
<ItemGroup>
61-
<PackageReference Include="NewLife.Core" Version="10.10.2024.902" />
62-
<PackageReference Include="NewLife.IoT" Version="2.2.2024.706" />
61+
<PackageReference Include="NewLife.Core" Version="11.4.2025.201" />
62+
<PackageReference Include="NewLife.IoT" Version="2.4.2025.203" />
6363
</ItemGroup>
6464

6565
<ItemGroup>

NewLife.Siemens/Protocols/PLCAddress.cs

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -51,32 +51,43 @@ public static void Parse(String input, out DataType dataType, out Int32 dbNumber
5151
var strings = input.Split(['.']);
5252
if (strings.Length < 2)
5353
throw new InvalidDataException("To few periods for DB address");
54+
//数据块字节
55+
if (strings.Length == 2)
56+
{
57+
dataType = DataType.DataBlock;
58+
dbNumber = Int32.Parse(strings[0][2..]);
59+
address = Int32.Parse(strings[1][3..]);
5460

55-
dataType = DataType.DataBlock;
56-
dbNumber = Int32.Parse(strings[0][2..]);
57-
address = Int32.Parse(strings[1][3..]);
58-
59-
var dbType = strings[1][..3];
60-
switch (dbType)
61+
var dbType = strings[1][..3];
62+
switch (dbType)
63+
{
64+
case "DBB":
65+
varType = VarType.Byte;
66+
return;
67+
case "DBW":
68+
varType = VarType.Word;
69+
return;
70+
case "DBD":
71+
varType = VarType.DWord;
72+
return;
73+
case "DBX":
74+
bitNumber = Int32.Parse(strings[2]);
75+
if (bitNumber > 7)
76+
throw new InvalidDataException("Bit can only be 0-7");
77+
varType = VarType.Bit;
78+
return;
79+
default:
80+
throw new InvalidDataException();
81+
}
82+
}
83+
else //字符串处理
6184
{
62-
case "DBB":
63-
varType = VarType.Byte;
64-
return;
65-
case "DBW":
66-
varType = VarType.Word;
67-
return;
68-
case "DBD":
69-
varType = VarType.DWord;
70-
return;
71-
case "DBX":
72-
bitNumber = Int32.Parse(strings[2]);
73-
if (bitNumber > 7)
74-
throw new InvalidDataException("Bit can only be 0-7");
75-
varType = VarType.Bit;
76-
return;
77-
default:
78-
throw new InvalidDataException();
85+
dataType = DataType.DataBlock;
86+
dbNumber = Int32.Parse(strings[0][2..]);
87+
address = Int32.Parse(strings[1][6..]);
88+
varType = VarType.String;
7989
}
90+
break;
8091
case "IB":
8192
case "EB":
8293
// Input byte

TestClient/FrmMain.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using NewLife.IoT.ThingModels;
1+
using NewLife;
2+
using NewLife.IoT.ThingModels;
23
using NewLife.Log;
34
using NewLife.Serialization;
45
using NewLife.Siemens.Drivers;

0 commit comments

Comments
 (0)