7
6ES7221-1BF22-0XA8常规
L W#16#87 //为“V”区域载入码
T LB[AR1,P#6.0] //传送到ANY变量
CALL FCxy
source1: = #target //传送自创建的ANY指针
source2: = P#L 0.0 BYTE 8 //传送L数据区
寻址与通过ANY指针寻址的区别:
下图显示了寻址与通过自创建ANY指针寻址间的区别。在这种情况下“87”码不传送,因此ANY指针指向其本地区域。
146:怎样在DB内进行间接寻址?
请参照:
在DB内进行间接寻址例子
147:下面是一个在STEP7软件中实现简单指针寻址的例子程序,您可以参考它的结构实现您的指针寻址功能?
siemens指针寻址例子_cpu315
148:地址和符号寻址的定义和区别是什么?
在STEP 7程序中要用到I/O信号、位寄存器、计数器、定时器、数据块及功能块。在程序中可以采用直接地址,或者便于读程序的符号寻址,例如Motor_A_On,或采用你的公司或行业常用的代码。这样在你的用户程序中就可以通过符号来寻址。
地址:地址由地址标识符和存储器的位置组成,例如Q1.0,I1.1,M2.0, FB21等。
符号地址:如果为地址一个符号名,程序会便于阅读和查错。
STEP 7 可以自动将符号名翻译成所需的地址。如果要用符号名存取ARRAY、STRUCT、数据块、局部数据、逻辑块、以及用户自定义数据类型,为地址一个符号名。
例如,可以为Q0.0 一个符号名MOTOR_ON,然后在程序中将MOTOR_ON作为一个地址使用。使用符号地址将您的过程控制项目中的元件与程序中的元件相对应。
注意:在符号名中不允许使用两个连续的下划线,例如MOTOR__ON。
编程支持:LAD、FBD、STL中地址、参数、块名可用地址或符号表示。
用菜单命令View > Display > Symbolic Representation,可以切换地址和符号地址
为了使用符号地址编程加容易,可以同时显示地址和符号名。使用菜单命令 View > Display > Symbol Inbbbbation来。这就意味着STL语句的注释包含了多的信息。不能在该界面下进行修改,只能在符号表(symbol table)或变量声明表(variable declaration table)中进行修改。
149:S7-300/400系统存储区域共有多少种?
S7 CPU的系统存储区域分为下表中列出的区域。在程序中可以根据相应的地址直接读取数据。
150:如何把一个DATE_AND_TIME变量转换为bbbbbb变量?
为了以日期/时间字符串(bbbbbb)形式显示DATE_AND_TIME变量,DATE_AND_TIME 变量的字节转换为相应的CHAR字符。
读取DATE_AND_TIME 变量的字节并从这两位数所在ASCII码中创建位。将确定了的CHAR字符存储在字符串的期望位置。
示例:
L 字节年
SLD 12
SRW 4
SRD 8
L W#16#3030
+ I
T 数字字符年
也可以用相反顺序将一个bbbbbb格式的日期/时间字符串转换为一个DATE_AND_TIME变量
[NextPage] [NextPage] [NextPage] |
10. lc 程序的下载问题
问:在一个网络中(比如 profibus),有多个 plc,在 step7 中硬件组态中也有 多个 plc,所编程序是整个网络系统的程序,那么程序下载的时候,如何确定哪 些程序被下载到哪一个 plc 中?
答:MPI 网络中多个 CPU(S7-300/400)及 HMI PANEL(WINCE BASED)的程序下载
1. 按照你所需要的网络,完成硬件安装及通讯线的连接.
2. 对所有的 CPU,默认地址都是 2,所以可以分别上电,下载硬件配置与程序.
3. 对于 PANEL 可以通过其控制面板的 S7-TRANSFER 设置网络地址,然后通过 MPI 网络直接 下载 PANEL 的组态程序.注意,此时 S7-TRANSFER 中的 ONLY MASTER ON THE BUS 不能被 选中.
4. 当使用 CP5511/5611 以点对点的方式对 PANEL 下载程序时,S7-TRANSFER 中的 ONLY
MASTER ON THE BUS 被选中.
11. 300 中,如何实现 S7-200 中 SM0.3 的功能
问:在 S7-300 中,如何实现 S7-200 中 SM0.3 的功能?:即开机后进入 RUN 状态,ON 一个 扫描周期,请各位赐教.
答:你在 OB100 中调用 SFB21 “RESUME”,原理及注意事项如下。
If there is a rising edge at control bbbbb REQ, SFB 21 "RESUME" activates a hot restart on the remote device selected with the ID.
The following conditions must be met if the remote device is a CPU:
1、The CPU must be in the STOP mode.
2、The key switch of the CPU must be set to "RUN" or "RUN-P."
3、When you created the configuration with STEP 7, you allowed for a manual hot restart.
4、There must be no condition preventing a hot restart.
Once the hot restart has been completed, the device changes to the RUN mode and sends a positive execution acknowledgement. When the positive acknowledgement is bbbbuated, the status bbbbbeter DONE is set to 1. Any errors that occurred are indicated in the status bbbbbeters ERROR and STATUS.
A restart can only be activated again in the same remote device after the previous hot restart has been completed.
12. 关于 IM153-2 配置
问:我的 S7-400H 系统中 IM153-2 的定货型号是 6ES7153-2AR00-0XA0,但是在 S7V52 中 HW CONFIG 里无法找到此型号的模块,请问是不是新产品 在如何硬件配置里如何处理?
答:由于是冗余配置,6ES7153-2AR00-0XA0 是由两块 6ES7153-2AA02-0XB0 组成。硬 件配置时插入 6ES7153-2AA02-0XB0。
13. 一些奇怪的问题
问:1、能不能用 WINCC 直接控制 ET200S?不用任何 PLC,系统的功能很简单,算法在 WINCC 中实现。现在的问题是 WINCC 能直接控制 ET200S 吗?(我在一个系统看到这样 的结构,不知道能不能实现)
2、SFC15,SFC16 在读写智能从站时用,过 4 个 BYTE 的话就需要 SFC15,SFC16? 如果我一个一个字节读的话(读很多个)是不是就没有这个限制了。
答:请注意:S7-200 与 ET200S 是两个不同的东东。
ET-200S 与 WINCC 连,方法:
1、带 CPU 的 IM151+CP5611,原理过程与 S7-300 类似;
2、如 SHINE 所说,cp5611/5613+SIMATIC NET,原理过程与连 EM277 类似。通过 COM_PROFIBUS 将 CP5611/5613 定义成一类主站,并组态相应从站,从而实现对从站数 据的读写。如果有逻辑的话,需借助脚本语言。
问:在FC块中TEMP下自定义的临时变量,程序运行的时候存在哪个区域呢?比如说建立一个名为A的临时变量,地址为0.0,这个变量使用时会不会与M0.0冲突?还有,两个不同的FC块中,临时变量地址可否一样?比如说FC1中的地址为0.0的临时变量会不会与FC2中地址为0.0的临时变量冲突呢?
答:在搞清楚临时变量的地址之前,明白S7-300/400PLC用户存储区的分类,PLC的基本仓储区是系统存储区、装载存储区和工作存储区;而程序运行时临时变量TEMP就储存在工作存储器的“临时本地数据存储区(L堆栈)’
M0.0 位于系统存储区中,而临时变量位于工作存储区,是两个不同的存储区,是不可能冲突的,临时变量用L0.0,LB1表示,用符号变量A表示时要加#;
两个不同的FC块中,临时变量地址可以一样,不会发生冲突;因为TEMP变量为临时局部数据存储区,在CPU内部,由CPU根据所执行的程序快的情况临时分配。一旦程序块执行完成,该区域被收回,在下一个扫描周期,执行到该程序时再重新分配TEMP存储区。
1.WINCE快捷方式结构
WINCE的快捷方式和WIN2K,XP的不同,只是一个后缀名为.LNK的文本文件.
其格式如下:
数字#路径
比如,有个快捷方式写法如下:
23#\bbbbbbs\ToolViewer.exe
指的是指向bbbbbbS文件夹下的Toolviewer.exe可执行文件.数字究竟代表的是什么意思,我也不太清楚;有一说法是#后的ACSII字符 的数量,但如果把上述例子改为1#\bbbbbbs\ToolViewer.exe也可正常运行,但去掉数字则系统无法识别.虽然可以正常使用,但建议还 是按照文档#之后的ACSII字符数量填写.
2.如何把快捷方式加到内核中
设我们有一快捷方式EnglishExp.lnk,要将其加到内核中.
在PB环境中打开工程,在project.bib文件的FILES字段中添加:
EnglishExp.lnk $(_WINCEROOT)\Tbbbb\MyAPPC\EnglishExp.lnk NK H
其中 $(_WINCEROOT)指的是PC机子上PB安装的根目录,H指的是文件属性,意义代表如下:
S:系统
H:隐藏
R:压缩的资源文件
C:压缩文件
U:非压缩文件
3.如何把快捷方式放到桌面
语法如下:Directory(”欲拷贝至的文件夹”):-File(”改的名称”,”要拷贝的文件”)
设我们有一快捷方式EnglishExp.lnk,要将其放到桌面,并把快捷方式的名称改为”英语”
在PB的project.dat文件加入此句:
Directory(”\bbbbbbs\LOC_DESKTOP_DIR”):-File(”英语.lnk”,”\bbbbbbs\CEnglishExp.lnk”)
包含在内核里面的文件全部释放到”\bbbbbbs”文件夹下.
LOC_DESKTOP_DIR指的是本地桌面.在PB中,常用的还有如下宏定义:
LOC_DESKTOP_DIR: 桌面
LOC_MYDOCUMENTS_DIR: My Documents
LOC_PROGRAMFILES_DIR: Program Files
LOC_FAVORITES_DIR: Favorites
LOC_RECENT_DIR: Recent
LOC_MYDOCUMENTS_DIR: My Documents
LOC_HELP_DIR: Help
多的定义可以在ceshellfe.str文件中找到
4.快捷方式的小头
在PC机的操作系统中可以通过修改注册表来取消快捷方式左下角的小头,但在WINCE中注册表没有关于取消小头的键值(可能我没找到^_^).在这里我采用的是直接修改资源文件的做法.
打开shcore.res文件,其中文的路径在 $(_WINCEROOT)\PUBLIC\COMMON\OAK\LIB\ARMV4I\RETAIL\0804\,然后将1205的ICO的小头删 掉即可.注意,不是删除ID为1205的ICO图标,是删除ICO图标中的内容.
5.微软应用程序的快捷方式
如果在PB中添加了微软的应用软件,便会在桌面和程序中添加其快捷方式;如果觉得快捷方式碍眼,可以将其注释掉再编译即可.
现在列出一些dat文件中定义的微软应用软件的快捷方式:
wceappsfe.dat (C:\WINCE420\PUBLIC\WCEAPPSFE\OAK\FILES\),内含:pmail,wordpad
wceshellfe.dat (C:\WINCE420\PUBLIC\WCESHELLFE\OAK\FILES\),内含:iexplore,帮助文档在”help”文件夹的快捷方式
viewers.dat (C:\WINCE420\PUBLIC\VIEWERS\OAK\FILES\), 内含:pdfviewer,imageviewer,Presviewer,Docviewer
directx.dat (C:\WINCE420\PUBLIC\DIRECTX\OAK\FILES\),内含:Media Player,DVD Player
6. 修改默认shell
其实让一个程序在wince里启动和bbbbbbs里差不多,直接设置其为启动项,这个有几个方法。一个就是制作一个快捷方式,指向我们的应用程序如app.exe,然后将快捷方式放到\bbbbbbs\startup下面。
步骤如下:(设app.exe已经拷贝到bbbbbbs下面)
在pb中创建一个文件,文件类型选txt,然后命名为.lnk后缀,设名字为test.lnk
编辑其内容为: 16#\bbbbbbs\app.exe
备注:的16是# 后面所有字符的总和,包括空格。Wince的帮助文档上说这么定义就行,但是我尝试后,后down到目标机上面时提示找不到文件,在wince里查看这 么创建的test.lnk的属性,发现其指向\bbbbbbs\app.exe后面还有两个方框,因此不对,我的解决方法是修改test.lnk的内容为 16#”\bbbbbbs\app.exe”
编辑好lnk文件内容后在pb中修改project.bib
在files段后面添加下面一行:(和添加别的文件到image中类似,也要在pb的flatbbbb菜单的setting下添加build语句,同上,不再赘述)
test.lnk $(_FLATRELEASEDIR)\test.lnk NK S
project.dat
增加下面一行:
Directory(”\bbbbbbs\startup”):-File(”test.lnk”,”\bbbbbbs\test.lnk”)
这样后系统启动后就会自动启动我们的程序了。
另外一种方法是编辑注册表:在project.reg中添加如下内容
[HKEY_LOCAL_MACHINE\init]
“Launch80″=”app.exe”
“Depend80″=hex:14,00,1e,00
这个是设定启动顺序,launch后面的数字越大的越是后启动,Depend80后面的依赖项,为16进制,上面的语句表明依赖项为launch20 定义的device.exe和launch30中定义的gwes.exe, 注意Launch后面的数字范围为0到99 ,此范围之外的将不会有效果。
这样两种方法的效果都是系统都是系统先启动资源管理器explorer.exe(就是看到的默认桌面),然后启动我们的程序,(如果利用 taskman shell然后去掉任务栏那么效果好)但是这样还不够,我们如何不显示桌面,直接显示我们的程序呢?
网上有人介绍的方法是去掉standard shell,但是我编译总是报错。我采用的方法是替换注册表中lauch50中的explorer.exe为我的app.exe,即搞定。
修改注册表的方法:先把带KITL的系统跑起来,在PB的TOOLS->Remote registry editor里修改,验有效后,再去修改platfrom.reg, 或者自己写个REG文件,然后在platbbbb.reg里INCLUDE进来 SYSGEN后确认PBWORKSPACE里相关项目的REL目录里reginit.ini文件里包含了自己做的修改后make image然后DOWNLOAD下去就OK了。
值得的是,我们介绍的步骤中那个修改平台setting,添加语句的,是因为我每次都是重新sysgen和build,如果只是简单的 make image的话(都是pb中的build OS菜单下的命令),那么将直接用release中的内容,因此也可以直接将文件放到release文件夹,然后改project.bib等实现往 image中添加文件。 同样,也可以直接修改release中的shell.reg中的launch50值为我们自己的程序(或者类似修改reginit.ini文件, reginit.ini文件存放有所有wince的静态注册表,来达到去掉桌面,直接启动我们程序的效果)。
注意,这么启动的程序,如果点击关闭,就会死机的,因为没有窗口运行了。实际运用中,当然不会让用户关闭我们的程序,除非他一起关闭系统。