S7-1200程序下载了却不运行?多半是没做这一步
- 2026-10-14 10:22:35





wode
引言
下载但不初始化

1
下载不重启
说明
为了让已经调试好、在系统上跑得好好的PLC程序还能改,S7-1200 V4及以上的CPU支持在运行时给FB块或数据块的接口做扩展。不用把CPU打到STOP模式,就能下载修改过的块,而且数据块里其他的值不会受影响。这是一种很简单的改程序方式。这个加载过程(不用重新初始化的下载)不会给正在控制的过程带来不好的影响。
工作原理
原则上,每个FB块或数据块都默认有一块存储器预留区域,专门留给以后改接口用。一开始,这块预留区域是没用的。如果你确定在编译和下载块之后还要加载接口更改,那就得把存储器预留区域激活。激活之后,所有再声明的变量都会存到这块预留区域里。后续下载不会影响已经加载的变量的值。
如果你打算以后在工厂不运转的时候再改程序,那还可以一次性重置一个或多个块的存储器布局。通过这个操作,能把所有变量从预留区域搬到常规区域。预留存储器清空后,以后要扩展接口时还能接着用。
要求
如果满足下面这些要求,1200 CPU就能用“无需重新初始化的下载”功能:
使用 S7-1200 V4 及更高版本的 CPU。 FB块使用 LAD、FBD 或 SCL 创建。 DB块由用户创建。 FB或DB必须是"优化访问"。 基本步骤
如果你想扩展FB块或数据块的接口,请按下面的步骤做,然后就能在不重新初始化的情况下加载块。
在默认情况下,所有块在非保持性存储器中都预留有一个100个字节的空间,并在需要时,可以调节存储器预留区域的大小或在保持性存储器中定义其它存储器预留区域。 激活存储器预留区域。 扩展块接口。 编译块。 将块下载到 CPU。
2
设置块预留存储器
简介
基本上,每个FB块或数据块默认都预留了100个字节的区域。这个预留区域不在块的保持型存储区里。默认情况下,保持型存储区里不提供预留区域,因为保持型存储器只能给CPU用。
你可以改掉默认的100个字节,这个改动适用于项目里所有新建的块。另外,你还能单独改某个特定块里预留区域的大小,并且在保持型存储区里为某个特定块定义一个预留区域。
设置新块中预留存储器的大小
如果你想在项目里给所有新建的块设置预留存储器的大小,请按下面的步骤操作:
在"选项"菜单中,选择"设置"命令。将在工作区中显示"设置"窗口。 在区域导航中选择"PLC 编程 > 常规"组。 在"下载但不重新初始化"组中,在"存储器预留"的输入框中输入为块接口进行后续扩展而分配的所需字节数。新创建的FB块和全局数据块现在获得了一个具有指定大小的预留存储器。 已经存在的块不受此次更改的影响。
说明
这个设置只对支持“下载但不重新初始化”功能的块有效。其他块不受这个设置影响。

图1.为所有新创建的块设置预留存储器的大小
设置现有块中预留存储器的大小
如果你想设置现有块里预留存储器的大小,请按下面的步骤操作:
在项目树中选择该块。 右键快捷菜单中选择"属性"命令。将打开"属性"对话框。 在浏览区中选择"下载但不重新初始化"组。 在"预留的存储空间大小"输入框中输入所需的字节数。 如果要在保持型存储器中定义一个预留区域,请选择"启用下载,但不重新初始化保持性变量"复选框并在"预留可保持性存储器"输入框中输入所需的字节数。 说明
如果当前块已经激活了预留存储器,那就不能再改预留存储器的大小了。

图2.设置现有块中预留存储器的大小
3
激活存储器预留区域
简介
每个FB块或数据块都分到一个默认的存储器预留区域。但是,这个预留区域一开始是没用的。如果你已经编译并加载了块,然后想以后加载接口更改,那就请激活存储器预留区域。之后声明的所有变量都会存到这块预留区域里。
要求 块目前已被编译。 块包含存储器预留区域。 步骤
要是你想给FB块或者全局数据块开启那个“预留存储器”功能,就照着下面这几步来操作:
打开块。 选择工具栏上的"下载但不重新初始化"按钮。 结果 所有新声明的变量都将保存在存储器预留区域中,因此可以在不影响正在运行的进程的情况下进行下载。 无法再删除现有变量。 除了"默认值"、"起始值"和"注释"属性之外,其它属性均不得再进行更改。

图3.激活存储器预留区域
4
扩展块接口或数据块
简介
等FB块或者全局数据块的预留存储器打开之后,你就可以往里添加新的变量了。
要求
这时候,预留存储器已经处于激活状态了。
步骤
要是还想再声明别的变量,就按下面这些步骤来做:
选择声明部分,例如"Input"、"Output"、"InOut"或"Static"。 在所选区域中,声明一个或多个变量,并在列中输入其属性。在 FB 的"保持性"列中,只能在"保持性"和"非保持性"之间进行选择,预留存储器中无法使用选项"在 IDB 中设置"。无法在结构化数据类型变量中添加新的变量。例如:无法在现有结构中声明任何新的结构元素。 但是,可以在预留存储器中创建新结构。 编译发生变更的块,例如,在项目树中选择该块,然后在快捷菜单中选择命令"编译 > 软件(仅变更)"。在编译期间,新声明的变量将插入到预留存储器中。 如果预留存储器过小,编译将终止,并显示一条错误消息,通知发生错误。 加载发生变更的块,例如,在项目树中选择该块,然后在快捷菜单中选择命令"下载到设备 > 软件(仅变更)"。加载块扩展时,仅初始化定义有初始值的新加变量。并不会重新初始化现有在线变量。

图4.如果预留存储器过小,编译将终止
5
禁用存储器预留区域
简介
为了以后工厂还没开工的时候能改块的存储器布局,你可以先把预留存储器关掉。这么一关,原来放在预留区域里的所有变量就都挪到常规区域去了。预留存储器本身还在,以后想扩展接口的时候还能用,而且它的大小还是块属性里定义好的那么大。
说明
注意啊,把预留存储器关掉之后,你得重新编译这个块,然后再下载一次。还有,关了预留存储器之后,就没法做“不用重新初始化的下载”了。
要求
现在块里的预留存储器是激活状态的。
步骤
如果你要给FB块或者全局数据块激活预留存储器,就按下面这几步来:
打开块。 选择工具栏上的"下载但不重新初始化"按钮。 结果
这么一弄,之前放在预留区域里的所有变量就都搬到常规区域去了。所以你得重新编译这个块,再下载一次,CPU里这些变量的值在下载的时候会被重新初始化。

图5.取消存储器预留区域
6
重置预留存储器
简介
要是你打算以后等工厂还没开工的时候再改程序,那你可以一次性把块的存储器布局重置一下。这么一重置,所有变量就从预留存储器挪到常规存储区里去了。预留存储器清空之后,以后想扩展接口还能接着用。
要求 块中的预留存储器已激活。 预留存储器包含有变量。 步骤
如果你想重置一个或者多个块的预留存储器,就按下面这几步来:
选择"程序块"文件夹,或该文件夹中的特定块。 在快捷菜单中,选择"编译 > 软件(复位存储器预留区域)"命令。 结果
之前放在预留存储器里、你选中的那些块的所有变量,都会从预留区搬到常规区。块已经重新编译过了。这些变量在下一次下载的时候会被重新初始化。块里配置好的预留存储器还会保留着,并且继续保持激活状态。

图6.重置预留存储器
注意
当你把预留存储器重置的时候,就好比把一个小本子上记的东西全擦掉了。之前你在预留存储器里设置的所有变量,不管是那种断电也能记住的保持性变量,还是断电就忘的非保持性变量,等到下次再加载程序的时候,都会像刚开机一样被重新初始化,也就是回到它们最初的默认值。
在工厂实际运行的时候,如果你随便更改变量的值,那可不是闹着玩的,轻则机器撞坏、产品报废,造成严重的财产损失,重则可能伤到人,出人身事故!所以,每次重置完预留存储器之后,千万别急着直接投入生产,必须先在测试环境里把程序从头到尾、仔仔细细地全面检查一遍,确认没问题了,才能在实际设备上使用。
公众号更新内容(自动化:西门子全系列,Codesys平台或其他Codesys相关厂商的产品,内容包括(PLC,变频器,伺服驱动器,总线协议,传感器,以及各类电气产品)。机械设计(传动机构及精密运动机械)、机器人:ROS2(通信框架)、ROS-Control(控制框架)、Moveit2(运动规划框架)、ROS-Industrial(工业版,适配机器人应用)机器人全栈开发相关技术))都看到这里啦,别忘记点点关注哟,愿您在自动化领域一帆风顺!


完


点分享

点收藏

点点赞

点在