【E1187】基于STM32F4的Modbus TCP上下位机通信项目

2021-09-14 08:11:40      索炜达电子      1217     

项目编号:E1187

文件大小:2M

源码说明:带中文注释

开发环境:C编译器

简要概述:

Modbus概述

-Modbus是一种串行通信工业协议,于1979年开发,旨在实现自动化设备之间的通信;

-Modbus协议可用于串口、以太网等通信链路;

-Modbus协议有ModbusRTU(二进制表示数据方式)和ModbusASCII(文本可读)两种通信格式,常用RTU格式;

-Modbus协议分主从,总线网络中只能有一个主,支持大约240从;

-在数据采集与监控系统中,Modbus常用来链接监控计算机和远程终端控制系统(RTU).

 

Modbus应用举例

1.电子秤

2.多功能数据采集仪

3.点阵显示系统

4.略

 

摘要

作为工业用协议,STM32的普及使得Modbus在各大工控产品上得到了最大限度的应用, 而在日常的教学中,并没有相关的案例(Demo)让初学者很好的去接触Modbus协议,网络上普遍是枯燥的Modbus原理讲解,相关书籍也是寥寥,目前市面上针对Modbus协议开发的书籍只有《Modbus软件开发实战》一书, 几乎是纯软件的Modbus编程和Modbus相关原理介绍,并没有涉及Modbus设备方面的开发介绍。

 

为了消除困扰,楼主将自己的STM32与LabVIEW上位机Modbus通信项目(Demo)开源,方便广大STM32爱好者更好地学习和开发Modbus相关产品。

 

项目简介

项目基于正点原子STM32F4探索者开发板和LabVIEW开发的上位机软件进行Modbus协议通信,项目采用TCP/IP通信方式,移植freeModbus协议到STM32,利用LabVIEW Modbus库,编写配套上位机读取开发板按键、AD值,并可通过上位机设置开发板LED、DAC状态。

 

 

功能简介

-线 圈     :led控制

-离散输入  :按键读取

-保持寄存器:ADC读取

-输入寄存器:DAC设置

 

注意事项

1.开发板与运行上位机的PC需要连入同一局域网;

2.编译代码前需要修改静态IP参数,需与您的局域网网段一致;

3.开发板需要插入LCD显示屏;

4.PC需要安装高于LabVIEW2013的开发环境,并将NI Modbus库解压到对应文件夹;

5.运行LabVIEW上位机前,填入开发板的静态IP;

6.不熟悉LabVIEW的同学可以使用ModbusPoll调试工具进行学习。

 

上位机效果图

【E1187】基于STM32F4的Modbus TCP上下位机通信项目

目录│文件列表:

 └ stm32f4_modbus_tcp

    ├ LabVIEW-TCP-Modbus-Demo

    │  │ ModbusTCP-Demo.vi

    │  └ SubVI

    │     │ DiscreteInputsReg.vi

    │     │ InputRegisters.vi

    │     │ WriteCoils.vi

    │     └ WriteMultipleReg.vi

    ├ STM32F4-FreeModBus-Lwip-TCP-uCOSII-Demo

    │  │ keilkilll.bat

    │  │ readme.txt

    │  ├ CORE

    │  │  │ core_cm4.h

    │  │  │ core_cm4_simd.h

    │  │  │ core_cmFunc.h

    │  │  │ core_cmInstr.h

    │  │  └ startup_stm32f40_41xxx.s

    │  ├ FreeModbusTCP

    │  │  ├ app

    │  │  │  │ user_mb_app.c

    │  │  │  └ user_mb_app.h

    │  │  ├ modbus

    │  │  │  │ mb.c

    │  │  │  ├ ascii

    │  │  │  │  │ mbascii.c

    │  │  │  │  └ mbascii.h

    │  │  │  ├ functions

    │  │  │  │  │ mbfunccoils.c

    │  │  │  │  │ mbfuncdiag.c

    │  │  │  │  │ mbfuncdisc.c

    │  │  │  │  │ mbfuncholding.c

    │  │  │  │  │ mbfuncinput.c

    │  │  │  │  │ mbfuncother.c

    │  │  │  │  └ mbutils.c

    │  │  │  ├ include

    │  │  │  │  │ mb.h

    │  │  │  │  │ mbconfig.h

    │  │  │  │  │ mbframe.h

    │  │  │  │  │ mbfunc.h

    │  │  │  │  │ mbport.h

    │  │  │  │  │ mbproto.h

    │  │  │  │  └ mbutils.h

    │  │  │  ├ rtu

    │  │  │  │  │ mbcrc.c

    │  │  │  │  │ mbcrc.h

    │  │  │  │  │ mbrtu.c

    │  │  │  │  └ mbrtu.h

    │  │  │  └ tcp

    │  │  │     │ mbtcp.c

    │  │  │     └ mbtcp.h

    │  │  └ port

    │  │     │ port.h

    │  │     │ portevent.c

    │  │     │ portother.c

    │  │     └ porttcp.c

    │  ├ FWLIB

    │  │  ├ STM32F4x7_ETH_Driver

    │  │  │  ├ inc

    │  │  │  │  │ stm32f4x7_eth.h

    │  │  │  │  └ stm32f4x7_eth_conf.h

    │  │  │  └ src

    │  │  │     └ stm32f4x7_eth.c

    │  │  └ STM32F4xx_StdPeriph_Driver

    │  │     ├ inc

    │  │     │  │ misc.h

    │  │     │  │ stm32f4xx_adc.h

    │  │     │  │ stm32f4xx_can.h

    │  │     │  │ stm32f4xx_crc.h

    │  │     │  │ stm32f4xx_cryp.h

    │  │     │  │ stm32f4xx_dac.h

    │  │     │  │ stm32f4xx_dbgmcu.h

    │  │     │  │ stm32f4xx_dcmi.h

    │  │     │  │ stm32f4xx_dma.h

    │  │     │  │ stm32f4xx_dma2d.h

    │  │     │  │ stm32f4xx_exti.h

    │  │     │  │ stm32f4xx_flash.h

    │  │     │  │ stm32f4xx_flash_ramfunc.h

    │  │     │  │ stm32f4xx_fmc.h

    │  │     │  │ stm32f4xx_fsmc.h

    │  │     │  │ stm32f4xx_gpio.h

    │  │     │  │ stm32f4xx_hash.h

    │  │     │  │ stm32f4xx_i2c.h

    │  │     │  │ stm32f4xx_iwdg.h

    │  │     │  │ stm32f4xx_ltdc.h

    │  │     │  │ stm32f4xx_pwr.h

    │  │     │  │ stm32f4xx_rcc.h

    │  │     │  │ stm32f4xx_rng.h

    │  │     │  │ stm32f4xx_rtc.h

    │  │     │  │ stm32f4xx_sai.h

    │  │     │  │ stm32f4xx_sdio.h

    │  │     │  │ stm32f4xx_spi.h

    │  │     │  │ stm32f4xx_syscfg.h

    │  │     │  │ stm32f4xx_tim.h

    │  │     │  │ stm32f4xx_usart.h

    │  │     │  └ stm32f4xx_wwdg.h

    │  │     └ src

    │  │        │ misc.c

    │  │        │ stm32f4xx_adc.c

    │  │        │ stm32f4xx_can.c

    │  │        │ stm32f4xx_crc.c

    │  │        │ stm32f4xx_cryp.c

    │  │        │ stm32f4xx_cryp_aes.c

    │  │        │ stm32f4xx_cryp_des.c

    │  │        │ stm32f4xx_cryp_tdes.c

    │  │        │ stm32f4xx_dac.c

    │  │        │ stm32f4xx_dbgmcu.c

    │  │        │ stm32f4xx_dcmi.c

    │  │        │ stm32f4xx_dma.c

    │  │        │ stm32f4xx_dma2d.c

    │  │        │ stm32f4xx_exti.c

    │  │        │ stm32f4xx_flash.c

    │  │        │ stm32f4xx_flash_ramfunc.c

    │  │        │ stm32f4xx_fmc.c

    │  │        │ stm32f4xx_fsmc.c

    │  │        │ stm32f4xx_gpio.c

    │  │        │ stm32f4xx_hash.c

    │  │        │ stm32f4xx_hash_md5.c

    │  │        │ stm32f4xx_hash_sha1.c

    │  │        │ stm32f4xx_i2c.c

    │  │        │ stm32f4xx_iwdg.c

    │  │        │ stm32f4xx_ltdc.c

    │  │        │ stm32f4xx_pwr.c

    │  │        │ stm32f4xx_rcc.c

    │  │        │ stm32f4xx_rng.c

    │  │        │ stm32f4xx_rtc.c

    │  │        │ stm32f4xx_sai.c

    │  │        │ stm32f4xx_sdio.c

    │  │        │ stm32f4xx_spi.c

    │  │        │ stm32f4xx_syscfg.c

    │  │        │ stm32f4xx_tim.c

    │  │        │ stm32f4xx_usart.c

    │  │        └ stm32f4xx_wwdg.c

    │  ├ HARDWARE

    │  │  ├ ADC

    │  │  │  │ adc.c

    │  │  │  └ adc.h

    │  │  ├ ADC3

    │  │  │  │ adc3.c

    │  │  │  └ adc3.h

    │  │  ├ BEEP

    │  │  │  │ beep.c

    │  │  │  └ beep.h

    │  │  ├ DAC

    │  │  │  │ dac.c

    │  │  │  └ dac.h

    │  │  ├ ETHERNET

    │  │  │  │ lan8720.c

    │  │  │  └ lan8720.h

    │  │  ├ KEY

    │  │  │  │ key.c

    │  │  │  └ key.h

    │  │  ├ LCD

    │  │  │  │ FONT.H

    │  │  │  │ lcd.c

    │  │  │  └ lcd.h

    │  │  ├ LED

    │  │  │  │ led.c

    │  │  │  └ led.h

    │  │  ├ LSENS

    │  │  │  │ lsens.c

    │  │  │  └ lsens.h

    │  │  ├ MALLOC

    │  │  │  │ malloc.c

    │  │  │  └ malloc.h

    │  │  ├ PWM_DAC

    │  │  │  │ pwmdac.c

    │  │  │  └ pwmdac.h

    │  │  ├ SRAM

    │  │  │  │ sram.c

    │  │  │  └ sram.h

    │  │  └ TIMER

    │  │     │ timer.c

    │  │     └ timer.h

    │  ├ LWIP

    │  │  ├ arch

    │  │  │  │ cc.h

    │  │  │  │ cpu.h

    │  │  │  │ perf.h

    │  │  │  │ sys_arch.c

    │  │  │  └ sys_arch.h

    │  │  ├ lwip-1.4.1

    │  │  │  │ CHANGELOG

    │  │  │  │ COPYING

    │  │  │  │ FILES

    │  │  │  │ README

    │  │  │  │ UPGRADING

    │  │  │  ├ doc

    │  │  │  │  │ contrib.txt

    │  │  │  │  │ FILES

    │  │  │  │  │ rawapi.txt

    │  │  │  │  │ savannah.txt

    │  │  │  │  │ snmp_agent.txt

    │  │  │  │  └ sys_arch.txt

    │  │  │  ├ src

    │  │  │  │  │ FILES

    │  │  │  │  ├ api

    │  │  │  │  │  │ api_lib.c

    │  │  │  │  │  │ api_msg.c

    │  │  │  │  │  │ err.c

    │  │  │  │  │  │ netbuf.c

    │  │  │  │  │  │ netdb.c

    │  │  │  │  │  │ netifapi.c

    │  │  │  │  │  │ sockets.c

    │  │  │  │  │  └ tcpip.c

    │  │  │  │  ├ core

    │  │  │  │  │  │ def.c

    │  │  │  │  │  │ dhcp.c

    │  │  │  │  │  │ dns.c

    │  │  │  │  │  │ init.c

    │  │  │  │  │  │ lwip_sys.c

    │  │  │  │  │  │ mem.c

    │  │  │  │  │  │ memp.c

    │  │  │  │  │  │ netif.c

    │  │  │  │  │  │ pbuf.c

    │  │  │  │  │  │ raw.c

    │  │  │  │  │  │ stats.c

    │  │  │  │  │  │ tcp.c

    │  │  │  │  │  │ tcp_in.c

    │  │  │  │  │  │ tcp_out.c

    │  │  │  │  │  │ timers.c

    │  │  │  │  │  │ udp.c

    │  │  │  │  │  ├ ipv4

    │  │  │  │  │  │  │ autoip.c

    │  │  │  │  │  │  │ icmp.c

    │  │  │  │  │  │  │ igmp.c

    │  │  │  │  │  │  │ inet.c

    │  │  │  │  │  │  │ inet_chksum.c

    │  │  │  │  │  │  │ ip.c

    │  │  │  │  │  │  │ ip_addr.c

    │  │  │  │  │  │  └ ip_frag.c

    │  │  │  │  │  ├ ipv6

    │  │  │  │  │  │  │ icmp6.c

    │  │  │  │  │  │  │ inet6.c

    │  │  │  │  │  │  │ ip6.c

    │  │  │  │  │  │  │ ip6_addr.c

    │  │  │  │  │  │  └ README

    │  │  │  │  │  └ snmp

    │  │  │  │  │     │ asn1_dec.c

    │  │  │  │  │     │ asn1_enc.c

    │  │  │  │  │     │ mib2.c

    │  │  │  │  │     │ mib_structs.c

    │  │  │  │  │     │ msg_in.c

    │  │  │  │  │     └ msg_out.c

    │  │  │  │  ├ include

    │  │  │  │  │  ├ ipv4

    │  │  │  │  │  │  └ lwip

    │  │  │  │  │  │     │ autoip.h

    │  │  │  │  │  │     │ icmp.h

    │  │  │  │  │  │     │ igmp.h

    │  │  │  │  │  │     │ inet.h

    │  │  │  │  │  │     │ inet_chksum.h

    │  │  │  │  │  │     │ ip.h

    │  │  │  │  │  │     │ ip_addr.h

    │  │  │  │  │  │     └ ip_frag.h

    │  │  │  │  │  ├ ipv6

    │  │  │  │  │  │  └ lwip

    │  │  │  │  │  │     │ icmp.h

    │  │  │  │  │  │     │ inet.h

    │  │  │  │  │  │     │ ip.h

    │  │  │  │  │  │     └ ip_addr.h

    │  │  │  │  │  ├ lwip

    │  │  │  │  │  │  │ api.h

    │  │  │  │  │  │  │ api_msg.h

    │  │  │  │  │  │  │ arch.h

    │  │  │  │  │  │  │ debug.h

    │  │  │  │  │  │  │ def.h

    │  │  │  │  │  │  │ dhcp.h

    │  │  │  │  │  │  │ dns.h

    │  │  │  │  │  │  │ err.h

    │  │  │  │  │  │  │ init.h

    │  │  │  │  │  │  │ lwip_sys.h

    │  │  │  │  │  │  │ mem.h

    │  │  │  │  │  │  │ memp.h

    │  │  │  │  │  │  │ memp_std.h

    │  │  │  │  │  │  │ netbuf.h

    │  │  │  │  │  │  │ netdb.h

    │  │  │  │  │  │  │ netif.h

    │  │  │  │  │  │  │ netifapi.h

    │  │  │  │  │  │  │ opt.h

    │  │  │  │  │  │  │ pbuf.h

    │  │  │  │  │  │  │ raw.h

    │  │  │  │  │  │  │ sio.h

    │  │  │  │  │  │  │ snmp.h

    │  │  │  │  │  │  │ snmp_asn1.h

    │  │  │  │  │  │  │ snmp_msg.h

    │  │  │  │  │  │  │ snmp_structs.h

    │  │  │  │  │  │  │ sockets.h

    │  │  │  │  │  │  │ stats.h

    │  │  │  │  │  │  │ tcp.h

    │  │  │  │  │  │  │ tcpip.h

    │  │  │  │  │  │  │ tcp_impl.h

    │  │  │  │  │  │  │ timers.h

    │  │  │  │  │  │  └ udp.h

    │  │  │  │  │  ├ netif

    │  │  │  │  │  │  │ etharp.h

    │  │  │  │  │  │  │ ethernetif.h

TAGModbus
  • 10 次
  • 1 分