0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样将ESP32处理器编程为ModbusTCPMaster

454398 来源:网络整理 作者:佚名 2019-11-05 16:50 次阅读

步骤1:下载并启动Modbus TCP从站模拟

从http://www.modbusdriver.com/diagslave.html下载 Modbus从站模拟器。

然后打开用于Linux操作系统的下载的存档和解压缩版本。

使用 -p 参数从控制台运行程序:

。/diagslave -p

是Modbus Slave服务器将在其中运行的端口。对于Modbus协议,默认情况下为502,但是您可以使用其他协议。

在Linux以下1024端口中,常规用户(不是root特权)运行的程序无法使用。

记住您正在使用的端口。

步骤2:准备将计算机连接到设备

您将需要一些程序以便与设备建立连接并向其发送文件。

安装Python环境和pip(如果您没有):

apt-get install python3

apt-get install python3-dev

curl “https://bootstrap.pypa.io/get-pip.py” -o “get-pip.py”

python3 get-pip.py

安装picocom:

apt-get install picocom

需要此程序才能连接到设备并在设备上执行命令。

安装mpfshell:

pip install mpfshell

此程序允许您发送文件添加到设备。

您也可以从源代码安装它。请参阅此页面:https://github.com/wendlers/mpfshell

步骤3:准备设备并连接到设备

要将 Moduino 或 Pycom 设备连接到PC,您需要 RS-232/RS-485端口或转换器。检查设备的版本(使用的端口类型)并找到合适的端口或转换器。

将设备连接到PC

然后将电源连接到其上

将设备连接到PC,然后将电源连接到PC。您还可以将以太网电缆连接到Moduino ESP32(如果具有该端口)。

连接应与上面的照片类似。

查找端口的路径,用于设备连接。例如: /dev/ttyS1 , /dev/ttyUSB0 》。

对于USB转换器,路径将包含 USB 字。

您可以使用picocom程序连接到设备:

picocom /dev/ttyUSB0 -b 115200

设备的命令提示符类似于以下图像之一。

Moduino ESP32:请参阅此处

Moduino Pycom:请参见此处

第4步:上传Modbus主库

https://github.com。 com/pycom/pycom-modbus/要与Modbus从站通信,您需要适当的库。 Pycom的库与Moduino不兼容。检查符合您设备的说明。

在发送文件之前关闭picocom :按 Ctrl + A ,然后按 Ctrl + X 键。

uModBus 库,用于 Moduino ESP32 ,该库基于Moduino Pycom的pycom-modbus库。修改为可在常规ESP32设备上使用。它还为连接器类提供了其他 close() 方法。

1)Moduino ESP32

从https://github.com/techbase123/micropython-modbus下载库。解压缩存档并将所有4个文件发送到Moduino设备。

使用 mpfshell 上传它们。在带有该文件的目录中运行该程序。

通过执行以下命令连接到设备: THIS

ttyUSB0 是串行端口的名称,其中设备已连接。

使用以下命令将目录更改为 /flash/lib :

cd /flash/lib

放入所有文件使用以下命令:

put uModBusConst.py

put uModBusFunctions.py

put uModBusTCP.py

put uModBusSerial.py

示例

然后使用 exit 命令退出控制台并使用 重置 按钮重新启动设备。

2)Moduino Pycom

从以下位置下载库https://github.com/pycom/pycom-modbus/。解压缩存档并将uModbus目录的内容发送到设备。使用mpfshell上载它们。在带有该文件的目录中运行该程序。

通过执行以下命令连接到设备:

open ttyUSB0

ttyUSB0 是连接设备的串行端口的名称。

将目录更改为 /flash/lib ,创建uModbus目录并使用以下命令输入:

cd /flash/lib

md uModbus

cd uModbus

使用以下命令放入所有文件:

put const.py

put functions.py

put tcp.py

put serial.py

然后使用 exit 命令退出控制台,并通过 重置 重启设备strong》按钮。

示例

第5步:连接到网络

Moduino和Pycom之间建立连接的命令有所不同。

使用picocom连接到设备以执行适当的命令。您可以通过有线或无线方式将Moduino设备连接到网络。以下示例假定您的网络具有可用的DHCP服务器。

在其他情况下,设备将无法获得IP地址。每个Moduino均提供WiFi支持。

1)并非所有设备都具有以太网端口。

1)Moduino ESP32

连接到WiFi

在设备上执行以下命令:

from netWiFi import netWiFi

wifi = netWiFi(netWiFi.WIFI_STA, ‘ESSID’, ‘PASS’)

wifi.start()

用您的WiFi网络的名称替换 ESSID ,并 PASS (带有密码)。

执行 start() 一段时间后,您应该获得

连接到以太网络

使用以太网电缆将设备连接到有线网络。

然后执行以下命令:

from netETH import netETH

eth = netETH()

eth.start()

执行 start() 一段时间后,您应该获得分配给设备的IP地址。

2)Moduino Pycom

连接到WiFi

在设备上执行以下命令:

from network import WLAN

wlan = WLAN(mode=WLAN.STA)

nets = wlan.scan()

for net in nets:

if net.ssid == ‘ESSID’:

print(‘Network found!’)

wlan.connect(net.ssid, auth=(net.sec, ‘PASS’), timeout=5000)

while not wlan.isconnected():

machine.idle()

print(‘WLAN connection succeeded!’)

break

将 ESSID 替换为您的WiFi网络的名称,并 PASS 带有密码。

步骤6:初始化与Modbus从站的通信

两个设备的Modbus主站库相似

它们的初始化方式不同。

1)在Moduino ESP32上初始化uModBus

执行:

from uModBusTCP import uModBusTCP as TCP

2)在Pycom上初始化uModBus

执行:

from uModbus.tcp import TCP

打开连接

然后通过以下方式打开连接:

modbus=TCP(‘IP’, PORT, 60)

其中:

IP-使用Modbus从站模拟器的PC的ip地址

PORT-Modbus Slave的端口

60超时

如果在执行读/写命令期间发生以下错误:示例

为 Moduino ESP32执行:

modbus.close()

用于 Moduino Pycom :

modbus._sock.close()

,然后重新创建连接:

modbus=TCP(‘IP’, PORT, 60)

这对于在重新创建连接之前关闭套接字很重要。

设备限制了可用数量

第7步:读取和写入寄存器

Modbus支持几种读取和写入寄存器的功能。

uModBus库具有每个函数的方法:

read_coils

read_discrete_inputs

read_holding_registers

read_input_registers

write_single_coil

write_single_register

首先,让我们写一些值。

1)写线圈(func:5 )

在从站1中将1的值写入200寄存器中。

modbus.write_single_coil(1, 200, 0xFF00)

在我们的示例1中,第一个参数是从站ID。

第二个是寄存器号,第三个是值。对于1,您必须在此处放置 0xFF00 。从从站1将0写入201寄存器:

modbus.write_single_coil(1, 201, 0)

此方法仅允许写入布尔值:0或1。

2)写入寄存器(函数: 6)

现在将一些整数值写入几个寄存器。

从从站1将有符号的111值写入寄存器100:

modbus.write_single_register(1, 100, 111, True)

第一个参数是从设备ID,第二个寄存器号,第三个是新值。

最后一个参数定义是否应将值设置为有符号数。其默认值为True。

从从站1将带符号的-457值写入101寄存器:

modbus.write_single_register(1, 101, -457)

从从站将未签名的50值写入100寄存器3:

modbus.write_single_register(3, 100, 50, False)

此方法允许将整数值写入单个寄存器。

单个寄存器可以包含16位值。

方法返回 True 是有效的输入值,而 False 是无效的值。即使无效(对于寄存器来说太大),也会写入值

3)读取线圈/离散输入

现在可以读取写入的布尔值。要读取具有功能1的寄存器,请读取 线圈 ,执行:

modbus.read_coils(slaveId, register, count)[0:count]

要读取具有功能1的寄存器,请读取 离散输入 ,执行:

modbus.read_discrete_inputs(slaveId, register, count)[0:count]

其中:

slave-id-虚拟奴隶的ID(奴隶模拟器接受所有有效ID)

寄存器-读取的寄存器编号

count-待读取的寄存器数量(在两个位置都放入所需的数量)

这些方法返回具有布尔值的数组。每个值对应于每个寄存器。

需要以下片段: [0:count] ,因为此方法返回的值多于计数。它总是返回可以被8整除的值的数量。其他值是False,并且不对应于任何寄存器。

使用两种方法读取布尔值:

modbus.read_coils(1,200,2)[0:2]

modbus.read_discrete_inputs(1,200,2)[0:2]

结果将如下所示:示例

真 是指1个值, 假 设为0。

4)读取寄存器

现在从用6个函数编写的寄存器中读取值。

要读取具有功能3的寄存器 读取保持寄存器 ,请执行:

modbus.read_holding_registers(slaveId, register, count, signed=True)

要读取具有功能4的寄存器 读取输入寄存器 ,执行:

modbus.read_input_registers(slaveId, register, count, signed=True)

其中:

从站标识-虚拟从站的标识

寄存器-读取的寄存器编号

count-待读取的寄存器数量

带符号-指示是否应将读取值视为带符号的编号。默认状态:True

返回值是具有所需寄存器数量的元组。

读取先前设置的寄存器:

modbus.read_holding_registers(1,100,2,True)

modbus.read_input_registers(1,100,2,True)

modbus.read_holding_registers(3,100,1,False)

modbus.read_input_registers(3,100,1,False)

责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    88

    文章

    3578

    浏览量

    93551
  • ESP32
    +关注

    关注

    17

    文章

    953

    浏览量

    17032
收藏 人收藏

    评论

    相关推荐

    SK-AM68处理器入门套件用户指南

    电子发烧友网站提供《SK-AM68处理器入门套件用户指南.pdf》资料免费下载
    发表于 11-13 15:02 0次下载
    SK-AM68<b class='flag-5'>处理器</b>入门套件用户指南

    AM69处理器入门套件用户指南

    电子发烧友网站提供《AM69处理器入门套件用户指南.pdf》资料免费下载
    发表于 11-13 08:34 0次下载
    AM69<b class='flag-5'>处理器</b>入门套件用户指南

    ADS8361与TMS470处理器的接口

    电子发烧友网站提供《ADS8361与TMS470处理器的接口.pdf》资料免费下载
    发表于 10-22 10:13 0次下载
    ADS8361与TMS470<b class='flag-5'>处理器</b>的接口

    ADS786x与TMS470处理器的接口

    电子发烧友网站提供《ADS786x与TMS470处理器的接口.pdf》资料免费下载
    发表于 10-22 10:11 0次下载
    ADS786x与TMS470<b class='flag-5'>处理器</b>的接口

    恩智浦i.MX8处理器的集成电源设计

    电子发烧友网站提供《恩智浦i.MX8处理器的集成电源设计.pdf》资料免费下载
    发表于 09-18 14:25 0次下载
    恩智浦i.MX8<b class='flag-5'>处理器</b>的集成电源设计

    基于全志V853处理器的智能辅助驾驶算法介绍

    全志V853处理器,是专为智慧视觉领域设计的AI处理器,配备了高效的NPU算力和丰富的外设接口,能够提供稳定的AI边缘计算支持;同时,基于V853处理器这一性能优势,全志还为客户提供了一整套完整的智能辅助驾驶算法。
    的头像 发表于 09-14 09:23 592次阅读
    基于全志V853<b class='flag-5'>处理器</b>的智能辅助驾驶算法介绍

    使用TPS6521815 PMICNXP i.MX 7处理器供电

    电子发烧友网站提供《使用TPS6521815 PMICNXP i.MX 7处理器供电.pdf》资料免费下载
    发表于 09-13 09:40 0次下载
    使用TPS6521815 PMIC<b class='flag-5'>为</b>NXP i.MX 7<b class='flag-5'>处理器</b>供电

    esp8266和esp32区别是什么

    以下是关于ESP8266和ESP32的主要区别: 处理器和架构 : ESP8266 :使用一个Tensilica L106 80MHz的处理器
    的头像 发表于 08-19 18:16 4040次阅读

    esp32用什么软件编程

    。 概述 ESP32具有丰富的外设接口和灵活的编程方式,支持多种编程语言和开发环境。本文详细介绍ESP32
    的头像 发表于 08-19 17:24 2617次阅读

    ESP32-S3芯片赋能设备,打造智能交互新体验

    在物联网和人工智能(AI)技术融合的浪潮中,乐鑫ESP32-S3芯片以其卓越的性能和多功能性,成为智能家居和工业自动化领域的明星产品。ESP32-S3是一款基于XtensaLX7处理器的嵌入式系统级
    的头像 发表于 06-28 08:04 739次阅读
    <b class='flag-5'>ESP32</b>-S3芯片赋能设备,打造智能交互新体验

    RK3568处理器硬件设计的要点及注意事项

    电子发烧友网站提供《RK3568处理器硬件设计的要点及注意事项.pdf》资料免费下载
    发表于 06-11 11:48 1次下载

    适用于ARM Cortex®—A53处理器A53处理器和FPGA的集成电源管理IC TPS65220数据表

    电子发烧友网站提供《适用于ARM Cortex®—A53处理器A53处理器和FPGA的集成电源管理IC TPS65220数据表.pdf》资料免费下载
    发表于 03-27 10:04 0次下载
    适用于ARM Cortex®—A53<b class='flag-5'>处理器</b>A53<b class='flag-5'>处理器</b>和FPGA的集成电源管理IC TPS65220数据表

    M3芯片和i7处理器的区别

    M3芯片与i7处理器在多个方面存在显著差异。
    的头像 发表于 03-11 16:41 3484次阅读

    用了ESP32后,我的Arduino都积灰了,专为零基础新手准备的ESP32入门指南,为什么我不再使用Arduino

      认识ESP32 "ESP32,由Espressif打造,是一系列低成本、低功耗的SoC(System on a Chip)微控制,拥有Wi-Fi和蓝牙无线功能,以及强大的双核处理器
    的头像 发表于 12-12 15:48 6733次阅读
    用了<b class='flag-5'>ESP32</b>后,我的Arduino都积灰了,专为零基础新手准备的<b class='flag-5'>ESP32</b>入门指南,为什么我不再使用Arduino

    用了ESP32后,我的Arduino都积灰了,专为零基础新手准备的ESP32入门指南,为什么我不再使用Arduino

      认识ESP32 "ESP32,由Espressif打造,是一系列低成本、低功耗的SoC(System on a Chip)微控制,拥有Wi-Fi和蓝牙无线功能,以及强大的双核处理器
    的头像 发表于 11-20 11:20 1.7w次阅读
    用了<b class='flag-5'>ESP32</b>后,我的Arduino都积灰了,专为零基础新手准备的<b class='flag-5'>ESP32</b>入门指南,为什么我不再使用Arduino