From 30895c2d1e055aa1a0ed1527cd20a8c0cbfe8cc7 Mon Sep 17 00:00:00 2001 From: "parallelbgls@outlook.com" Date: Sat, 11 Oct 2014 14:57:10 +0800 Subject: [PATCH] 2014-10-11 update 1 --- .../Controllers/CrossLampController.cs | 2 +- Modbus.Net/ModBus.Net/AddressTranslator.cs | 82 ++++++++++++------ Modbus.Net/ModBus.Net/BaseUtility.cs | 12 +-- Modbus.Net/ModBus.Net/ModbusProtocal.cs | 22 +++-- Modbus.Net/ModBus.Net/ModbusUtility.cs | 41 +++++++-- Modbus.Net/NA200H.UI.Console/Program.cs | 8 +- .../NA200H.UI.WPF/3Add_NAPro5.0/3Add.prj | Bin 0 -> 78144 bytes .../NA200H.UI.WPF/3Add_NAPro5.0/MAIN.ld | Bin 0 -> 619 bytes .../NA200H.UI.WPF/3Add_NAPro5.0/MAIN.ldo | Bin 0 -> 204 bytes .../NA200H.UI.WPF/3Add_NAPro5.0/MAIN.nal | Bin 0 -> 40960 bytes Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/MAIN.o | Bin 0 -> 9051 bytes .../NA200H.UI.WPF/3Add_NAPro5.0/MAIN.tag | Bin 0 -> 71 bytes .../NA200H.UI.WPF/3Add_NAPro5.0/myvar.o | Bin 0 -> 6066 bytes Modbus.Net/NA200H.UI.WPF/MainWindow.xaml.cs | 10 ++- 14 files changed, 126 insertions(+), 51 deletions(-) create mode 100644 Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/3Add.prj create mode 100644 Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/MAIN.ld create mode 100644 Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/MAIN.ldo create mode 100644 Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/MAIN.nal create mode 100644 Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/MAIN.o create mode 100644 Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/MAIN.tag create mode 100644 Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/myvar.o diff --git a/Modbus.Net/CrossLampControl.WebApi/Controllers/CrossLampController.cs b/Modbus.Net/CrossLampControl.WebApi/Controllers/CrossLampController.cs index 07d5a21..13ace08 100644 --- a/Modbus.Net/CrossLampControl.WebApi/Controllers/CrossLampController.cs +++ b/Modbus.Net/CrossLampControl.WebApi/Controllers/CrossLampController.cs @@ -17,7 +17,7 @@ namespace CrossLampControl.WebApi.Controllers public Lamp GetLamp() { Lamp light = new Lamp(); - byte[] lampsbyte = _utility.GetDatas(2, (byte)ModbusProtocalReadDataFunctionCode.ReadCoilStatus, "0", 6); + byte[] lampsbyte = _utility.GetDatas(2, ((byte)ModbusProtocalReadDataFunctionCode.ReadCoilStatus).ToString()+":0", 6); bool[] lamps = ValueHelper.Instance.ObjectArrayToDestinationArray( ValueHelper.Instance.ByteArrayToObjectArray(lampsbyte, diff --git a/Modbus.Net/ModBus.Net/AddressTranslator.cs b/Modbus.Net/ModBus.Net/AddressTranslator.cs index b564681..4647957 100644 --- a/Modbus.Net/ModBus.Net/AddressTranslator.cs +++ b/Modbus.Net/ModBus.Net/AddressTranslator.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Dynamic; namespace ModBus.Net @@ -32,7 +33,7 @@ namespace ModBus.Net Instance = instance; } - public abstract ushort AddressTranslate(string address); + public abstract KeyValuePair AddressTranslate(string address, bool isRead); } /// @@ -40,27 +41,50 @@ namespace ModBus.Net /// public class AddressTranslatorNA200H : AddressTranslator { - public Dictionary TransDictionary; - + protected Dictionary TransDictionary; + protected Dictionary ReadFunctionCodeDictionary; + protected Dictionary WriteFunctionCodeDictionary; + public AddressTranslatorNA200H() { - TransDictionary = new Dictionary(); - TransDictionary.Add("Q", 0); - TransDictionary.Add("M", 10000); - TransDictionary.Add("N", 20000); - TransDictionary.Add("I", 0); - TransDictionary.Add("S", 10000); - TransDictionary.Add("IW", 0); - TransDictionary.Add("SW", 5000); - TransDictionary.Add("E", 10000); - TransDictionary.Add("MW", 0); - TransDictionary.Add("NW", 10000); - TransDictionary.Add("QW", 20000); - TransDictionary.Add("CLOCK", 30000); - TransDictionary.Add("V", 0); + TransDictionary = new Dictionary + { + {"Q", 0}, + {"M", 10000}, + {"N", 20000}, + {"I", 0}, + {"S", 10000}, + {"IW", 0}, + {"SW", 5000}, + {"MW", 0}, + {"NW", 10000}, + {"QW", 20000}, + }; + ReadFunctionCodeDictionary = new Dictionary + { + {"Q", (int)ModbusProtocalReadDataFunctionCode.ReadCoilStatus}, + {"M", (int)ModbusProtocalReadDataFunctionCode.ReadCoilStatus}, + {"N", (int)ModbusProtocalReadDataFunctionCode.ReadCoilStatus}, + {"I", (int)ModbusProtocalReadDataFunctionCode.ReadInputStatus}, + {"S", (int)ModbusProtocalReadDataFunctionCode.ReadInputStatus}, + {"IW", (int)ModbusProtocalReadDataFunctionCode.ReadInputRegister}, + {"SW", (int)ModbusProtocalReadDataFunctionCode.ReadInputRegister}, + {"MW", (int)ModbusProtocalReadDataFunctionCode.ReadHoldRegister}, + {"NW", (int)ModbusProtocalReadDataFunctionCode.ReadHoldRegister}, + {"QW", (int)ModbusProtocalReadDataFunctionCode.ReadHoldRegister}, + }; + WriteFunctionCodeDictionary = new Dictionary + { + {"Q", (int)ModbusProtocalWriteDataFunctionCode.WriteMultiCoil}, + {"M", (int)ModbusProtocalWriteDataFunctionCode.WriteMultiCoil}, + {"N", (int)ModbusProtocalWriteDataFunctionCode.WriteMultiCoil}, + {"MW", (int)ModbusProtocalWriteDataFunctionCode.WriteMultiRegister}, + {"NW", (int)ModbusProtocalWriteDataFunctionCode.WriteMultiRegister}, + {"QW", (int)ModbusProtocalWriteDataFunctionCode.WriteMultiRegister}, + }; } - public override ushort AddressTranslate(string address) + public override KeyValuePair AddressTranslate(string address, bool isRead) { address = address.ToUpper(); int i = 0; @@ -69,10 +93,14 @@ namespace ModBus.Net { i++; } - if (i == 0) return ushort.Parse(address); + if (i == 0 || i >= address.Length) throw new FormatException(); string head = address.Substring(0, i); string tail = address.Substring(i); - return (ushort) (TransDictionary[head] + ushort.Parse(tail) - 1); + return isRead + ? new KeyValuePair(TransDictionary[head] + int.Parse(tail) - 1, + ReadFunctionCodeDictionary[head]) + : new KeyValuePair(TransDictionary[head] + int.Parse(tail) - 1, + WriteFunctionCodeDictionary[head]); } } @@ -81,14 +109,16 @@ namespace ModBus.Net /// public class AddressTranslatorBase : AddressTranslator { - public override ushort AddressTranslate(string address) + public override KeyValuePair AddressTranslate(string address, bool isRead) { - ushort num; - if (ushort.TryParse(address, out num)) + int num1,num2; + string[] split = address.Split(':'); + if (split.Length != 2) throw new FormatException(); + if (int.TryParse(split[0], out num1) && int.TryParse(split[1], out num2)) { - return num; + return new KeyValuePair(num2, num1); } - return 0; + throw new FormatException(); } } } \ No newline at end of file diff --git a/Modbus.Net/ModBus.Net/BaseUtility.cs b/Modbus.Net/ModBus.Net/BaseUtility.cs index cbb2708..41ed7b9 100644 --- a/Modbus.Net/ModBus.Net/BaseUtility.cs +++ b/Modbus.Net/ModBus.Net/BaseUtility.cs @@ -26,19 +26,21 @@ namespace ModBus.Net /// 获取数据 /// /// 从站地址 - /// 功能码 /// 开始地址 /// 接收个数 /// 接收到的byte数据 - public abstract byte[] GetDatas(byte belongAddress, byte functionCode, string startAddress, ushort getCount); + public abstract byte[] GetDatas(byte belongAddress, string startAddress, int getCount); /// /// 设置数据 /// /// 从站地址 - /// 功能码 /// 开始地址 - /// 设置个数 + /// 设置数据 /// 是否设置成功 - public abstract bool SetDatas(byte belongAddress, byte functionCode, string startAddress, object[] setContents); + public abstract bool SetDatas(byte belongAddress, string startAddress, object[] setContents); + + public abstract DateTime GetTime(byte belongAddress); + + public abstract bool SetTime(byte belongAddress, DateTime setTime); } } diff --git a/Modbus.Net/ModBus.Net/ModbusProtocal.cs b/Modbus.Net/ModBus.Net/ModbusProtocal.cs index 02f1a61..8f3ec29 100644 --- a/Modbus.Net/ModBus.Net/ModbusProtocal.cs +++ b/Modbus.Net/ModBus.Net/ModbusProtocal.cs @@ -2,6 +2,12 @@ using System.Collections.Generic; using System.Runtime.Remoting.Messaging; +internal enum ModbusProtocalVariableFunctionCode : byte +{ + ReadVariable = 20, + WriteVariable = 21, +} + /// /// 跟时间有关的功能码 /// @@ -9,7 +15,7 @@ internal enum ModbusProtocalTimeFunctionCode : byte { GetSystemTime = 3, SetSystemTime = 16, -}; +} /// /// 跟读数据有关的功能码 @@ -41,11 +47,12 @@ namespace ModBus.Net #region 读PLC数据 public class ReadDataInputStruct : InputStruct { - public ReadDataInputStruct(byte belongAddress, ModbusProtocalReadDataFunctionCode functionCode, string startAddress, ushort getCount) + public ReadDataInputStruct(byte belongAddress, string startAddress, ushort getCount) { BelongAddress = belongAddress; - FunctionCode = (byte)functionCode; - StartAddress = AddressTranslator.Instance.AddressTranslate(startAddress); + KeyValuePair translateAddress = AddressTranslator.Instance.AddressTranslate(startAddress, true); + FunctionCode = (byte)translateAddress.Value; + StartAddress = (ushort)translateAddress.Key; GetCount = getCount; } @@ -103,11 +110,12 @@ namespace ModBus.Net #region 写PLC数据 public class WriteDataInputStruct : InputStruct { - public WriteDataInputStruct(byte belongAddress, ModbusProtocalWriteDataFunctionCode functionCode, string startAddress, object[] writeValue) + public WriteDataInputStruct(byte belongAddress, string startAddress, object[] writeValue) { BelongAddress = belongAddress; - FunctionCode = (byte)functionCode; - StartAddress = AddressTranslator.Instance.AddressTranslate(startAddress); + KeyValuePair translateAddress = AddressTranslator.Instance.AddressTranslate(startAddress, false); + FunctionCode = (byte)translateAddress.Value; + StartAddress = (ushort)translateAddress.Key; WriteCount = (ushort)writeValue.Length; WriteByteCount = 0; WriteValue = writeValue.Clone() as object[]; diff --git a/Modbus.Net/ModBus.Net/ModbusUtility.cs b/Modbus.Net/ModBus.Net/ModbusUtility.cs index abb5ee9..a7ceada 100644 --- a/Modbus.Net/ModBus.Net/ModbusUtility.cs +++ b/Modbus.Net/ModBus.Net/ModbusUtility.cs @@ -72,11 +72,11 @@ namespace ModBus.Net ModbusType = (ModbusType) connectionType; } - public override byte[] GetDatas(byte belongAddress, byte functionCode, string startAddress, ushort getCount) + public override byte[] GetDatas(byte belongAddress, string startAddress, int getCount) { try { - var inputStruct = new ReadDataInputStruct(belongAddress, (ModbusProtocalReadDataFunctionCode)functionCode, startAddress, getCount); + var inputStruct = new ReadDataInputStruct(belongAddress, startAddress, getCount % 2 == 0 ? (ushort)(getCount / 2) : (ushort)(getCount / 2 + 1)); var outputStruct = Wrapper.SendReceive(Wrapper["ReadDataModbusProtocal"], inputStruct) as ReadDataOutputStruct; return outputStruct.DataValue; @@ -87,12 +87,11 @@ namespace ModBus.Net } } - public override bool SetDatas(byte belongAddress, byte functionCode, string startAddress, object[] setContents) + public override bool SetDatas(byte belongAddress, string startAddress, object[] setContents) { try { - var inputStruct = new WriteDataInputStruct(belongAddress, - (ModbusProtocalWriteDataFunctionCode) functionCode, startAddress, setContents); + var inputStruct = new WriteDataInputStruct(belongAddress, startAddress, setContents); var outputStruct = Wrapper.SendReceive(Wrapper["WriteDataModbusProtocal"], inputStruct) as WriteDataOutputStruct; @@ -104,5 +103,37 @@ namespace ModBus.Net return false; } } + + public override DateTime GetTime(byte belongAddress) + { + try + { + var inputStruct = new GetSystemTimeInputStruct(belongAddress); + var outputStruct = + Wrapper.SendReceive(Wrapper["GetSystemTimeModbusProtocal"], inputStruct) as + GetSystemTimeOutputStruct; + return outputStruct.Time; + } + catch (Exception) + { + return DateTime.MinValue; + } + } + + public override bool SetTime(byte belongAddress, DateTime setTime) + { + try + { + var inputStruct = new SetSystemTimeInputStruct(belongAddress, setTime); + var outputStruct = + Wrapper.SendReceive(Wrapper["SetSystemTimeModbusProtocal"], inputStruct) as + SetSystemTimeOutputStruct; + return outputStruct.WriteCount > 0; + } + catch (Exception) + { + return false; + } + } } } diff --git a/Modbus.Net/NA200H.UI.Console/Program.cs b/Modbus.Net/NA200H.UI.Console/Program.cs index d0e70c9..26b455f 100644 --- a/Modbus.Net/NA200H.UI.Console/Program.cs +++ b/Modbus.Net/NA200H.UI.Console/Program.cs @@ -58,7 +58,7 @@ namespace NA200H.UI.ConsoleApp //第一步:先生成一个输入结构体,然后向这个结构体中填写数据 AddressTranslator.CreateTranslator(new AddressTranslatorNA200H()); - ReadDataInputStruct readCoilStatusInputStruct = new ReadDataInputStruct(0x02, ModbusProtocalReadDataFunctionCode.ReadCoilStatus, "N1", 0x0a); + ReadDataInputStruct readCoilStatusInputStruct = new ReadDataInputStruct(0x02, "N1", 0x0a); //第二步:再生成一个输出结构体,执行相应协议的发送指令,并将输出信息自动转换到输出结构体中 ReadDataOutputStruct readCoilStatusOutputStruct = (ReadDataOutputStruct)wrapper.SendReceive(wrapper["ReadDataModbusProtocal"], readCoilStatusInputStruct); //第三步:读取这个输出结构体的信息。 @@ -74,7 +74,7 @@ namespace NA200H.UI.ConsoleApp Console.Read(); Console.Read(); - ReadDataInputStruct readHoldRegisterInputStruct = new ReadDataInputStruct(0x02, ModbusProtocalReadDataFunctionCode.ReadHoldRegister, "NW1", 4); + ReadDataInputStruct readHoldRegisterInputStruct = new ReadDataInputStruct(0x02, "NW1", 4); ReadDataOutputStruct readHoldRegisterOutputStruct = (ReadDataOutputStruct)wrapper.SendReceive(wrapper["ReadDataModbusProtocal"], readHoldRegisterInputStruct); ushort[] array2 = ValueHelper.Instance.ObjectArrayToDestinationArray( @@ -88,7 +88,7 @@ namespace NA200H.UI.ConsoleApp Console.Read(); Console.Read(); - WriteDataInputStruct writeMultiCoilInputStruct = new WriteDataInputStruct(0x02, ModbusProtocalWriteDataFunctionCode.WriteMultiCoil, "Q20", new object[] { true, false, true, true, false, false, true, true, true, false }); + WriteDataInputStruct writeMultiCoilInputStruct = new WriteDataInputStruct(0x02, "Q20", new object[] { true, false, true, true, false, false, true, true, true, false }); WriteDataOutputStruct writeMultiCoilOutputStruct = (WriteDataOutputStruct)wrapper.SendReceive(wrapper["WriteDataModbusProtocal"], writeMultiCoilInputStruct); Console.WriteLine(writeMultiCoilOutputStruct.StartAddress); Console.WriteLine(writeMultiCoilOutputStruct.WriteCount); @@ -96,7 +96,7 @@ namespace NA200H.UI.ConsoleApp Console.Read(); Console.Read(); - WriteDataInputStruct writeMultiRegisterInputStruct = new WriteDataInputStruct(0x02, ModbusProtocalWriteDataFunctionCode.WriteMultiRegister, "NW1", new object[] { (ushort)25, (ushort)18, (ushort)17 }); + WriteDataInputStruct writeMultiRegisterInputStruct = new WriteDataInputStruct(0x02, "NW1", new object[] { (ushort)25, (ushort)18, (ushort)17 }); WriteDataOutputStruct writeMultiRegisterOutputStruct = (WriteDataOutputStruct)wrapper.SendReceive(wrapper["WriteDataModbusProtocal"], writeMultiRegisterInputStruct); Console.WriteLine(writeMultiRegisterOutputStruct.StartAddress); Console.WriteLine(writeMultiRegisterOutputStruct.WriteCount); diff --git a/Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/3Add.prj b/Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/3Add.prj new file mode 100644 index 0000000000000000000000000000000000000000..b9e081968e9469ecbaa6c531fac59677946a2ab8 GIT binary patch literal 78144 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 literal 0 HcmV?d00001 diff --git a/Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/MAIN.ld b/Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/MAIN.ld new file mode 100644 index 0000000000000000000000000000000000000000..82212f5856a9bc29413f1f86fde13f5849cfd337 GIT binary patch literal 619 zcmbVIu};G<6g=A@QCO%%BPy7?+fI;J)2>w*idtnth%5*RCT6YO? z;#p6&&+py4^U7OSIcu-nrLSCx|Au>c|J)8jxCYSH5HUzFue+{*XN891N{rSsH^xW> z1uc@hu5;&E9_||1v{_qgoxq;3ma-k}^~@I-1rU92b&=)CUQrdbs2>T<^SufZWCmqu zrEbPJktUEOoh~`ipS8z5FY@ZkRQr)Gw4vEkR5V3l)pMa!$O{F LZgB||lW+J21Q>M$ literal 0 HcmV?d00001 diff --git a/Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/MAIN.ldo b/Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/MAIN.ldo new file mode 100644 index 0000000000000000000000000000000000000000..d7900841186a935decfa44c30364e473e035fb3c GIT binary patch literal 204 zcmWGDGB7kTG%&C*G&M3YG-iMTCK!WQni;4NSra1z6C*!VGZ$1sfDs}f%D~J7V{<~p em^dM7m;|6|Ia$DJnZRn%#5h5gA*_ppsRaO|mIPz~ literal 0 HcmV?d00001 diff --git a/Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/MAIN.nal b/Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/MAIN.nal new file mode 100644 index 0000000000000000000000000000000000000000..80872b4f3d98c4782766134b43735795f293009b GIT binary patch literal 40960 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 literal 0 HcmV?d00001 diff --git a/Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/MAIN.o b/Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/MAIN.o new file mode 100644 index 0000000000000000000000000000000000000000..9ca0f0aedbd25730dcfe536ff33920fe91c6428a GIT binary patch literal 9051 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 literal 0 HcmV?d00001 diff --git a/Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/MAIN.tag b/Modbus.Net/NA200H.UI.WPF/3Add_NAPro5.0/MAIN.tag new file mode 100644 index 0000000000000000000000000000000000000000..59e3da99796823efb179acdd4087e8e1c3c42b08 GIT binary patch literal 71 zcmZQ&U|?WLOi3|h;ACWAVqgSwj2JkX;2aYMP8J}CnSo6;*ucQRh=Gdq?#dc9?T z%8@vk~4-4Cn-VbgM@%u?I^ewb6ETN6}qHYcZWQv$f=}(d=f>z&>&LZaMKpZ^C zl%om!7GRDLV|-2~kOv;vU&r){5V1>2POrcpb-Yi`2mMTH5$m9Ovx|w{j;Fc?1sp7iA%@(p1;Z7idC^hRb>*cb~`ocXi zc4%4dlFX*)NM>XrJ{;B9|Rc+2x{r1eMZW#S7XKu1|on@p4%eZRFXVUr2{y z zh3Q*i`gWMor_|dOrgu@^#sv=C20@f5CixD^??)P4?5V=nf9nH31&*%0c!y=t#p~5Q zi&qz8Yrm|{UqJoeUR{p8c6oXJ@4u)<7kaAJ!u6`(d7jMKmXa{W#e$+`;S^h7K2eMTQeRXL4(EgWdH93DM7B!HbGLQL@YmBj#v4ByCdzfMD8W>q| zD-wjQK`3(%z6@qG=#zXc^mE3RcOJIs-Ir&cTe6y-3f zNE_CWUI4~eiuVD(TT=0k`hDn+@scryYdwa%iYKZ);yB91@qvL)SY5|YedbXsX*+iB z2UjAy;`*jf0#9!Els@M8`JK??TPMmQ0uv}bFT~w&4jzXd{_FHb?iSg-dE}h6QsP**PhwYChQswDHs#M9^qxY!RP(i>$R{yAl zAa=w)B#gPh08V|>xct8vPU7>V3h z+*=<3GoDe8F^>E^n6ZuVjyhcMkAhi7J;p>bW1%8ck#q>ZjBC_mOd}({$a+*@Ir#}N z;~?{lg=7nPByy(NFX<#0AO4_U2pLZqOIeRZJ;s!?V5P^{OJ+IsSg!P3Ya6ZF6J9vVoLT#qcYmpAtfGUY8^$2>W1khy7vvp#RF z8)S+HHvn=bW?i4hDDJtNW6XMO0D9*_e?}1DM;kEX=;csugmN_>5$p=;Gj@?8_;TQm zR44YA24XxS88}h1Jsp>T)ji+9J)d$N&jG7@zk$~f%9Xzj`1=Yl_dmyJ;6%;%!SgPO za@n4Se~9vH4dc}@^{sF`9PiJ8llAch{%OQ-*X29KE$Ba9$IY_;S*^WA$S-Pg`mYfu z>-NRA_;VflJj;{l&v%f@GrYum#7;T_v6W=ti*f*1_uoO_A2sx^V~+ohX74AV|7L@J zBYsS?m)$Gk{GZhdh&f)K(MW3j@CX;+o#M(i`h0f@5AWy}k#m_csBo#>aQ0GO!{GnM(~= z@L0>^tev{Y#ps^*sg#$?X>U-X(-WO(-XO}A>4^!n>$(GDr_Z<}!=q#JfoO0OIx$ce z;b=US^DBPZP98}*VhYLOkE43J=w@=oaWCh}6SnJ3&kEV=_9A&Gchl4P{P{plF9?kp zIyJaqivq{a^q(AZ6{2A(zhQwq>ThqshUh)sw|Fz<6(@gw#w)>L*+K=cXx@0vcPDaQ zMpW{pLn&MtkoJb@;V?}yg&WF6chW1Qb9m)DK63hK|A>3~*s;-}F?X#0=*SSB>u&SF*w?2&`l+Ww=+i*$O>vuN$c9JE{{W;1 B!QlV^ literal 0 HcmV?d00001 diff --git a/Modbus.Net/NA200H.UI.WPF/MainWindow.xaml.cs b/Modbus.Net/NA200H.UI.WPF/MainWindow.xaml.cs index 1aed2da..4debf16 100644 --- a/Modbus.Net/NA200H.UI.WPF/MainWindow.xaml.cs +++ b/Modbus.Net/NA200H.UI.WPF/MainWindow.xaml.cs @@ -21,7 +21,9 @@ namespace NA200H.UI.WPF private void MainWindow_OnLoaded(object sender, RoutedEventArgs e) { utility = new ModbusUtility((int) ModbusType.Tcp, "192.168.3.247"); - byte[] getNum = utility.GetDatas(0x02, (byte) ModbusProtocalReadDataFunctionCode.ReadHoldRegister, "10000", 4); + AddressTranslator.CreateTranslator(new AddressTranslatorNA200H()); + //byte[] getNum = utility.GetDatas(0x02, "03:10000", 8); + byte[] getNum = utility.GetDatas(0x02, "NW1", 8); object[] getNumObjects = ValueHelper.Instance.ByteArrayToObjectArray(getNum, new List>(){{new KeyValuePair(typeof(ushort), 4)}}); @@ -43,9 +45,11 @@ namespace NA200H.UI.WPF ushort.TryParse(Add1.Text, out add1); ushort.TryParse(Add2.Text, out add2); ushort.TryParse(Add3.Text, out add3); - utility.SetDatas(0x02, (byte)ModbusProtocalWriteDataFunctionCode.WriteMultiRegister, "10000", new object[] {add1, add2, add3}); + //utility.SetDatas(0x02, "16:10000", new object[] {add1, add2, add3}); + utility.SetDatas(0x02, "NW1", new object[] { add1, add2, add3 }); Thread.Sleep(100); - byte[] getNum = utility.GetDatas(0x02, (byte)ModbusProtocalReadDataFunctionCode.ReadHoldRegister, "10000", 4); + //byte[] getNum = utility.GetDatas(0x02, "03:10000", 8); + byte[] getNum = utility.GetDatas(0x02, "NW1", 8); object[] getNumObjects = ValueHelper.Instance.ByteArrayToObjectArray(getNum, new KeyValuePair(typeof(ushort), 4)); ushort[] getNumUshorts = ValueHelper.Instance.ObjectArrayToDestinationArray(getNumObjects);