应用例程:基于CAN的MODBUS通讯实现PLC的相互连接


基本信息

通过两块STM32F103RCT6核心板,演示如何通过基于CAN的MODBUS通讯进行数据的发送与接收。核心板B采集电位器的数据,转换为电压后,通过CAN发送到核心板A,核心板A接收到数据后,将数据通过OLED屏显示出来。

视频下载

暂无

实验硬件

STM32F103RCT6核心板(2块)[ 购买 ]

CH340E通讯小板(2块)[ 购买 ]

Micro-USB通讯线(2根)[ 购买 ]

OLED屏SSD1306(1块)[ 购买 ]

可调电位器模块(1块)[ 购买 ]

CAN通讯模块(2块)[ 购买 ]

电路参考

  • CH340E通讯小板A通过Micro-USB通讯线到连接电脑。
  • CH340E通讯小板A连接STM32F103xC核心板A
    CH340E通讯小板AGND----GNDP4端子STM32F103xC核心板A
    +5V----5V
    TXD----RX
    RXD----TX
  • CH340E通讯小板B通过Micro-USB通讯线到连接电脑。
  • CH340E通讯小板B连接STM32F103xC核心板B
    CH340E通讯小板BGND----GNDP4端子STM32F103xC核心板B
    +5V----5V
    TXD----RX
    RXD----TX
  • OLED屏插入STM32F103xC核心板A的P5端子。
    OLED屏SSD1306GND----GNDP5端子STM32F103xC核心板A
    VCC----V3
    D0----PB3
    D1----PB5
    RES----PD2
    DC----PA15
    CS----PC12
  • 可调电位器模块连接STM32F103xC核心板B
    可调电位器模块OUT----PA5P1端子STM32F103xC核心板B
    VCC----V3P3端子
    GND----GND
  • CAN通讯模块A连接STM32F103xC核心板A
    CAN通讯模块AVCC----V5P1端子STM32F103xC核心板A
    TX----PB9P2端子
    RX----PB8
    GND----GNDP1端子
  • CAN通讯模块B连接STM32F103xC核心板B
    CAN通讯模块BVCC----V5P1端子STM32F103xC核心板B
    TX----PB9P2端子
    RX----PB8
    GND----GNDP1端子
  • CAN通讯模块A连接CAN通讯模块B
    CAN通讯模块ACANH----CANHCAN通讯模块B
    CANL----CANL

关键配置说明

为了简化,这里STM32F103xC核心板A与核心板B采用同一套硬件配置。

添加Can蓝图,在蓝图中添加CAN通讯驱动管理模块Can、CAN通讯底层模块CAN1_CanL、CAN通讯底层实现模块CAN_CanLI。
选择模块CAN1_CanL,确认通讯使用的单片机管脚为PB9(TX)、PB8(RX)。

选择模块Can,在配置节点Controller中,添加控制器Controller0,使用的底层实现为CAN1_CanL。在确认下默认的总线波特率是否为500K。

在Modbus的下级添加模块Can_ModbusL。Can_ModbusL的Port中添加Port0,控制器选择前面配置的Controller0。

在Modbus的Port中添加Port1,Port1的Module指定为Can_ModbusL,Port指定为Port0。

添加Modbus蓝图,这样在梯形图中可以调用Modbus指令发起主站通讯:

A/D转换器、OLED屏的配置可以参考以下两个例程:

应用程序

梯形图(核心板A,接收并显示)

NETWORK 0 使能CAN通讯Modbus主站与从站,设置本站站号为4:

NETWORK 1 获取CAN通讯Modbus从站状态:

NETWORK 2 通讯过来的数据写入VW20供液晶屏显示:

NETWORK 3 通讯状态统计,转换成字供液晶屏显示:

液晶屏配置(核心板A,接收并显示)

梯形图(核心板B,采集并发送)

NETWORK 0 使能CAN通讯Modbus主站与从站,设置本站站号为4:

NETWORK 1 获取CAN通讯Modbus从站状态:

NETWORK 2 通讯过来的数据写入VW20供液晶屏显示:

NETWORK 3 通讯状态统计,转换成字供液晶屏显示:

实验步骤

  • 将配置上传到服务器,固件下载到STM32F103xC核心板A和B后,将梯形图A和B也分别下载到核心板A和B,电位器保持不动时,可以看到核心板B定时向核心板A发送数据。扭动电位器时,核心板A上显示的电压立即变化。

指令说明

相关下载