蓝丸STM32F103作为PLC

引言


当然,每个曾经或刚开始研究STM32微控制器的人都有一个中国制造的调试板,绰号为Blue Pill外国游客(blue tablet)。

这样的板基于STM32F103C8T6芯片,该芯片是基于Cortex-M3内核的32位处理器。 下图显示了经典的电路板和引脚分配。

经典板的外观
我的形象

引脚分配
我的形象

如何在5分钟内从即兴的方式制作PLC?


经常发生的情况是,来自Internet的课程教您如何使用计时器,USART,开关输出状态,甚至使用DMA! 在完成所有测试后,电路板可以安全地放在备件架上,这是一件好事,但到目前为止,还没有找到合适的应用。

如果您正在阅读本文,那么该是将板子从架子上拿下来并吹掉灰尘的时候了,因为现在我们将基于该板子制造一个符合国际标准IEC61131-3的可编程逻辑控制器。

在微处理器和所连接的固件一起刷新后(alas,直到可以在计划中发布源代码),它才能作为PLC运行。 最有趣的是,可以使用为三菱FX2N控制器编程而设计的标准GX Developer FX软件对电路板进行编程。 注册后,该软件(和Russified)可从三菱官方网站免费下载。

那么,我们的小蓝板在固件之后获得了哪些新功能?

首先,您现在可以使用微型USB连接器将其连接到计算机。 为了在编程环境和控制器之间提供数据交换,必须安装虚拟COM端口驱动程序。 可以从附件中bluepill_update.pdf文档的链接下载它们。 如图所示,在安装驱动程序并将开发板连接到USB后,新设备将出现在个人计算机的设备中。

安装驱动程序后控制器硬件配置的类型
我的形象


现在,您可以运行我们安装的GX Developer FX。 启动程序后,将出现以下窗口:

GX Developer FX首次发布
我的形象

下一步是创建一个新项目。 在项目菜单中-新建项目。 该窗口将为您打开:

GX Developer FX的新项目
图片

您无法在此处进行任何更改,然后单击“确定”。 所以-我们有一个空项目,现在我们需要配置与开发板的在线连接。

为此,请在菜单中选择在线-传输设置。 该窗口将为您打开:

在GX Developer FX中设置连接
图片

您无法在此处进行任何更改,然后单击“确定”。 所以-我们有一个空项目,现在我们需要配置与开发板的在线连接。

为此,请在菜单中选择在线-传输设置。 该窗口将为您打开:

在GX Developer FX中设置连接
图片

在PC接口系列中,选择Ordinal(此处翻译不正确-应该是

序列号),您将看到以下窗口:

串口设置
图片

在这里,我们选择与个人计算机设备中可见的COM端口号相对应的COM端口号。 在我们的案例中,它称为STMicroelectronics虚拟COM端口(COM2)。 现在,我们可以检查是否存在任何连接。 为此,请单击上一个对话框中的“测试连接”按钮。 如果一切正常,那么您将收到一条消息,如下图所示:

连接检查
我的形象

现在,我们可以安全地进行最有趣的事情了-对控制器进行编程。 此版本支持三种语言:IL-指令语言,字符串显示类型。 LAD-楼梯逻辑语言,可视显示类型。 SFC-连续块的语言,显示的可视类型。 而且,您始终可以在显示语言IL和LAD之间切换,反之亦然。 以下是典型的LAD程序:

管理计划-LAD
我的形象

这是相同的程序,但是使用IL语言:

管理计划-IL
我的形象

当然,这一切都很好,但是我想研究一下程序逻辑-了解那里发生了什么。 为此,请按F3按钮-如果程序已写入控制器,则显示将切换到在线监视模式。 要录制程序,需要在菜单在线-写入控制器中选择。

将显示以下窗口:

选择要写入控制器的项目元素
我的形象

在窗口中,选择用于记录的选项(此处选择了整个程序和控制器参数),然后单击“运行”按钮。 程序将通知您,为了进行记录,控制器将切换到STOP模式(通过连接到PC13的LED熄灭,您将看到此信息),它将记录控制器并将其置于RUN模式。

这是LAD程序的源代码在网上显示的方式:

在线监视模式下以LAD语言表示的程序部分的类型
我的形象

和在线IL程序相同:

IL在线监控中程序部分的类型
我的形象

这是SFC源代码:

SFC-程序的外观
我的形象

为了方便测试,我使用了控制器硬件的旧测试开发,由于某种原因或其他原因,没有使用它。 下图显示了这些板之一:

调试板-中间控制器
我的形象

该评估板为UART1,UART2和1线总线提供电流隔离。 离散的输入和输出也被电气隔离。 该程序接受以下助记符:X1是地址1的输入,Y2是地址2的输出,M104是地址104的位操作数,D1000是地址1000的通用寄存器。附件中的固件版本具有以下限制:程序步骤的数量为1000(最大数量为8000)。
寄存器数量-2000(范围D0000-D1999)。位变量数量-3072(范围M0-M3071)。UART1-支持Modbus RTU主站/从站,在主模式下的从站数量-2(最大-128).UART2-支持Modbus RTU主站/从站,在主站模式下的从站数量为-2(最大-128)。

默认情况下,串行通讯参数为57600,8N1。 UART1-处于从动模式,地址为1,UART2-处于从动模式,地址为2。

目前,对于1线总线,仅支持DS18B20之类的传感器,从站数量为-2(最大数量为128)。

还支持从控制器卸载程序并将其转换为易于阅读的形式(我更喜欢LAD)。

该程序是使用实时操作系统ChibiOS RT构建的。

使用您可以在附件中找到的程序来配置modbus RTU和1-wire总线上的通信设置。 例如,我们现在考虑设置并搜索地址未知的传感器。 启动程序后,将显示以下窗口:

启动后配置程序的外观
我的形象

转到“ 1-wire”选项卡并选择“ 1-wire master”,并确保单击“ Write to PLC”按钮以写入控制器:

1线向导设置
我的形象

现在,单击“搜索从站”按钮后,将打开一个窗口,您可以在其中选择D0000-D2000区域中的地址,从该地址开始,将以浮点数的形式记录来自传感器的记录温度值。

1线总线从站搜索窗口
我的形象

成功搜索连接到数据交换总线的所有传感器后,将显示以下窗口。

从站搜索窗口-找到3个连接的温度传感器
我的形象


在这里,我们可以将找到的传感器添加到当前配置中,或者用新传感器完全替换当前传感器。 在我们的情况下,温度数据将以浮点数的形式发送到地址D1500,D1502和D1504的控制器寄存器区域。 剩下的就是按下Write to PLC按钮并重新启动电路板以激活新的硬件配置。

将新配置下载到控制器
我的形象

关于配置程序,还可以添加什么? 有一点-这是FX2N控制器中浮点数的表示。 为了简化这种格式的常数输入,我们必须使用带有H修饰符的常数记录。一旦控制器解释器遇到这样的修饰符,它就会理解将以浮点格式传输一个数字,但是以IEE754记录的形式具有单精度。 转换器选项卡上的程序窗口如下所示。

转换浮点数格式
我的形象

结论-我们得到了什么:


现在是时候提出这个问题了,但实际上,这种控制器的速度是多少? 一切都很简单-通过modbus RTU(从控制器-两个端口)以500 kbps的速度轮询两个通信端口,查询长度为122个寄存器时,轮询17个温度传感器并执行以下命令中最“繁重”的(由二进制操作数组成)程序7745个步骤,执行周期为21毫秒。 当然,这种控制器也有缺点。 第一个是蓝色板在低质量组件方面存在差异,因此,我建议在连接mini-USB之前为板供电。 第二个当然是没有非易失性存储器(更确切地说,它存在-但在电池支持的区域中只有9个寄存器)。 您自己也知道,这种设备最好不要用于关键应用或生产中。 但是对于家庭还是培训来说,这是最便宜,最实惠和最容易理解的。

我试图进行广泛的审查-如果您有任何问题,请写。 如果您发现程序执行中的错误,我将特别高兴。 希望本文能为您提供丰富的信息,并且您不会浪费时间阅读它。

本文的下载如下。

Source: https://habr.com/ru/post/zh-CN424733/


All Articles