S7-1200 TCP通讯遇到DB1不存在---未装载DB1.的错误
按照S7-1200系统手册做的,居然出现“奇怪”的错误,说什么DB1不存在---未装载DB1.?!---DB1是我用来存放TCP通信数据的DB块,明明编译装在了的啊,还可以监控数据呢。 有两个地方让我感觉很奇怪。。。
第一个奇怪的地方在于,TSEND_C组态没问题,但是上图所示TSEND_C参数DATA需要输入Variant类型的变量 :[指针地址+长度],在主窗口报错,但是组态窗口没问题。
第二个奇怪的地方在于,将错误的符号引用的指针地址换成 P#DB1.DBX0.0 Int 64,编译没问题,下载,运行... 只要伙伴与PLC一建立连接,运行就会报错:
这是为啥呢?答案就是:DB1默认是优化的DB块,不支持绝对寻址!你可以测试一下,将DB1属性里面的“优化的块访问"勾选去掉,没有问题了。如果勾选优化的块访问,其实TIA已经提示你了,所有的”奇怪“都不奇怪,感觉奇怪肯定是自己没搞明白。。。
参考西门子官方说明文档:《S7-1200 与S7-1500 中优化的 DB 块和标准 DB 块有哪些区别?》
在 TIA Portal V12 中为S7-1200/S7-1500 CPU 添加一个 DB 块时,其缺省属性为优化的 DB ,优化的 DB 块与标准的 DB 块整体对比如下表 01 所示:
标准 DB优化 DB
数据管理取决于变量的生明。用户可以生成用户定义或一个内存优化的数据结构。数据被系统管理和优化。用户可以生成用户定义的数据结构,系统进行优化以节省内存的空间。
存储方式每个变量的存储地址在 DB 块中每个变量的偏移地址可见每个变量的存储地址由 CPU 自动分配,无偏移地址。
访问方式可通过符号地址、绝对地址以及指针方式寻址仅可通过符号地址访问
下载无需初始化功能不支持支持(仅 S7-1500)
访问速度慢快
数据保持性以整个 DB 块为单位设置保持性DB 块内的每个变量均可单独设置保持性
兼容性与 S7-300/400 PLC 兼容与 S7-300/400 PLC 不兼容
出错几率绝对地址访问 (例如 HMI 或间接寻址 ),声明修改后可能导致数据的不一致。缺省为符号访问,不会造成数据的不一致,例如 HMI 只与符号名称对应。
表 01.
S7-300/S7-400 与 S7-1200 以及 S7-1500 DB 参数的对比如下表 02 所示:
S7-300/S7-400S7-1200S7-1500
DB 的最大容量64 KB64 KB标准 DB 64KB,优化 DB 最大 16 M。
DB 的最大块号1600065535
DB 块类型标准 DB优化 DB、标准 DB(取决于DB块的属性)
表 02.
可通过修改 DB 块的属性将 DB 块修改为标准 DB 块或优化的 DB 块,如下图 01 所示:
图 01.
如 DB 块属性为标准 DB 块,该 DB 块内变量的偏移地址(offset)被编译后会出现,标准 DB 块与优化的 DB 块对比如下图 02 所示:
图 02.
S7-1200 CPU中,标准 DB 块与优化的 DB 块在 PLC 中按照下图 03 方式存储。
图 03.
S7-1500 CPU中,标准 DB 块与优化的 DB 块在 PLC 中按照下图 04 方式存储。
图 04.
在 S7-1500 CPU 中,相比于标准的 DB 块,优化的 DB 块提供更快的访问速度,其根本原因与 CPU 的编码方式有关,如下图 05 所示:
图 05.
与标准的 DB 块相比,优化的 DB 块有以下优势:
提供更快的访问速度;
以符号寻址,编程者无需考虑 DB 块中每个变量存储的具体地址,每个变量在 CPU 中存储的位置由 PLC 的系统自动进行分配;
CPU 与 HMI (如 Panel)连接时,由于优化的 DB 是靠符号寻址,所以当 PLC 变量连接到 HMI 后,PLC 侧对变量做的修改,HMI 无需重新下载;
对 DB 块内的任意位置对变量进行添加及删除,或对变量的类型进行修改(如将Tag_1的属性由 byte 修改为Word),不会引起该 DB 块其它变量的使用;
S7-1200/S7-1500中如有以下应用,必须使用标准 DB 块:
与其它 CPU 建立 S7 单边通信时(PUT/GET),用于存储发送区数据和接收区数据的 DB 块;
与 Wincc V7.2 进行 HMI 连接时,Wincc V7.2 访问的 S7-1200/S7-1500 CPU 的 DB 块只能是标准的 DB 块;
使用Simatic Net V8.2 与S7-1200/S7-1500 PLC进行 OPC 连接时,OPC 服务器访问 S7-1200/S7-1500 CPU 的 DB 块只能是标准的 DB 块。