作者 | 主题 |
---|---|
东方红一红 版主 经验值:16176 发帖数:6606 精华帖: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
知其道,用其妙!
|