专题介绍:构建西门子S7-200 SMART兼容系统
基本信息
在KQD平台上,通过KQD Designer进行硬件配置,信息发送到服务器并生成和下载好系统固件后,一般使用KQD Application编写业务逻辑。目前KQD Application支持梯形图编程、指令表编程、C语言编程。如果不习惯使用KQD Application来进行编程,或者不希望将KQD Application开放给你的客户,也可以在系统中加入Ecc模块,对系统的逻辑控制进行扩展。目前开发好的Ecc模块是S7x200_Ecc,系统导入此模块后,可以完全模拟S7-200 SMART的运行,通过第三方的软件STEP 7-MicroWIN SMART来进行梯形图程序的编写和在线调试。
目前用于测试的编程软件为:STEP 7-MicroWIN SMART V02.04

模拟的PLC型号为:CPU ST30

支持的功能
- STEP 7-MicroWIN SMART可以通过以太网、串口连接到模拟系统。配置系统的时候,以太网需要添加W5500_PPIL或ESP8266_PPIL驱动模块,串口需要添加Rs485_PPIL驱动模块。如果是通过串口连接,必须使用西门子的USB/PPI专用电缆。
- 梯形图程序的上传下载、比较。
- 数据块的上传下载、比较(可以通讯)。
- 系统块的上传下载、比较(可以通讯)。
- 梯形图程序的在线监控、变量的在线监控和修改。
- 所有运算指令的支持(硬件无关的指令)。硬件相关的指令需要通过库来调用KQD平台的实现。
不支持的功能
- 系统块相关功能。
- 数据块相关功能。(近期会加上)
- 硬件相关的指令。
- 变量强制功能。(近期会加上)
- 程序向导功能。
- 数据日志与事件日志。
- SD卡的操作。
- PROFINET相关功能
硬件要求
目前可以将SMART兼容系统部署到STM32F1、STM32F4、STM32H7。但是推荐使用STM32F4和STM32H7,因为这两个系列的单片机有更大的内存(SRAM)。
与EC30/EC40系统不同,模拟器的程序块(梯形图)是在内存上面执行的,然后保存在外置的FLASH或EEPROM中。S7-200 SMART默认可以下载程序块、数据块、系统块。在配置的时候,程序块是必须的,数据块和系统块是可选的。如果不使用数据块和系统块,可以节约一定的内存空间,但是在STEP 7-MicroWIN SMART软件上进行相关操作时会报错。因为直接解释程序块效率太低,模拟器还需要额外的空间用于存放优化过的程序块,我们给他取名运行块。运行块会将程序块中可以静态解析的东西事先解析好(例如指令的服务地址,PLC变量的内存地址等)。模拟器在跑程序时,实际上是解析的运行块数据,程序块只用于程序的上传。运行块一般来说比程序块更大,配置的时候建议至少2倍于程序块大小。那么如果配置16K的程序块,运行块就需要32K,一起占用48K的SRAM,对于最大64K的STM32F1来说,空间就相当紧张了。
在FLASH的使用上面,模拟器的指令实现必须事先全部放入FLASH中。EC30/EC40是编译型的PLC,只有在梯形图中用到了指令,才会编译在梯形图程序中一起下载。因为一般的梯形图不是所有的指令都用到了,最终下载到FLASH中的只是一部分指令实现。目前实际测试,包含模拟器的最小系统,FLASH的使用已经接近200K,其中100K是预置的梯形图指令实现。
综上所述,要运行S7-200 SMART模拟系统,推荐使用STM32F4和STM32H7。STM32F1至少需要256K FLASH以上的单片机。
FLASH分区
STM32F1/F4/H7的FLASH分区示意图:

-
区域:Boot Loader(引导程序)
通过KQD Designer将引导程序下载到单片机。单片机复位后,从引导程序开始运行。引导程序会等待一个很短的时间检查指定的通讯口上是否有系统固件烧录请求,如果有,则进行系统固件的烧录。如果没有,则尝试运行单片机上的系统固件。如果单片机的FLASH上没有有效的系统固件,则继续等待烧录请求。
-
区域:Application(系统固件)
通过KQD Designer配置好硬件后,可以通过因特网将配置请求发送到服务器。服务器根据配置请求生成系统固件后,将系统固件发送回KQD Designer,然后尝试连接到单片机。此时如果此时复位单片机进入引导程序,引导程序会检查通讯口上是否有系统固件烧录请求。握手成功后,KQD Designer最终将此系统固件烧录到单片机。
-
区域:User_BANK0(用户块0)
用户程序块0,由KQD Application Editor生成并下载(梯形图、C代码、液晶屏组态数据等)。一般由控制器生产者编写,用于底层硬件操作,模拟量标定等出厂前操作。为了支持二次开发,KQD Application Editor后续支持将项目导成等价的Keil项目,生产者可以在项目中添加二次开发代码,编译的结果再通过KQD Application Editor下载到User_BANK0。
-
区域:User_BANK1(用户块1)
用户程序块1,由KQD Application Editor生成并下载(梯形图、C代码、液晶屏组态数据等)。一般由控制器使用者编写,用于具体的控制逻辑实现,支持现场调试和修改。
-
区域:S7-200 SMART(SMART兼容系统的程序块、数据块、系统块等)
由STEP 7-MicroWIN SMART生成并下载,下载后由单片机烧录到外置的EEPROM或FLASH。运行时再载入到SRAM。一般由控制器使用者编写,用于具体的控制逻辑实现,支持现场调试和修改。
STEP 7-MicroWIN SMART软件功能支持
基本操作
图标 | 命令 | 说明 |

|
RUN |
支持 |
STOP | 支持 |

|
上传-全部 |
支持 |
上传-程序块 | 支持 |
上传-数据块 | 支持(需要在配置的时候使能数据块) |
上传-系统块 | 支持(需要在配置的时候使能系统块) |
上传-数据日志 | 不支持 |
下载-全部 | 支持 |
下载-程序块 | 支持 |
下载-数据块 | 支持(需要在配置的时候使能数据块) |
下载-系统块 | 支持(需要在配置的时候使能数据块) |

|
设定PLC端的程序存储卡 |
不支持(通讯返回SD卡不存在) |

|
PLC信息 |
支持(不支持事件日志,返回空文件) |
比较-程序块 | 支持 |
比较-数据块 | 支持(需要在配置的时候使能数据块) |
比较-系统块 | 支持(需要在配置的时候使能数据块) |

|
清除-程序块 |
支持 |
清除-数据块 | 支持(需要在配置的时候使能数据块) |
清除-系统块 | 支持(需要在配置的时候使能数据块) |
暖启动 | 不支持(近期会添加) |
设置时钟 | 支持(需要在配置的时候确定:添加了Rtc_Fe模块并设置了主时钟) |
通过RAM创建DB | 支持(需要在配置的时候确定:Mb模块中V区不小于12K且S7x200_Ecc模块中数据块的不小于16K) |
在线调试
图标 | 命令 | 说明 |

|
读取 |
支持 |
写入 | 支持 |

|
程序状态 |
支持 |
暂停状态 | 支持 |
图表状态 | 支持 |
暂停图表 | 支持 |

|
强制 |
不支持(近期会添加) |
取消强制 | 不支持(近期会添加) |
全部取消强制 | 不支持(近期会添加) |
读取全部强制 | 不支持(近期会添加) |

|
执行单次 |
不支持(近期会添加) |
执行多次 | 不支持(近期会添加) |

|
运行中编辑 |
不支持 |
指令支持
目前与硬件无关的运算指令均支持。
与KQD系统共享PLC内存
SMART兼容系统中,各内存区域与KQD系统是否共享
区域 | 说明 | 是否共享内存 |
I | 离散输入映象寄存器 | 共享,大小由Mb模块配置。 |
Q | 离散输出映象寄存器 | 共享,大小由Mb模块配置。 |
M | 标志寄存器 | 共享,大小由Mb模块配置。 |
S | SCR寄存器 | 共享,大小由Mb模块配置。 |
SM | 特殊寄存器 | 不共享,大小为2048字节。 |
V | 变量寄存器 | 共享,大小由Mb模块配置。 |
T | 定时器当前值和定时器位 | 不共享,但大小由Mb模块配置。 |
C | 计数器当前值和计数器位 | 不共享,但大小由Mb模块配置。 |
HC | 高速计数器当前值 | 共享,大小由Mb模块配置。 |
AI | 模拟量输入 | 共享,大小由Mb模块配置。 |
AQ | 模拟量输出 | 共享,大小由Mb模块配置。 |
L | 局部变量存储器 | 不共享,兼容系统单独给每个SBR调用分配空间,大小为64字节。 |
AC | 累加器寄存器 | 不共享,兼容系统单独给每个SBR调用分配空间,大小为16字节。 |
在S7-200 SMART中调用KQD硬件指令
因为KQD平台支持的硬件与SMART不兼容,目前所有硬件相关的指令必须使用KQD平台的指令来实现。这里演示如何在STEP 7-MicroWIN SMART中调用MemIf模块的指令对EEPROM芯片进行操作。
第1步:在软件STEP 7-MicroWIN SMART中,右键点击指令树中的库节点,执行【打开库文件夹】命令:

第2步:将网站提供的库文件KQD_MemIf.smartlib拷贝到STEP 7-MicroWIN SMART库文件夹中去:

第3步:在软件STEP 7-MicroWIN SMART中,右键点击指令树中的库节点,执行【刷新库】命令:

第4步:在软件STEP 7-MicroWIN SMART中,将库中的指令拖到梯形图编辑区域并设置执行条件和操作数:

在SMART兼容系统中,以库的方式调用KQD指令,格式基本一致,个别地方需要注意:
- 某些EN无能流也需要处理的指令(例如上面的MemIf_Read指令,EN表示添加读取任务,即使EN取消,指令依然需要更新任务状态),在SMART兼容系统中,需要EN保持常闭,然后用一个额外的Enable参数表示只能是指令是否使能。
- 在KQD Application Editor中的枚举量,STEP 7-MicroWIN SMART无法显示,只能使用原始数值。
- 某些KQD指令的参数表示变量地址但是可以不用地址符,例如MemIf_Read指令的Data参数,表示从EEPROM读取数据后,存放在PLC中的位置。在KQD Application Editor中可以直接使用VB40,但是在SMART兼容系统中,必须使用&VB40。
在S7-200 SMART中调用KQD程序
兼容系统调用KQD的梯形图程序
首先在KQD Application Editor中创建一个梯形图子程序,子程序有两个INT输入变量,有一个INT输出变量。在子程序中,将两个输入变量相乘,结果放入输出变量:

可以在KQD的主循环中进行子程序调用测试,将VW20设置为100、VW22设置为20,观察VW24是否为2000:

-
在软件STEP 7-MicroWIN SMART中,创建一个子程序,子程序有两个INT输入变量,有一个INT输出变量。在子程序中,编写如下程序:

这里借用SET_ADDR指令来进行KQD子程序的调用,当PORT的值为16#FF时,表示调用KQD子程序。ADDR的最高位指示是调用User_BANK0还是User_BANK1。ADDR的低7位指示是调用第几个SBR。这里ADDR为16#1,表示调用BANK0上的SBR1子程序。
在软件STEP 7-MicroWIN SMART中,切换到主循环程序。在主循环中编写子程序的调用,下载并进入程序监控模式。将VW100设置为100、VW102设置为20,观察VW104是否为2000:

兼容系统调用KQD的C语言程序
首先在KQD Application Editor中创建一个C语言子程序,子程序有一个REAL输入变量,有一个REAL输出变量。在子程序中,使用圆面积公式来计算面积:

可以在KQD的主循环中进行子程序调用测试,将VD20设置为4、观察VD24是否为50.2654:

-
在软件STEP 7-MicroWIN SMART中,创建一个子程序,子程序有1个REAL输入变量,有一个REAL输出变量。在子程序中,编写如下程序:

这里借用SET_ADDR指令来进行KQD子程序的调用,当PORT的值为16#FF时,表示调用KQD子程序。ADDR的最高位指示是调用User_BANK0还是User_BANK1。ADDR的低7位指示是调用第几个SBR。这里ADDR为16#2,表示调用BANK0上的SBR2子程序。
在软件STEP 7-MicroWIN SMART中,切换到主循环程序。在主循环中编写子程序的调用,下载并进入程序监控模式。将VD100设置为4、观察VD104是否为50.2654:

目前兼容系统可以方便的调用KQD的程序,KQD的程序可以由梯形图或C语言编写,后期还会支持更多的编程方式。这意味着可以方便的对S7-200 SMART兼容系统进行功能扩展。如果只向最终客户开放STEP 7-MicroWIN SMART编程,那么控制器的生产者可以用梯形图和C语言实现很多有特色的功能函数,最终客户不需要关心具体实现,只管设置参数和调用功能即可。
中断系统
因为所有的硬件驱动都在KQD中实现,因此S7-200 SMART的中断源均来自KQD的Fcc模块。需要注意的是,S7-200 SMART与KQD的Fcc只共享中断源,但不共享中断管理系统。这意味着,在KQD系统中,通过ENI、DISI、ATCH、DTCH指令只影响KQD系统自身。如果希望某中断源不仅触发KQD中断程序的调用,也触发S7-200 SMART中断程序的调用,那么不仅要在KQD系统中调用ATCH、ENI指令,也要在S7-200 SMART中调用ATCH、ENI指令。
受限于S7-200 SMART模拟系统的运行机制,S7-200 SMART的所有中断程序优先级均比KQD程序低。这意味着,KQD中断程序可以抢占S7-200 SMART的程序,但是S7-200 SMART的中断程序不能抢占任何KQD程序,包括KQD程序的主循环扫描。如果希望改善S7-200 SMART的中断程序的响应时间,KQD程序的主循环应该尽可能的简短,复杂的控制策略应该全部由S7-200 SMART来完成。
相关例程
文件下载