使用蓝图手动配置一个最小系统(基于STM32F103RC)


通过蓝图选择驱动模块

打开软件KQD Designer,点击主工具条中的【设计】按钮,进入固件设计界面:

在设计工具条中,点击库边上的【更新】按钮,选择从服务器更新最新的固件信息。

更新过程中:

更新完成后,选择与最小系统板单片机匹配的驱动库:Mbear-M1-STM32F10x。

蓝图:最小内核系统

单击【添加】按钮,添加蓝图:Core - 最小系统模块

软件中会列出最小内核系统需要的所有模块,如果需要修改模块的实现和版本,先左键点击选择模块,然后再右键点弹出菜单,可以在菜单中选择模块的实现和版本。新建项目选择实现的最新版本即可,无需修改。

最小内核系统中列出的所有模块都必须使用,依次选择好实现和版本就完成了最小内核系统的模块选择。

蓝图:MODBUS协议

再次单击【添加】按钮,添加蓝图:Modbus - MODBUS (莫迪康)相关模块

添加蓝图MODBUS是因为PLC程序的下载、监控都是通过MODBUS协议来传输数据的,如果使用PLC系统进行应用程序的开发和调试,就必须选择一种MODBUS传输层实现。目前快驱动平台上的驱动支持以下MODBUS传输层实现:

  • 基于TTL、RS232、RS485的MODBUS-RTU实现。
  • 基于以太网、WiFi的MODBUS-TCP/IP实现。
  • 基于CAN的MODBUS-CAN实现(快驱动专用CAN传输层协议)。

因为最小系统板只能通过串口与电脑连接,这里我们先介绍怎么通过MODBUS-RTU实现连接,首先添加Modbus协议模块的实现与版本:

确定之后需要选择Modbus传输层模块ModbusL的实现方式,这里我们选择Rtu_ModbusL:

Rtu_ModbusL依赖于串口驱动模块Asc,因此必须确定一个Asc模块的实现和版本:

Asc可以管理多个串口通讯底层模块AscL。在单片机STM32F10x中,快驱动平台实现了基于USART1、USART2、USART3的串口通讯底层,还有一个基于USB虚拟串口的UsbVcp串口通讯底层,因为我们最小系统板连接的是USART1的PA9、PA10,因此我们这里选择USART1_AscL:

不同的串口有很多函数时复用的,快驱动平台将复用的函数打包到模块UART_AscLI。因此USART1_AscL依赖于串口通讯底层实现模块UART_AscLI,这里需要选择UART_AscLI的实现与版本。

Modbus协议需要读写PLC变量(标准的Modbus协议可以通过通讯指令读写PLC变量),因此依赖于变量管理模块Mb。

串口管理模块Asc需要配置串口的收发控制管脚(例如工作在RS485半双工通讯模式),因此依赖于Port、Dio模块;同时Asc串口模块需要定时器来对串口数据进行接收超时的判断(完成一帧数据的接收),因此也依赖于定时器管理模块Gpt。

将所有的依赖项实现与版本确定后,发现定时器管理模块Gpt有底层驱动GptL需要定义:

确定好GptL底层和GptLI底层实现实现后,便完成了MODBUS协议蓝图的所有驱动模块选择。

蓝图:PLC系统

再次单击【添加】按钮,添加蓝图:Fcc - PLC系统

首先是确认Fcc模块的版本:

Fcc可以管理若干Fe模块,Fe模块是PLC系统与其他驱动对接的接口。特殊PLC指令、用户系统块、I/O变量的映射都通过Fe模块来实现。因为最小系统核心板没有任何可用外设,因此不添加接口,仅保留Modbus_Fe即可:

PLC系统需要在单片机内部FLASH上存储梯形图数据,因此依赖于Fs模块,确定好Fs的实现后,就完成了PLC系统蓝图所有驱动模块选择。

在蓝图中配置驱动模块

点击设计工具条中的编译按钮,编译当前选择的驱动模块:

蓝图下方会出现选择模块的配置信息:

左边用于模块配置节点的选择,右边用于节点配置项的具体设置。

配置:项目(STM3210x)

选择最小系统模块蓝图,在蓝图中选择模块STM32F1xx,在配置节点中选择Main节点,可以在右边窗口查看具体设置。

项目说明
Device单片机具体型号,这里修改成STM32F103xC。
Core单片机的内核,STM32F103xC使用Cortex-M3指令集。此处为系统自动判断,不可被修改。
Family单片机的类型,STM32F103xC属于ST公司的STM32F1单片机类型。此处为系统自动判断,不可被修改。
Series单片机的系列,STM32F103xC属于ST公司的STM32F103xE单片机系列(High-Density Devices)。此处为系统自动判断,不可被修改。
Footprint单片机的封装形式,主要用于协助软件判断管脚是否可用。
HSE选择芯片使用的外部钟晶振的频率,这里使用默认值8MHz。
UseToolchain选择服务器在编译此固件时使用的编译器版本。

分别选择Main节点下面的App、User_BANK0、User_BANK1节点,设置每个段的FLASH和RAM的大小。

节点项目说明
App(系统固件,由服务器根据KQD Designer的配置生成)FlashSize128K系统固件分配的FLASH大小。
User_BANK0(梯形图、液晶屏组态等,由KQD Application Editor生成)FlashSize32K用户空间BANK0分配的FLASH大小。
RameSize1024用户空间BANK0分配的RAM大小。
User_BANK1(梯形图、液晶屏组态等,由KQD Application Editor生成)FlashSize32K用户空间BANK1分配的FLASH大小。
RameSize1024用户空间BANK1分配的RAM大小。

修改好节点配置信息后,需要点击按钮【应用修改】

修改将被保存到模块配置节点中去,同时软件会对保存的数据进行分析,并刷新分析结果:

本项目中单片机STM32F103xC的总FLASH大小为256K,系统固件使用128K,用户空间BANK0使用32K,用户空间BANK1使用32K,则剩余的32K放在最前面用于存放Bootloader。(Bootloader的空间应不小于8K,具体值由引导程序配置决定)

配置:串口底层驱动(USART1_AscL)

选择蓝图Modbus,在蓝图中选择串口底层USART1_AscL。在配置节点中选择Main节点,使能DMA传输模式,然后【应用修改】。这样,USART1_AscL将使用硬件DMA来操作串口的数据缓存,以减少单片机的中断负载。

选择Pin节点,确定串口使用的单片机管脚位PA9(TX)、PA10(RX)。

配置:串口管理(Asc)

蓝图中选择串口驱动Asc,配置节点中选择Device节点,然后点击工具条中的【添加】按钮,添加Asc的底层驱动设备:

确定后,Device[]节点下面将多出一个Device0通讯设备,选择此通讯设备:

项目说明
Module通讯设备的底层驱动模块,这里选择模块USART1_AscL。
InterCharTime连续接收时字节间的最大时间间隔,用于接收数据帧的判断。
ReplyWaitTime等待从站应答的时间。
TxBufferSize发送数据缓冲的大小。
RxBufferSize接收数据缓冲的大小。
TransmitPin半双工模式下,发送使能单片机管脚。
TransmitActiveLevel发送使能有效的单片机管脚电平。
TransmitLeadDelay电平切换结束后数据开始发送的延时时间。
TransmitTrailDelay数据发送结束后电平开始切换的延时时间。
TransmitGpt发送定时器引用,由系统在Gpt管理模块中自动添加,不可被修改。
ReceiveGpt接收定时器引用,由系统在Gpt管理模块中自动添加,不可被修改。
SystemBlockEnabled是否用过用户PLC系统块来修改串口参数。
SystemBlock用户PLC系统块引用,由系统在Fcc模块中自动添加,不可被修改。

配置:MODBUS协议传输实现(ModbusL)

选择蓝图Modbus,在蓝图中选择MODBUS传输层Rtu_ModbusL。在配置节点中选择Port节点,然后点击工具条中的【添加】按钮,添加MODBUS传输层通讯端口:

确定后,Port[]节点下面将多出一个Port0节点,选择此节点:

项目说明
Device串口驱动的设备。
Job在串口驱动中自动创建的串口通讯任务。
StationAddress默认的MODBUS从站地址。
AutoMasterEnabled是否自动开启MODBUS主站功能。
AutoSlaveEnabled是否自动开启MODBUS从站功能。
SystemBlock用户PLC系统块引用,由系统在Fcc模块中自动添加,不可被修改。

系统在Asc管理模块中自动添加的Job可以进一步被配置,点击Job配置项右侧的快捷箭头:

进入Asc模块配置节点下的Job配置:

确定通讯任务Rtu_ModbusL_Port0_Job的帧间隔时间和从站等待应答的时间。

配置:MODBUS协议(Modbus)

选择蓝图Modbus,在蓝图中选择MODBUS通讯协议。在配置节点中选择Port节点,然后点击工具条中的【添加】按钮,添加MODBUS通讯端口:

确定后,Port[]节点下面将多出一个Port0节点,选择此节点,确认配置:

项目说明
Module本端口使用的MODBUS传输层,这里选择MODBUS的RTU实现Rtu_ModbusL。
Port本端口使用MODBUS传输层下管理的哪个端口,这里选择Port0。

到此便完成了最小系统的配置,再一次点击【编译】按钮,系统对配置进行编译,如果输出以下信息,便说明配置无误。