Opc Da Write Fix
This commit is contained in:
@@ -12,9 +12,13 @@ namespace Modbus.Net.OPC
|
||||
|
||||
protected Func<BaseMachine, AddressUnit, string[]> TagGeter { get; set; }
|
||||
|
||||
public AddressFormaterOpc(Func<BaseMachine, AddressUnit, string[]> tagGeter)
|
||||
protected char Seperator { get; set; }
|
||||
|
||||
public AddressFormaterOpc(Func<BaseMachine, AddressUnit, string[]> tagGeter, BaseMachine machine, char seperator = '/')
|
||||
{
|
||||
Machine = machine;
|
||||
TagGeter = tagGeter;
|
||||
Seperator = seperator;
|
||||
}
|
||||
|
||||
public override string FormatAddress(string area, int address)
|
||||
@@ -25,7 +29,7 @@ namespace Modbus.Net.OPC
|
||||
var ans = "";
|
||||
for (int i = 0; i < strings.Length; i++)
|
||||
{
|
||||
ans += strings[i].Trim().Replace(" ", "") + ".";
|
||||
ans += strings[i].Trim().Replace(" ", "") + Seperator;
|
||||
}
|
||||
ans = ans.Substring(0, ans.Length - 1);
|
||||
return ans;
|
||||
|
||||
21
Modbus.Net/Modbus.Net.OPC/AddressTranslatorOpc.cs
Normal file
21
Modbus.Net/Modbus.Net.OPC/AddressTranslatorOpc.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Modbus.Net.OPC
|
||||
{
|
||||
public class AddressTranslatorOpc : AddressTranslator
|
||||
{
|
||||
public override AddressDef AddressTranslate(string address, bool isRead)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public override double GetAreaByteLength(string area)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -19,13 +19,12 @@ namespace Modbus.Net.OPC.FBox
|
||||
LinkerName = linkerName;
|
||||
AddressFormater =
|
||||
new AddressFormaterOpc(
|
||||
((machine, unit) =>
|
||||
(machine, unit) =>
|
||||
new string[]
|
||||
{
|
||||
"他人分享", ((FBoxOpcDaMachine) machine).LinkerName, ((FBoxOpcDaMachine) machine).LocalSequence,
|
||||
unit.Name
|
||||
}));
|
||||
((AddressFormaterOpc)AddressFormater).Machine = this;
|
||||
}, this, '.');
|
||||
}
|
||||
|
||||
public FBoxOpcDaMachine(string localSequence, string linkerName,
|
||||
|
||||
@@ -70,6 +70,7 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AddressFormaterOpc.cs" />
|
||||
<Compile Include="AddressTranslatorOpc.cs" />
|
||||
<Compile Include="DaClientExtend.cs" />
|
||||
<Compile Include="FBox\FBoxOpcDaManchine.cs" />
|
||||
<Compile Include="OpcDaConnector.cs" />
|
||||
|
||||
@@ -131,7 +131,7 @@ namespace Modbus.Net.OPC
|
||||
if (message[i] == 0x00 && message[i + 1] == 0xff && message[i + 2] == 0xff &&
|
||||
message[i + 3] == 0x00)
|
||||
{
|
||||
index = i;
|
||||
index2 = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace Modbus.Net.OPC
|
||||
public OpcDaUtility(string connectionString) : base(0,0)
|
||||
{
|
||||
ConnectionString = connectionString;
|
||||
AddressTranslator = null;
|
||||
AddressTranslator = new AddressTranslatorOpc();
|
||||
Wrapper = new OpcDaProtocal(ConnectionString);
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ namespace Modbus.Net.OPC
|
||||
Wrapper.SendReceiveAsync(Wrapper[typeof(WriteRequestOpcProtocal)], writeRequestOpcInputStruct) as WriteRequestOpcOutputStruct;
|
||||
return writeRequestOpcOutputStruct?.WriteResult == true;
|
||||
}
|
||||
catch (Exception)
|
||||
catch (Exception e)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -70,13 +70,14 @@ namespace Modbus.Net.OPC
|
||||
|
||||
}
|
||||
|
||||
public class WriteRequestOpcProtocal : ProtocalUnit
|
||||
public class WriteRequestOpcProtocal : SpecialProtocalUnit
|
||||
{
|
||||
public override byte[] Format(InputStruct message)
|
||||
{
|
||||
var r_message = (WriteRequestOpcInputStruct)message;
|
||||
byte[] tag = Encoding.UTF8.GetBytes(r_message.Tag);
|
||||
return Format((byte)0x00, tag, (int)0x00ffff00, r_message.SetValue.GetType().FullName, (int)0x00ffff00, r_message.SetValue);
|
||||
byte[] fullName = Encoding.UTF8.GetBytes(r_message.SetValue.GetType().FullName);
|
||||
return Format((byte)0x01, tag, (int)0x00ffff00, fullName, (int)0x00ffff00, r_message.SetValue);
|
||||
}
|
||||
|
||||
public override OutputStruct Unformat(byte[] messageBytes, ref int pos)
|
||||
|
||||
@@ -423,10 +423,20 @@ namespace Modbus.Net
|
||||
}
|
||||
}
|
||||
//写入数据
|
||||
await
|
||||
BaseUtility.SetDatasAsync(addressStart,
|
||||
valueHelper.ByteArrayToObjectArray(datas,
|
||||
new KeyValuePair<Type, int>(typeof (byte), datas.Length)));
|
||||
if (AddressCombiner is AddressCombinerSingle)
|
||||
{
|
||||
await
|
||||
BaseUtility.SetDatasAsync(addressStart,
|
||||
valueHelper.ByteArrayToObjectArray(datas,
|
||||
new KeyValuePair<Type, int>(communicateAddress.DataType, 1)));
|
||||
}
|
||||
else
|
||||
{
|
||||
await
|
||||
BaseUtility.SetDatasAsync(addressStart,
|
||||
valueHelper.ByteArrayToObjectArray(datas,
|
||||
new KeyValuePair<Type, int>(typeof (byte), datas.Length)));
|
||||
}
|
||||
}
|
||||
//如果不保持连接,断开连接
|
||||
if (!KeepConnect)
|
||||
|
||||
Reference in New Issue
Block a user