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调试工具进行学习。
上位机效果图
目录│文件列表:
└ 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