59【工控通信】ModbusTCP通讯之ModbusPoll客户端工具配置

简介: 【工控通信】ModbusTCP通讯之ModbusPoll客户端工具配置

一、 Modbus Poll客户端工具安装

1.安装Modbus Poll客户端工具
在这里插入图片描述

2.Modbus Poll客户端工具安装好以后的界面
在这里插入图片描述

二、Modbus Poll客户端工具自带使用说明

Overview

Modbus Poll uses a multiple windows user interface. That means you can open several windows showing different data areas or data from different slave ID's at the same time. You can write any text in the Alias cells.

In any dialog box you can press the F1 key for more help on that specific topic.


在这里插入图片描述
This picture shows two open windows one reading 10 holding registers from ID 1, address 0 and one reading 10 holding registers from ID 2.

If your slave device allows you to change a Holding register then
youdouble click the cell or just start typing a new value in the
cell.Then an edit dialog box is shown.

Change the read/write definition

To change the read/write definition of a window you can press F8 or select "read/write definition" from the Setup menu.

在这里插入图片描述
Here you define which data to show in the window. This setup shows how toread 10 Holding Registers from address 0. Address 40001 in someprotocol descriptions. Note that Modbus Poll uses Modbus addresseswhich always counts from 0.

在这里插入图片描述
在这里插入图片描述

How to make a connection

There is no data to display if you have not made a connection. To do so press F3 or select connect from the connection menu. For more detailed help press F1.
在这里插入图片描述
This connection use Modbus TCP/IP.

5 different connection types are available however only 2 of them are standard Modbus connections:
•Serial port
•Modbus TCP/IP

For serial connection you may need an USB to RS485, or an RS232 to RS485 converter.

三、 创建自己的Modbus TCP服务端程序

1、我在自己的程序中做了个ModbusTCP服务器,在服务器开启之后,并且ModbusTCP客户端与服务端通讯成功之后,向ModbusTCP客户端写数据。ModbusPull作为客户端。

服务端程序:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Net.Sockets;
using Modbus.Device;
using Modbus.Data;

namespace ModbusTCPServer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        
        //定义公共变量
        public static bool isModBusServerEnable = true;
        public static ModbusSlave modbusTcpSlave = null;
        public static TcpListener tcpListener;
        public static bool slaveCon = false;
        public static DataStore dataStore;

        private void timer1_Tick(object sender, EventArgs e)
        {
            for (int i = 1; i < 1000000; i++)
            {
                SetValueToModBusTcpServer(i, i);//第一个参数为写入的地址,从1开始,第二个为写入的数值
            }

            bool valueBool = true;
            SetValueToModBusTcpServer(1, valueBool);//给地址的第1位写入bool值1
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //创建并开启ModbusTcp服务器
            try
            {
                //dataStore = DataStoreFactory.CreateDefaultDataStore();//初始化服务数据区
                tcpListener = new TcpListener(System.Net.IPAddress.Parse("本地电脑IP"), 502);
                modbusTcpSlave = ModbusTcpSlave.CreateTcp(1, tcpListener);
                //modbusTcpSlave.DataStore = dataStore;
                modbusTcpSlave.Listen();
                slaveCon = true;
            }
            catch (Exception)
            {
                slaveCon = false;
            }
        }

        /// <summary>
        /// 向ModBusTcp服务写入模拟量
        /// </summary>
        /// <param name="index"></param>
        /// <param name="value"></param>
        private void SetValueToModBusTcpServer(int index, float value)
        {
            byte[] buffer = BitConverter.GetBytes(value);
            ushort highValue = BitConverter.ToUInt16(buffer, 0);
            ushort lowValue = BitConverter.ToUInt16(buffer, 2);
            ModbusDataCollection<ushort> data = modbusTcpSlave.DataStore.InputRegisters;
            data[index] = lowValue;
            data[index + 1] = highValue;
        }

        /// <summary>
        /// 向ModBusTcp服务写入数字量
        /// </summary>
        /// <param name="index"></param>
        /// <param name="value"></param>
        private void SetValueToModBusTcpServer(int index, bool value)
        {
            ModbusDataCollection<bool> data = modbusTcpSlave.DataStore.InputDiscretes;
            lock (modbusTcpSlave.DataStore.SyncRoot)
            {
                data[index] = value;
            }

        }
    }
}

四、Modbus TCP服务端(自建)与Modbus Poll客户端工具进行Modbus TCP通讯

1、客户端配置

(1)选择通讯方式
在这里插入图片描述

(2)选择数据传输寄存器类型

在这里插入图片描述

(3)运行Modbus TCP自己创建的服务端程序之后,与Modbus Poll客户端工具建立通信联系,读到的数据如下:

通信不成功Modbus Poll客户端工具界面会有红色字体出现。

获取数据区域(部分字节/双字节)

在这里插入图片描述

读到数据,没有红色字体,说明通信成功!

总结

这里Modbus TCP通讯客户端使用了自带的客户端工具Modbus Poll,服务端程序是自己写的。后续也可以自己写一个Modbus TCP通讯的客户端程序。

目录
相关文章
数据通信方式
数据通信方式。
206 2
|
7月前
A-B 通信模块如何与串行设备通信?
A-B 通信模块如何与串行设备通信?
|
移动开发 缓存 安全
连接世界的纽带:掌握Linux网络设计中的WebSocket服务器
本文探索了在Linux环境下实现WebSocket服务器的网络设计,将WebSocket服务器作为连接世界的纽带,为读者介绍了如何掌握Linux网络设计中的关键技术。文章从实现WebSocket协议到优化服务器性能和稳定性等方面进行了深入讲解。通过学习本文,读者将能够全面了解WebSocket服务器的原理和工作机制,并获得构建高效、可靠的Linux WebSocket服务器的实用技巧和最佳实践。无论是初学者还是有经验的开发人员,都能从本文中获得宝贵的知识和启发,进一步提升在Linux网络设计中的能力。让我们一同打造连接世界的纽带,掌握Linux网络设计中WebSocket服务器的精髓。
303 0
连接世界的纽带:掌握Linux网络设计中的WebSocket服务器
|
存储 域名解析 网络协议
LinuxUDP通讯
学习网络通讯时最主要的一个内容就是UDP通讯
133 0
搭建本地MQTT服务器实现局域网通信
搭建本地MQTT服务器实现局域网通信
1522 0
|
缓存 算法
软交换网络的通信流程
软交换网络的通信流程
|
网络协议 Linux 网络架构
|
JavaScript 网络协议 Java