NetCore下模拟和使用Modbus工业通信协议

Tips:

  1、目前NetCore下与Modbus通信的框架主要选择了 Modbus.Net  https://github.com/parallelbgls/Modbus.Net

  2、modbus是常用的工业通信协议,在软件调试时可以通过modbus poll+slave模拟通信通过达到调试目的,下图是我使用软件

            1)为串口模拟工具

            2)为Modbus Slave模拟工具

   3)为Modbus Poll模拟,修改对应Value值即可发送到Slave

   

  调用和测试代码:

  

   public class ModbusTest
    {
        public Dictionary<string, ReturnUnit> GetModbusValues(List<AddressUnit> addresses, ModbusType connectType = ModbusType.Tcp, string connectString = "127.0.0.1")
        {
            var _modbusTcpMachine = new ModbusMachine(connectType, connectString, addresses, true, 2, 0);

            var result = _modbusTcpMachine.GetDatas(MachineGetDataType.Address);

            return result;
        }

        public bool SetModbusValues(List<AddressUnit> addresses, Dictionary<string, double> setDict, ModbusType connectType = ModbusType.Tcp, string connectString = "127.0.0.1")
        {
            var _modbusTcpMachine = new ModbusMachine(connectType, connectString, addresses, true, 2, 0);

            var result = _modbusTcpMachine.SetDatas(MachineSetDataType.Address, setDict);

            return result;
        }

        //获取测试
        [Obsolete("固定写死的测试方法,临时测试用")]
        public void TestGetModbusValues()
        {
            var addresses = new List<AddressUnit>();
            for (int i = 0; i < 6; i++)
            {
                addresses.Add(new AddressUnit { Id = "1", Area = "4X", Address = i + 1, DataType = typeof(ushort) });
            }

            var _modbusTcpMachine = new ModbusMachine(ModbusType.RtuInTcp, "127.0.0.1", addresses, true, 2, 0);

            var result = _modbusTcpMachine.GetDatas(MachineGetDataType.Address);

            foreach (var item in result)
            {
                Console.WriteLine($"Key:{item.Key} Value:{item.Value.PlcValue}");
            }
        }

        //设置测试
        [Obsolete("固定写死的测试方法,临时测试用")]
        public void TestSetModbusValues()
        {
            var addresses = new List<AddressUnit>();
            var setDict = new Dictionary<string, double>();
            for (int i = 0; i < 6; i++)
            {
                addresses.Add(new AddressUnit { Id = "1", Area = "4X", Address = i + 1, DataType = typeof(ushort) });
                var r = new Random();
                var intValue = r.Next(0, 100);
                System.Threading.Thread.Sleep(100);
                setDict.Add($"4X {i + 1}.0", intValue);
            }

            var _modbusTcpMachine = new ModbusMachine(ModbusType.RtuInTcp, "127.0.0.1", addresses, true, 2, 0);

            _modbusTcpMachine.SetDatas(MachineSetDataType.Address, setDict);
        }
    }

 

   也可以使用Modbus-TCP Client Tester来模拟展现,可以写入或读写寄存器

  

 

转载于:https://www.cnblogs.com/leeolevis/p/7927877.html

NModbus What is it? ----------- NModbus is a C# 3.0 implementation of the Modbus protocol. More information at the NModbus project web site http://nmodbus.com/ The Latest Version ------------------ The latest binary distribution can be found on the NModbus project web site http://nmodbus.com/ The latest source for the project can be found at the NModbus project's google code page http://code.google.com/p/nmodbus/ Documentation ------------- Documentation is available in chm format (NModbus.chm) License ------- Copyright (c) 2006 Scott Alexander Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
NetCore是一个跨平台的开源框架,用于开发和运行各种应用程序。如果要在NetCore使用MQTT协议,可以按照以下步骤进行操作: 1. 添加MQTT NuGet包:在NetCore项目中,可以使用MQTT客户端库来实现与MQTT代理的通信。可以通过NuGet包管理器或在项目文件中手动添加以下NuGet包:Microsoft.Azure.Devices.Client。安装后,将能够在项目中使用MQTT客户端。 2. 创建MQTT客户端:使用MQTT客户端库创建一个MQTT客户端实例。在创建客户端实例时,需要指定MQTT代理的连接字符串和客户端ID。例如: ``` MqttClient mqttClient = new MqttClient(connectionString, clientId); ``` 3. 连接到MQTT代理:使用客户端实例连接到MQTT代理。需要通过调用Connect方法来连接。例如: ``` mqttClient.Connect(); ``` 4. 订阅主题:使用客户端实例订阅感兴趣的主题。通过调用Subscribe方法,并指定要订阅的主题,可以接收该主题下的消息。例如: ``` mqttClient.Subscribe(topic); ``` 5. 发布消息:使用客户端实例发布消息到特定的主题。通过调用Publish方法,并指定要发布的主题和消息内容,可以向指定的主题下发送消息。例如: ``` mqttClient.Publish(topic, message); ``` 6. 处理接收的消息:通过订阅特定的主题,可以接收到MQTT代理发布的消息。可以通过注册消息处理程序来处理接收到的消息。例如: ``` mqttClient.MqttMsgPublishReceived += MqttMsgReceived; ``` 在MqttMsgReceived方法中,可以处理接收到的消息。 以上是在NetCore使用MQTT协议的基本步骤。通过使用MQTT客户端库,可以方便地实现与MQTT代理的通信,并进行消息的订阅和发布。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值