作者 | 主题 |
---|---|
东方红一红 至圣 经验值: 16390 发帖数: 6664 精华帖: 50 |
楼主 2020-12-23 13:09:43
主题:S7-300/400的DB块指针寻址编程案例 前不久,遇见多为网友同行发帖询问DB块内部指针寻址的原理和编程问题。抽空翻出十几年前的项目,找到合适的案例,特分享如下。案例有3方面的示范内容。 1,指针的计算和寻址编程; 2,循环指令的编程; 3,BCC的计算算法; 分享案例是用于通讯校验和BCC的计算,实际项目案例,经过运行验证。程序借用注意事项: 4,如果寻址的单元不同于案例,无论byte、word、dword,模仿案例的计算思路,修改即可。 5,求和注意循环次数对应的求和单元的长度。 6,案例代码如下: FUNCTION "BCC Calculation" : VOID TITLE = VERSION : 0.1 VAR_INPUT DB_no : BLOCK_DB ; StartDBBno : INT ; Byte_Len : INT ; END_VAR VAR_OUTPUT BCC : BYTE ; END_VAR VAR_TEMP LoopCounter : BYTE ; XorWordSumLoByte : BYTE ; XorWordSum : WORD ; END_VAR BEGIN NETWORK TITLE = OPN #DB_no; L P#0.0; TAR1 ; L #StartDBBno; DEC 1; //因为DBB(x)是DBW(x-1)的低字节 L P#1.0; *I ; +AR1 ; L 0; T #XorWordSum; L #Byte_Len; next: T #LoopCounter; L #XorWordSum; L DBW [AR1,P#0.0]; XOW ; T #XorWordSum; +AR1 P#1.0; L #LoopCounter; LOOP next; L #XorWordSum; T #XorWordSumLoByte; L #XorWordSumLoByte; T #BCC; END_FUNCTION
知其道,用其妙!
|
weiyt 奇侠 经验值: 9817 发帖数: 1592 精华帖: 14 |
1楼 2020-12-23 13:16:33
主题:回复:S7-300/400的DB块指针寻址编程案例 |
东方红一红 至圣 经验值: 16390 发帖数: 6664 精华帖: 50 |
2楼 2020-12-23 13:20:42
主题:回复:S7-300/400的DB块指针寻址编程案例 @ weiyt,就是利用地址寄存器AR1/AR2,实现DB单元的指针寻址。
知其道,用其妙!
|
yangchunbaixue 侠圣 经验值: 3772 发帖数: 556 精华帖: 0 |
3楼 2020-12-23 21:35:14
主题:回复:S7-300/400的DB块指针寻址编程案例 |
东方红一红 至圣 经验值: 16390 发帖数: 6664 精华帖: 50 |
5楼 2020-12-24 11:00:01
主题:回复:S7-300/400的DB块指针寻址编程案例 感觉没有太多的东西可说。 AR1/AR2的原理和使用,STEP7或博途在线帮助里有详细说明。 指针寻址关注的要素就两点:一是基址,二是偏移量。 AR1/AR2存储的就是基址,偏移量就是[AR1,P#0.0]里的P#0.0。具体地址编码可以不关心,按系统要求去编码寻址即可。 具体应用中的基址和偏移量定义是不一样的,需要根据具体的数据结构特点及检索数据的方式来处理。案例只是给出了一种方式和思路。 充分理解需要自己上机测试,经过自己思考、预判、验证后,理解就生动鲜活了。
知其道,用其妙!
|
黑猫警长W 至圣 经验值: 19057 发帖数: 2487 精华帖: 1 |
6楼 2020-12-24 13:21:19
主题:回复:S7-300/400的DB块指针寻址编程案例 |
天芯 至圣 经验值: 20067 发帖数: 2182 精华帖: 0 |
7楼 2020-12-24 14:35:17
主题:回复:S7-300/400的DB块指针寻址编程案例 |