Browse Source

添加单元测速,并修改页面显示bug

master
永攀 张 1 week ago
parent
commit
4579c8b519
13 changed files with 216 additions and 35 deletions
  1. +7
    -1
      ModbusDemo.sln
  2. +1
    -1
      ModbusDemo/Device/IModbusRTU.cs
  3. +1
    -0
      ModbusDemo/Device/ModbusRTU.cs
  4. +3
    -1
      ModbusDemo/Model/ModbusDbContext.cs
  5. +4
    -4
      ModbusDemo/VIew/CoilUC.xaml
  6. +5
    -5
      ModbusDemo/VIew/RegisterUC.xaml
  7. +6
    -6
      ModbusDemo/VIew/SettingsUC.xaml
  8. +1
    -15
      ModbusDemo/VIew/SettingsUC.xaml.cs
  9. +1
    -1
      ModbusDemo/VIewModel/CoilUCViewModel.cs
  10. +1
    -1
      ModbusDemo/VIewModel/RegisterUCViewModel.cs
  11. +141
    -0
      ModbusTest/ModbusRTUTest.cs
  12. +29
    -0
      ModbusTest/ModbusTest.csproj
  13. +16
    -0
      ModbusTest/UnitTest1.cs

+ 7
- 1
ModbusDemo.sln View File

@@ -1,10 +1,12 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.14.36301.6 d17.14
VisualStudioVersion = 17.14.36301.6
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModbusDemo", "ModbusDemo\ModbusDemo.csproj", "{4F00ED24-6BEE-4192-9CA4-656802B78A6D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModbusTest", "ModbusTest\ModbusTest.csproj", "{83697BB7-2138-4D7A-BA1C-6FCAFE5CC37A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -15,6 +17,10 @@ Global
{4F00ED24-6BEE-4192-9CA4-656802B78A6D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4F00ED24-6BEE-4192-9CA4-656802B78A6D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4F00ED24-6BEE-4192-9CA4-656802B78A6D}.Release|Any CPU.Build.0 = Release|Any CPU
{83697BB7-2138-4D7A-BA1C-6FCAFE5CC37A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{83697BB7-2138-4D7A-BA1C-6FCAFE5CC37A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{83697BB7-2138-4D7A-BA1C-6FCAFE5CC37A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{83697BB7-2138-4D7A-BA1C-6FCAFE5CC37A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE


+ 1
- 1
ModbusDemo/Device/IModbusRTU.cs View File

@@ -6,7 +6,7 @@ using System.Threading.Tasks;

namespace ModbusDemo.Device
{
interface IModbusRTU
public interface IModbusRTU
{
public bool[] ReadCoil(byte slaveAddress, ushort startAddress, ushort numberOfPoints);



+ 1
- 0
ModbusDemo/Device/ModbusRTU.cs View File

@@ -17,6 +17,7 @@ namespace ModbusDemo.Device
private SerialPort _serialPort;
//用于操作数据库
private ModbusDbContext _modbusDbContext;
public ModbusRTU(SerialPort serialPort, ModbusDbContext modbusDbContext)
{
_serialPort = serialPort;


+ 3
- 1
ModbusDemo/Model/ModbusDbContext.cs View File

@@ -9,7 +9,9 @@ namespace ModbusDemo.Model
{
public class ModbusDbContext:DbContext
{
protected ModbusDbContext()
{
}
public ModbusDbContext(DbContextOptions<ModbusDbContext> options) :base(options)
{


+ 4
- 4
ModbusDemo/VIew/CoilUC.xaml View File

@@ -87,8 +87,8 @@
<Button
Grid.Column="4"
Width="80"
Height="30"
materialDesign:ButtonAssist.CornerRadius="15"
Height="40"
materialDesign:ButtonAssist.CornerRadius="20"
Command="{Binding ReadCoilCmm}"
Content="读取"
Style="{StaticResource MaterialDesignRaisedDarkButton}">
@@ -140,8 +140,8 @@
<Button
Grid.Column="4"
Width="80"
Height="30"
materialDesign:ButtonAssist.CornerRadius="15"
Height="40"
materialDesign:ButtonAssist.CornerRadius="20"
Command="{Binding WriteCoilCmm}"
Content="写入"
Style="{StaticResource MaterialDesignRaisedDarkButton}">


+ 5
- 5
ModbusDemo/VIew/RegisterUC.xaml View File

@@ -87,8 +87,8 @@
<Button
Grid.Column="4"
Width="80"
Height="30"
materialDesign:ButtonAssist.CornerRadius="15"
Height="40"
materialDesign:ButtonAssist.CornerRadius="20"
Command="{Binding ReadRegisterCmm}"
Content="读取"
Style="{StaticResource MaterialDesignRaisedDarkButton}">
@@ -133,15 +133,15 @@
Margin="0,-50,0,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Text="1代表Ture,0代表flase">
Text="数据之间加空格">
</TextBlock>


<Button
Grid.Column="4"
Width="80"
Height="30"
materialDesign:ButtonAssist.CornerRadius="15"
Height="40"
materialDesign:ButtonAssist.CornerRadius="20"
Command="{Binding WriteRegisterCmm}"
Content="写入"
Style="{StaticResource MaterialDesignRaisedDarkButton}">


+ 6
- 6
ModbusDemo/VIew/SettingsUC.xaml View File

@@ -139,18 +139,18 @@
</ColumnDefinition>
</Grid.ColumnDefinitions>
<Button
Width="100"
Height="50"
materialDesign:ButtonAssist.CornerRadius="25"
Width="80"
Height="40"
materialDesign:ButtonAssist.CornerRadius="20"
Style="{StaticResource MaterialDesignRaisedDarkButton}"
Content="连接"
Command="{Binding ConnectionCmm}">
</Button>
<Button
Grid.Column="1"
Width="100"
Height="50"
materialDesign:ButtonAssist.CornerRadius="25"
Width="80"
Height="40"
materialDesign:ButtonAssist.CornerRadius="20"
Style="{StaticResource MaterialDesignRaisedDarkButton}"
Content="断开"
Command="{Binding DisConnectionCmm}">


+ 1
- 15
ModbusDemo/VIew/SettingsUC.xaml.cs View File

@@ -28,20 +28,6 @@ namespace ModbusDemo.VIew
_ModbusDbContext = ModbusDbContext;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
ModbusLog m = new ModbusLog();
m.OperationType = "read";
m.ResponseData = "0120";
m.RequestData = "8888";


_ModbusDbContext.Add(m);

_ModbusDbContext.SaveChanges();


}
}
}

+ 1
- 1
ModbusDemo/VIewModel/CoilUCViewModel.cs View File

@@ -32,7 +32,7 @@ namespace ModbusDemo.VIewModel
{
get
{
return "当前链接的状态:" + "串口号:" + _serialPort.PortName + ",波特率:" + _serialPort.BaudRate
return "当前为读写线圈:" + "串口号:" + _serialPort.PortName + ",波特率:" + _serialPort.BaudRate
+ ",数据位:" + _serialPort.DataBits + ",校验位:" + _serialPort.Parity + ",停止位:" + _serialPort.StopBits;
}



+ 1
- 1
ModbusDemo/VIewModel/RegisterUCViewModel.cs View File

@@ -29,7 +29,7 @@ namespace ModbusDemo.VIewModel
{
get
{
return "当前链接的状态:" + "串口号:" + _serialPort.PortName + ",波特率:" + _serialPort.BaudRate
return "当前为读写寄存器:" + "串口号:" + _serialPort.PortName + ",波特率:" + _serialPort.BaudRate
+ ",数据位:" + _serialPort.DataBits + ",校验位:" + _serialPort.Parity + ",停止位:" + _serialPort.StopBits;
}



+ 141
- 0
ModbusTest/ModbusRTUTest.cs View File

@@ -0,0 +1,141 @@
using DryIoc;
using Microsoft.EntityFrameworkCore;
using ModbusDemo.Device;
using ModbusDemo.Model;
using Moq;
using Prism.Ioc;
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ModbusTest
{
public class ModbusRTUTest
{
//设计缺陷,应该使用适配器模式重写SerialPort
private SerialPort _serialport;
private Mock<ModbusDbContext> _mockDbContext;
private ModbusRTU _modbusRtu;
[SetUp]
public void Setup()
{
_serialport = new SerialPort();
_serialport.PortName = "COM3";
_serialport.DataBits = 8;
_serialport.BaudRate = 9600;
_serialport.Parity = Parity.Even;
_serialport.StopBits = StopBits.One;
_serialport.ReadTimeout = 500;
_serialport.WriteTimeout = 500;
_serialport.Open();
_mockDbContext = new Mock<ModbusDbContext>();
_modbusRtu = new ModbusRTU(_serialport, _mockDbContext.Object);
}
[TearDown]
public void TearDown()
{
// 确保在测试结束后释放资源
_serialport.Dispose();
}
/// <summary>
/// 测试线圈读取
/// </summary>
[Test]
public void ReadCoil1()
{

var result = _modbusRtu.ReadCoil(1, 300, 5);
// 创建包含5个true的预期数组
var expected = new bool[5];
Array.Fill(expected, false);
CollectionAssert.AreEqual(expected, result);
}

[Test]
public void ReadCoil2()
{
var result = _modbusRtu.ReadCoil(1, 305, 5);
// 创建包含5个flase的预期数组
var expected = new bool[5];
Array.Fill(expected, true);
CollectionAssert.AreEqual(expected, result);

}


[Test]
public void WriteCoil1()
{
var data = new bool[5];
Array.Fill(data, true);
_modbusRtu.WriteCoil(1, 310, data);
// 创建包含5个true的预期数组
var expected = _modbusRtu.ReadCoil(1, 310, 5);
CollectionAssert.AreEqual(data, expected);

}



[Test]
public void WriteCoil2()
{
var data = new bool[5];
Array.Fill(data, false);
_modbusRtu.WriteCoil(1, 315, data);
// 创建包含5个flase的预期数组
var expected = _modbusRtu.ReadCoil(1, 315, 5);
CollectionAssert.AreEqual(data, expected);

}


[Test]
public void ReadRegister1()
{
ushort[] data = new ushort[5];
Array.Fill(data, (ushort)0);
var expected = _modbusRtu.ReadRegisters(1, 300, 5);
CollectionAssert.AreEqual(data, expected);
}



[Test]
public void ReadRegister2()
{
ushort[] data = new ushort[5];
Array.Fill(data, (ushort)1);
var expected = _modbusRtu.ReadRegisters(1, 305, 5);
CollectionAssert.AreEqual(data, expected);
}



[Test]
public void WriteRegister1()
{
ushort[] data = new ushort[5];
Array.Fill(data, (ushort)1);

_modbusRtu.WriteRegisters(1, 310, data);
var expected = _modbusRtu.ReadRegisters(1, 310, 5);
CollectionAssert.AreEqual(data, expected);
}


[Test]
public void WriteRegister2()
{
ushort[] data = new ushort[5];
Array.Fill(data, (ushort)2);

_modbusRtu.WriteRegisters(1, 315, data);
var expected = _modbusRtu.ReadRegisters(1, 315, 5);
CollectionAssert.AreEqual(data, expected);
}
}
}

+ 29
- 0
ModbusTest/ModbusTest.csproj View File

@@ -0,0 +1,29 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="Moq" Version="4.20.72" />
<PackageReference Include="NUnit" Version="3.14.0" />
<PackageReference Include="NUnit.Analyzers" Version="3.9.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\ModbusDemo\ModbusDemo.csproj" />
</ItemGroup>

<ItemGroup>
<Using Include="NUnit.Framework" />
</ItemGroup>

</Project>

+ 16
- 0
ModbusTest/UnitTest1.cs View File

@@ -0,0 +1,16 @@
namespace ModbusTest
{
public class Tests
{
[SetUp]
public void Setup()
{
}

[Test]
public void Test1()
{
Assert.Pass();
}
}
}

Loading…
Cancel
Save