符号表服务器(加载符号)

如何配置SIMATIC NET的OPC 服务器的符号访问

如何利用SIMATIC NET的符号表简化OPC服务器配置

当OPC客户端通过SIMATIC NET访问S7-200 SMART时,常常需要在客户端或OPC SCOUT V10中创建大量重复的变量,如"S7:[S7_Connection_1]"。为避免重复工作,SIMATIC NET的符号表功能能大展身手。通过Excel进行符号表的创建和修改,可以显著提高配置效率,尤其在不同项目中使用相似变量时,只需稍作调整即可。

本实例的软件环境包括:

- PC1:操作系统为WIN7 SP1 64位英文版,SIMATIC NET V14,TIA博图STEP7 V14 UPD2,WinCC V7.4 SP1 UPD2,IP地址192.168.1.130。

- PC2:操作系统相同,SIMATIC NET V8.1 SP1,NCM manager V5.5 SP2,WinCC V7.0 SP3,IP地址192.168.1.1。

配置过程涉及组态OPC服务器,连接S7-200 SMART,然后在TIA博图STEP7的PC站连接属性中统一连接名称,便于Excel引用。在Excel中,创建一个包含TagType、Level、ShortName、RTName、DataType、AccessRights等列的变量表,确保文件夹名和变量名不包含中文。保存为CSV格式,导入SIMATIC NET的符号表编辑器,进行符号表的导入和编辑。

在PC1上,通过"Communication Settings"软件设置OPC服务器,导入符号表后,即可在OPC SCOUT V10和WinCC中看到导入的变量。对于PC2,使用"Configuration Console"进行类似操作,但要注意从V8.2版本后,组态设置有所变化。

通过符号表,可以有效简化OPC服务器的配置过程,减少手动输入的工作量,并方便在不同项目中复用。

c++ 符号表分离———objcopy(调试信息挂载)

在进行游戏项目开发时,我们发现使用release版本的服务器程序在运行过程中出现宕机情况,并且核心文件通过gdb查看时发现堆栈被破坏,怀疑是由于指针和数组使用不规范引起的。为了深入调试问题,我们尝试使用gdb查看debug版本中的core文件,却发现效果并不理想。对比debug和release版本,我们发现release版本在编译时已排除了调试信息,并使用了最高级别的优化选项(-O3)。

经过研究,我们了解到debug版本在编译时使用了-g3选项,这使得可执行文件包含调试信息。为了在保证效率的同时拥有符号信息,我们开始探索使用linux下的指令objcopy来实现符号表的分离。通过一系列操作,我们得以生成包含符号信息的文件以及去除符号信息的精简执行文件。

首先,我们利用main.cpp文件进行编译,生成了一个release版本的可执行文件(mainO3)。通过readelf-S命令查看其段信息,发现虽然mainO3的可执行文件并未包含调试信息,但仍然存在debug调试信息。这时,我们尝试使用objcopy命令进行符号表的分离,成功地生成了符号表文件(mainO3.symbol)和精简执行文件(mainO3.bin)。尽管大小变化不大,但通过比较我们发现,符号表文件与原始release文件大小相当。

接着,我们生成了一个包含debug信息的可执行文件(maingo)。同样地,我们利用objcopy命令进行符号表的分离,生成了符号表文件(maingo.symbol)和精简执行文件(maingo.bin)。比较三个文件,我们发现debug版本的可执行文件maingo的大小显著大于release版本的mainO3。同时,我们注意到符号表文件maingo.symbol的大小与maingo相当,而剥离后的精简执行文件maingo.bin则要小得多。

接下来,我们通过在gdb中加载可执行文件,并设置断点、执行程序以及查看局部变量,来对比release版本、debug版本和符号表分离后的maingo.bin在调试过程中所能提供的信息。结果显示,release版本在调试时无法查看到符号信息,难以定位问题。而debug版本则可以清晰地查看到文件名、执行行数、代码及局部变量值,提供了有效的调试支持。符号表分离后的maingo.bin在执行时同样无法查看到符号信息,与release版本一致。

然而,我们发现可以通过在gdb启动时使用–s指令指定符号表文件,来解决无法查看符号信息的问题。这表明,即使对精简执行文件挂载了符号表,gdb在调试过程中仍无法显示函数信息和局部变量值。尽管如此,我们仍可以通过挂载符号表在一定程度上保留了调试功能,并且能够在不降低程序效率的同时,确保了核心功能的可用性。最后,我们发现将源文件放置在统一执行目录下可以获取更多的信息,虽然无法查看源代码,但仍然能够查看文件中的局部变量值,这一方法在部署优化后的文件时提供了灵活性。

阅读剩余
THE END