Modbus协议及基于Python的ModbusTCP客户端实现

基于python的modbus协议编程_基于Python的ModbusTCP客户端实现详解 前言Modbus协议是由Modicon公司(现在的施耐德电气Schneider Electric)推出,主要建立在物理串口、以太网TCP/IP层之上,目前已经成为工业领域通信协议的业界标准,广泛应用在工业电子设备之间的互联。Modbus Poll和Modbus Slave是两款非常流行的Modbus设备仿真软件,支持Modbus RTU/ASCII和Modbus TCP/IP协议 ,经常用于测试和... 阅读详情
AI摘要

Modbus协议是一种广泛应用于工业设备间通信的标准,支持串口如RTU和ASCII模式,以及TCP/IP的TCP和UDP模式。协议包括不同类型的寄存器,如线圈、离散输入、输入寄存器和保持寄存器。Python的modbus_tk库提供了方便的Modbus通信接口,支持读写不同类型的寄存器并处理数据格式转换。

Modbus 协议是由 Modicon 公司(现在的施耐德电气 Schneider Electric )于1979年为使用可编程逻辑控制器(PLC)通信而推出,主要建立在物理串口、以太网 TCP/IP 层之上,目前已经成为工业领域通信协议的业界标准,广泛应用在工业电子设备之间的互联。

Modbus技术文档

1 网络模型

Modbus 是OSI模型第 7 层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。

Modbus 是一个请求/应答协议,并且提供功能码规定的服务。

2 Modbus 协议描述

Modbus 主要有 4 种通信模式:

Modbus 协议类型描述
RTU 模式(串口)二进制表示数据,采用循环冗余校验的校验和
ASCII 模式(串口)采用人类可读的、冗长的表示输入,采用纵向冗余校验的校验和
TCP 模式(网口)基于TCP通信,与Modbus RTU相似,取消循环冗余校验的校验和
UDP 模式(网口)基于UDP通信,与Modbus RTU相似,取消循环冗余校验的校验和

协议格式:

Modbus 协议类型协议格式
Modbus RTU[地址码] [功能码] [数据] [CRC校验码]
Modbus ASCII[起始冒号] [地址码] [功能码] [数据] [LRC校验码] [回车换行]
Modbus TCP[事务处理标识] [协议标识] [长度] [单元标识符] [功能码] [数据]
Modbus UDP[事务处理标识] [协议标识] [长度] [单元标识符] [功能码] [数据]

Modbus 协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。

PDU = [功能码] [数据] ,功能码为1字节,数据长度不定,由具体功能决定。

标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。

modbus-RTU (Remote Terminal Unit 远程终端单元)是数据在串口RS485等链路上传输的。

modbus-TCP 是使用以太网TCP网络进行通信的,使用502端口,客户端和服务端模式。

Modbus-RTU 数据格式

modbus-RTU 数据包格式=PDU+CRC

PDU由功能码+数据组成。功能码为1字节,数据长度不定,由具体功能决定。

CRC为校验码,为2个字节。

Modbus-TCP 数据格式

modbus-TCP 数据帧格式=MBAP+PDU

MBAP为报文头,长度为7字节,由事务处理标识+协议标识符+长度+单元标识符组成:

示例内容长度描述
事务处理标识00 002字节可以理解为报文的序列号,一般每次通信之后就要加1
协议标识符00 002字节00 00表示ModbusTCP协议
长度00 062字节表示接下来的数据长度,单位为字节
单元标识符011字节串行链路或其它总线上连接的远程从站的识别码

3 数据模型

Modbus 协议中一个重要的概念是寄存器,所有的数据均存放于寄存器中。最初Modbus协议借鉴了PLC中寄存器的含义,但是随着Modbus协议的广泛应用,寄存器的概念进一步泛化,不再是指具体的物理寄存器,也可能是一块内存区域。Modbus寄存器根据存放的数据类型以及各自读写特性,将寄存器分为4个部分,这4个部分可以连续也可以不连续,由开发者决定。

寄存器种类数据类型访问类型功能码含义
线圈状态(Coil Status)位读写0x01 0x05 0x0FPLC的输出位,开关量0x
离散输入状态(Input Status)位只读0x02PLC的输入位,开关量1x
输入寄存器(Input Register)字只读0x04PLC中只能从模拟量输入端改变的寄存器4x
保持寄存器(Holding Register)字读写0x03 0x06 0x10PLC中用于输出模拟量信号的寄存器3x

4 功能码

Modbus 功能码分三类:公共功能码、用户定义功能码、保留功能码。

Modbus 的常用公共功能码有:

功能码名称英文名位操作/字操作操作数量
0x01读线圈状态READ COIL STATUS位操作单个或多个
0x02读离散输入状态READ INPUT STATUS位操作单个或多个
0x03读保持寄存器READ HOLDING REGISTER字操作单个或多个
0x04读输入寄存器READ INPUT REGISTER字操作单个或多个
0x05写单个线圈状态WRITE SINGLE COIL位操作单个
0x06写单个保持寄存器WRITE SINGLE REGISTER字操作单个
0x0F写多个线圈WRITE MULTIPLE COIL位操作多个
0x10写多个保持寄存器WRITE MULTIPLE REGISTER字操作多个

字节序及数据类型

字节序分类:

存储模式data_fromat前缀说明
大端模式>数据的高字节保存在寄存器的低地址中,数据的低字节保存在寄存器的高地址中
小端模式<数据的高字节保存在寄存器的高地址中,而数据的低字节保存在寄存器的低地址中

Modbus采用大端字节序进行报文传输,字节序不正确则对多字节数据无法解析和组拼。

每个寄存器有两个字节,第一个字节包括高位比特,并且第二个字节包括低位比特。

Modbus 每个寄存器地址是16位的,常用数据类型及长度:

FormatC TypePython type字节数PLC 寄存器数量大端模式
hshortinteger21AB
Hunsigned shortinteger21AB
iintinteger21AB
Iunsigned intinteger21AB
llonglong42AB CD
Lunsigned longinteger42AB CD
ffloatfloat42AB CD
ddoublefloat84AB CD EF GH

1个字节是8个比特,即:1byte = 8bit

Modbus 以16位为一个字进行编址,寄存器是16位的,可以存放两个字节 ,即1寄存器 = 2字节

data_format:对读写数据进行格式化,示例:

>f 中的 > 表示大端模式,f表示1个float,共有4个字节,占用2个寄存器。

>dd 中的 > 表示大端模式,dd表示两个double,共有16个字节,占用8个寄存器。

5 Python示例

Java 的 modbus4j、Python 的 modbus_tk 等第三方库对 modbus 做了很好的封装,开发者通常不需要关注请求、响应、错误的报文解析,第三方库已经根据功能码、数据类型、数据数量等对报文进行了解析。

下面是 Python3 的 modbus 使用示例:

import modbus_tk.modbus_tcp as mt
import modbus_tk.defines as cst


if __name__ == '__main__':
    master = mt.TcpMaster('127.0.0.1', 502)
    master.set_timeout(5)
    # 参数说明
    # slave: Modbus从站地址. from 1 to 247. 0为广播所有的slave
    # function_code:功能码
    # starting_address:寄存器起始地址
    # quantity_of_x:寄存器读写的数量,写寄存器时数量可为 0,读寄存器时数量至少为 1; 一个寄存器=2字节, 1字节=8位
    # output_value:输出内容,读操作无效,写操作是一个整数或可迭代的list值:1 / [1,1,1,0,0,1] / xrange(12)
    # data_format:对数据进行格式化 >表示大端模式, <表示小端模式, H表示unsigned short无符号整形(2字节), h表示short有符号整型(2字节), l表示long长整型(4字节), f表示float浮点型(4字节), d表示double双精度浮点型(8字节)
    # expected_length

    try:
        '''
        寄存器类型:线圈状态
        访问类型:读写
        功能码:0x01、0x05、0x0F
        '''

        '''
        0x05功能码:写线圈状态为 开ON(0xff00)/关OFF(0), output_value不为0时都会置为0xff00
        ON的output_value可以设置为 0xff00、True、非0值; OFF的output_value 可以设置为 0x0000、False、0
        返回结果:tuple(地址, 值) ,写成功:如写入开则返回0xff00的十进制格式65280,写入关则返回0x0000的十进制格式0
        '''
        ''' 0x05功能码: 写单个线圈状态 ON '''
        single_coil_value = master.execute(slave=1, function_code=cst.WRITE_SINGLE_COIL, starting_address=0, output_value=1)     # 写单个线圈状态为 ON
        print('0x05 WRITE_SIGNLE_COIL: ', single_coil_value)

        ''' 0x01功能码:读线圈状态 '''
        coils_value = master.execute(slave=1, function_code=cst.READ_COILS, starting_address=0, quantity_of_x=1)    # 读线圈状态
        print('0x01 READ_COILS: ', coils_value)

        ''' 0x05功能码: 写单个线圈状态 OFF '''
        single_coil_value = master.execute(slave=1, function_code=cst.WRITE_SINGLE_COIL, starting_address=1, output_value=0)    # 写单个线圈状态为 OFF
        print('0x05 WRITE_SIGNLE_COIL: ', single_coil_value)
        coils_value = master.execute(slave=1, function_code=cst.READ_COILS, starting_address=1, quantity_of_x=1)    # 读线圈状态
        print('0x01 READ_COILS: ', coils_value)

        ''' 0x0F功能码:写多个线圈状态 '''
        multiple_coils_value = master.execute(slave=1, function_code=cst.WRITE_MULTIPLE_COILS, starting_address=2, quantity_of_x=4, output_value=[1, 1, 1, 1])  # 写多个线圈
        print('0x0F WRITE_COILS_REGISTER: ', multiple_coils_value)
        coils_value = master.execute(slave=1, function_code=cst.READ_COILS, starting_address=2, quantity_of_x=4)    # 读线圈状态
        print('0x01 READ_COILS: ', coils_value)

        '''
        寄存器类型:离散输入状态
        访问类型:只读
        功能码:0x02
        '''
        # 0x02功能码:读离散输入状态
        discrete_value = master.execute(slave=1, function_code=cst.READ_DISCRETE_INPUTS, starting_address=0, quantity_of_x=5)
        print('0x02 READ_DISCRETE_INPUTS: ', discrete_value)

        '''
        寄存器类型:输入寄存器
        访问类型:只读
        功能码:0x04
        '''
        # 0x04功能码:读输入寄存器
        input_value = master.execute(slave=1, function_code=cst.READ_INPUT_REGISTERS, starting_address=0, quantity_of_x=5)
        print('0x04 READ_INPUT_REGISTERS: ', input_value)

        '''
        寄存器类型:保持寄存器
        访问类型:读写
        功能码:0x03、0x06、0x10
        '''
        # 0x06功能码:写单个保持寄存器
        single_register_value = master.execute(slave=1, function_code=cst.WRITE_SINGLE_REGISTER, starting_address=0, output_value=666)
        print('0x06 WRITE_SINGLE_REGISTER: ', single_register_value)

        # 0x03功能码:读保持寄存器
        holding_value = master.execute(slave=1, function_code=cst.READ_HOLDING_REGISTERS, starting_address=0, quantity_of_x=1)
        print('0x03 READ_HOLDING_REGISTERS: ', holding_value)

        # 0x10功能码:写多个保持寄存器
        multiple_registers_value = master.execute(slave=1, function_code=cst.WRITE_MULTIPLE_REGISTERS, starting_address=1, quantity_of_x=3, output_value=[777, 777, 777])
        print('0x10 WRITE_MULTIPLE_REGISTERS: ', multiple_registers_value)
        holding_value = master.execute(slave=1, function_code=cst.READ_HOLDING_REGISTERS, starting_address=1, quantity_of_x=3)
        print('0x03 READ_HOLDING_REGISTERS: ', holding_value)


        # 数据类型
        # 写单个寄存器:无符号整数
        single_register_value = master.execute(slave=1, function_code=cst.WRITE_SINGLE_REGISTER, starting_address=0, output_value=4097)
        print('0x06 WRITE_SINGLE_REGISTER: ', single_register_value)
        # 写单个寄存器:有符号整数
        single_register_value = master.execute(slave=1, function_code=cst.WRITE_SINGLE_REGISTER, starting_address=1, output_value=-1234)
        print('0x06 WRITE_SINGLE_REGISTER: ', single_register_value)
        # 写多个寄存器:有符号整数 (根据列表长度来判读写入个数)
        multiple_registers_value = master.execute(slave=1, function_code=cst.WRITE_MULTIPLE_REGISTERS, starting_address=2, output_value=[1, -2], data_format='>hh')
        print('0x10 WRITE_MULTIPLE_REGISTERS: ', multiple_registers_value)
        # 读寄存器
        holding_value = master.execute(slave=1, function_code=cst.READ_HOLDING_REGISTERS, starting_address=0, quantity_of_x=4, data_format='>hhhh')
        print('0x03 READ_HOLDING_REGISTERS: ', holding_value)

        # 写多个寄存器: 浮点数float(float长度为4个字节,占用2个寄存器)
        # 起始地址为8的保持寄存器,操作寄存器个数为 4 ,一个浮点数float 占两个寄存器;
        # 写浮点数时一定要加 data_format 参数,两个ff 表示要写入两个浮点数,以此类推
        # 我这里模拟的是大端模式,具体可参考 struct 用法。和数据源保持一致即可。 <表示小端,>表示大端
        multiple_registers_value = master.execute(slave=1, function_code=cst.WRITE_MULTIPLE_REGISTERS, starting_address=8, output_value=[1.0, -6.4], data_format='>ff')
        print('0x10 WRITE_MULTIPLE_REGISTERS: ', multiple_registers_value)
        # 读对应的 4个寄存器(2个float),指定数据格式
        holding_value = master.execute(slave=1, function_code=cst.READ_HOLDING_REGISTERS, starting_address=8, quantity_of_x=4, data_format='>ff')
        print('0x03 READ_HOLDING_REGISTERS: ', holding_value)

        # 写多个寄存器:长整型数据long(long长度为4字节,占用2个寄存器)
        multiple_registers_value = master.execute(slave=1, function_code=cst.WRITE_MULTIPLE_REGISTERS, starting_address=12, output_value=[111111, -222222], data_format='>ll')
        print('0x10 WRITE_MULTIPLE_REGISTERS: ', multiple_registers_value)
        # 读对应的 4个寄存器(2个double),指定数据格式
        holding_value = master.execute(slave=1, function_code=cst.READ_HOLDING_REGISTERS, starting_address=12, quantity_of_x=4, data_format='>ll')
        print('0x03 READ_HOLDING_REGISTERS: ', holding_value)

        # 写多个寄存器:双精度浮点数double(double长度为8个字节,占用4个寄存器)
        multiple_registers_value = master.execute(slave=1, function_code=cst.WRITE_MULTIPLE_REGISTERS, starting_address=16, output_value=[1, -6.4], data_format='>dd')
        print('0x10 WRITE_MULTIPLE_REGISTERS: ', multiple_registers_value)
        # 读对应的 4个寄存器(2个double),指定数据格式
        holding_value = master.execute(slave=1, function_code=cst.READ_HOLDING_REGISTERS, starting_address=16, quantity_of_x=8, data_format='>dd')
        print('0x03 READ_HOLDING_REGISTERS: ', holding_value)
    except Exception as e:
        print('error: %s' % e)

使用 Python 通过 ModbusTCP 连接 PLC(不限品牌 含示例程序) 通过本文的学习,读者将能够掌握使用 Python 与 PLC 进行数据交互的基本技巧,进一步开发出更加智能和灵活的工控系统。通过几行简洁的 Python 代码,我们就可以实现对 PLC 的读写操作,从而实现设备的控制和数据采集。例如,在生产过程中,您可以通过与 PLC 交互来实现批次切换、产品跟踪、设备故障检测和处理等功能,从而提高生产线的效率和灵活性。因此,我们还将提醒读者在使用 Python 连接 PLC 时,注意网络安全风险,并妥善处理异常情况,以确保系统的可靠性和稳定性。 阅读详情

相关推荐

python 实现Modebus 通信(pyModbusTCP )

尽管python 并不实现实时控制应用程序,但是它编写程序实在是太方便了。至少在程序快速成型和验证过程中可以使用Python 来实现,另一方面,Python 强大的数值计算和图形显示能力也能够实现modbus 设备的远程监控,数据采集,甚至AI 训练。注意的是 auto_open和auto_close两个标记,它指明每次请求modbusTCP 时是否会自动打开和关闭TCP/IP 连接。如果auto_close=True 表示每次都会自动关闭连接,经测试,它会引起2秒中的延时。

姚家湾博客 9075

python玩转modbus

python玩转modbus 1. modbus协议简介 Modbus协议是一项应用层报文传输协议,包括ASCII / RTU / TCP三种报文类型,协议本身不定义物理层,只定义了控制器能够认识和使用的消息结构,而不管消息是经过何种网络进行通信的。 标准的Modbus协议物理层接口主要有RS232 / RS422 / RS485和以太网。采用Master/Slave主从方式通信 关于modbus协议更多更详细的介绍,可自行查阅 2. 环境配置 py3 python 目前主流使用操作modbus协议的库有三

pista的博客 3万+

ModbusTCP协议详解:新手教程之网络配置步骤

深入解析modbustcp协议详解的核心要点,手把手教你完成网络配置步骤,帮助初学者快速掌握通信设置与设备连接,轻松实现工业自动化通信。

weixin_35949153的博客 643

Modbus协议与Python

使用python建立modbus通讯,讲解modbus基本原理,如何使用python搭建从站与主站,如何进行对浮点数进行读写。

weixin_46184311的博客 5068

Python使用Modbus RTU发送数据的技术性指南

Modbus RTU是一种基于串行通信的Modbus协议,其数据帧以字节为单位进行传输。每个数据帧包括设备地址、功能码、数据以及校验码等部分。与Modbus TCP不同,Modbus RTU没有明确的开始和结束标记,而是通过帧间隔(至少3.5个字符时间)来区分不同的数据帧。Pymodbus是一个纯Python实现的Modbus协议栈,支持Modbus ASCII、Modbus RTU和Modbus TCP三种通信方式。它提供了丰富的API,使得Python开发者能够轻松地实现Modbus客户端和服务器功能。

这家伙很懒,什么都没有留下 2462

利用ANSYS随机振动分析功能实现随机疲劳分析

本文介绍了ANSYS随机振动分析功能,以及利用该功能,按照Steinberg提出的基于高斯分布和Miner线性累计损伤定律的三区间法进行ANSYS随机疲劳计算的具体过程。在工程应用中,汽车、飞行器、船舶以及其它各种机械或零部件,大多是在随机载荷作用下工作,当它们承受的应力水平较高,工作达到一定时间后,经常会突然发生随机疲劳破坏,往往造成灾难性的后果。因此,预测结构或零部件的随机疲劳寿命是非常有必要的。在工程界,疲劳计算广泛采用名义应力法,即以S-N曲线为依据进行寿命估算的方法,可以直接得到总寿命。

qq_38220914的博客 7611

modbus python开发(一)

python开发modbus实例记录 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言从不知道modbus是什么,到独立开发出来可以使用的modbus协议,从无到有、从0到1的一点点记录,希望能给像我一样的小白一点启示,花一点读一篇文章能够节约自己开发modbus的时间。愿你粗略读,仔细想,慢慢写程序,早日完成项目。0 编程基础1、modbus初识1.1 modbus协议与串口通讯的区别2 modbus编程2.1 modbus编程初步实验2.2 modbus slave工具

qq_38211710的博客 5632

车辆TBOX科普 第7次 TBOX技术深度解析:硬件架构与核心组件详解

摘要: TBOX(车载远程信息处理单元)是智能网联汽车的核心组件,承担数据采集、通信连接与安全交互等关键功能。其硬件架构以主控单元为核心,采用ARM架构处理器(如NXP i.MX系列)实现高效能低功耗处理,搭配DDR4/LPDDR5内存保障性能,eMMC/UFS存储确保数据可靠性。设计中需平衡车规级可靠性(AEC-Q100)、EMC兼容性及成本控制,同时集成通信、定位与安全模块。未来趋势聚焦异构计算、先进制程及功能安全(ASIL-D)与信息安全融合,推动TBOX向边缘计算节点演进。该技术是汽车智能化转型的重

IT深耕十余载,大道之简 861

基于python的modbus协议编程_基于Python的ModbusTCP客户端实现

Modbus协议是由Modicon公司(现在的施耐德电气Schneider Electric)推出,主要建立在物理串口、以太网TCP/IP层之上,目前已经成为工业领域通信协议的业界标准,广泛应用在工业电子设备之间的互联。Modbus Poll和Modbus Slave是两款非常流行的Modbus设备仿真软件,支持Modbus RTU/ASCII和Modbus TCP/IP协议 ,经常用于测试和调试...

weixin_39939661的博客 255

MTK平台高效部署Qwen2.5大模型:从转换到推理全流程解析

本文详细解析了在MTK平台上高效部署Qwen2.5大模型的全流程,涵盖从环境准备、模型转换与量化,到编译部署与上机推理。重点介绍了如何利用MTK GAI部署工具包进行模型转换和量化,以适配MTK硬件,并最终在设备上成功运行Qwen2.5模型,为边缘侧AI应用提供实践指南。

weixin_29041195的博客 508

投研必备工具:Wind(万得)数据库快速入门

Wind数据库对于金融从业者来说是必不可少的一个软件,本文主要介绍了股票和债券的信息查找,帮助后续对数据进行分析,开始学习吧!

weixin_56581108的博客 10万+

python语言编写的modbus协议_基于Python的ModbusTCP客户端实现

Modbus协议是由Modicon公司(现在的施耐德电气Schneider Electric)推出,主要建立在物理串口、以太网TCP/IP层之上,目前已经成为工业领域通信协议的业界标准,广泛应用在工业电子设备之间的互联。Modbus Poll和Modbus Slave是两款非常流行的Modbus设备仿真软件,支持Modbus RTU/ASCII和Modbus TCP/IP协议 ,经常用于测试和调试...

weixin_39763953的博客 1145

爬取百度图片

最开始,我们想要爬取图片,首先需要打开百度图库,然后在搜索栏中输入自己想要的图片(比如说壁纸)。接着右键检查,点击网络:起初可能没有名称信息,刷新界面就可以了。打开信息,查看标头内容可以看到请求URL为:复制这串URL,然后在浏览器中打开这个就是我们搜索的壁纸图片的网页内容。怎么找到图片的URL呢?在上述内容中,找到data,可以发现里面每隔一个aiEditData,下面代码的形式是一样的,就相当于一张图片。

weixin_54143563的博客 1942

客户端 实现_基于Python的ModbusTCP客户端实现

基于Python的ModbusTCP客户端实现Modbus协议是由Modicon公司(现在的施耐德电气Schneider Electric)推出,主要建立在物理串口、以太网TCP/IP层之上,目前已经成为工业领域通信协议的业界标准,广泛应用在工业电子设备之间的互联。Modbus Poll和Modbus Slave是两款非常流行的Modbus设备仿真软件,支持Modbus RTU/ASCII和Mod...

weixin_26937243的博客 570

P+F--r2000激光雷达slam技术实现

P+F--r2000激光雷达slam技术实现

majingming123的博客 1668

基于STM32与FPGA的数据采集系统的设计与实现

数据采集系统在现代工程中起着至关重要的作用,用于实时获取和处理各种传感器或外部设备的数据。在本文中,我们将探讨如何基于STM32微控制器和FPGA(现场可编程门阵列)实现一个高效的数据采集系统。我们可以使用STM32的UART、SPI或I2C接口与各种传感器或外部设备进行通信,并通过GPIO口实现控制功能。在硬件连接完成后,我们可以通过STM32控制FPGA的配置和数据传输。STM32作为主控单元负责与外部设备进行通信和数据处理,而FPGA则用于高速数据采集和实时处理。具体的通信协议取决于连接的设备类型。

UbiSqlserver的博客 1797

基于Python的ModbusTCP客户端实现

Modbus协议是由Modicon公司(现在的施耐德电气Schneider Electric)推出,主要建立在物理串口、以太网TCP/IP层之上,目前已经成为工业领域通信协议的业界标准,广泛应用在工业电子设备之间的互联。Modbus Poll和Modbus Slave是两款非常流行的Modbus设备仿真软件,支持Modbus RTU/ASCII和Modbus TCP/IP协议 ,经常用于测试和调试...

weixin_34184561的博客 1471

Matlab 轴承信号仿真+分析

文章目录项目说明1、信号仿真1.1 仿真公式1.2 信号参数设置1.3 代码实现2、仿真信号分析2.1 小波变换2.2 快速谱峭度 项目说明 本文主要解决两个问题: 1、仿真包含周期性冲击信号、随机干扰冲击信号、调制干扰信号以及随机噪声四个成分的故障轴承信号; 2、使用小波变换以及快速谱峭度对该仿真信号进行分析。 1、信号仿真 1.1 仿真公式 这里的仿真信号公式主要参考了包文杰学者的硕士论文《加权谱峭度故障诊断方法研究与应用》,列举公式如下: 周期性冲击信号仿真 随机干扰冲击信号仿真 调制

cocofisher的博客 9267

三菱FX5U ModbusTCP通讯调试:从IP冲突到实战

工业以太网通讯正成为产线设备互联的标配,其稳定运行高度依赖IP网络的合理规划与配置。ModbusTCP作为应用最广泛的开放式工业协议,凭借简单直接的报文结构,在PLC、上位机与伺服驱动器之间承担着数据交互的关键角色。然而在现场调试中,IP地址冲突、端口占用、字节序混乱等基础网络问题往往比想象中更隐蔽,成为通讯失败的常见元凶。以三菱FX5U系列PLC为例,从最易踩坑的IP冲突排查入手,系统梳理GX Works3组态步骤、Modbus Poll连接验证、D寄存器地址映射及字节序匹配等核心技术点,并延伸到与伺服驱

weixin_26918763的博客 205

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

用Python实现ModbusTcp协议

用Python实现ModbusTcp协议的客户端,读取数据。

silencestarsky的博客 2万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: route基础及Linux、Windows环境下的配置
下一篇: ubuntu vim 不能正常显示中文的解决方法
WonderThink
博客等级 码龄9年 112粉丝 43原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值