作者 | 主题 |
---|---|
成翔 游民 经验值:89 发帖数:3 精华帖:0 |
楼主 2020-08-24 11:07:39
主题:怎么间接寻址到具体位,或者说怎么通过一个变量定义我的起始位 用指令SHRB做一个移位程序,但是我的起始位是一个变量,是通过上面程序算出VW0等于1就是M10.1开始移位,VW0等于2从M10.2开始移位,以此类推,怎么实现这个功能 |
芳季 至圣 经验值:66564 发帖数:14742 精华帖:100 |
1楼 2020-08-24 11:35:32
主题:回复:怎么间接寻址到具体位,或者说怎么通过一个变量定义我的起始位 我有smart的库程序,我用导出功能,你可以用导入功能导到你的200里面。 SUBROUTINE_BLOCK 间接寻位:SBR1 TITLE=程序目的: // 本程序通过输入区号、字节号、位号,可以对输入I、输出Q、内部M、顺序S、部分系统SM、部分数据V等区域提取位的状。每个扫描周期都执行一次产生一个结果。目的在于根据输入参数,在可变的情况下把某个点信号输出到指定位置。 // // 使用范围: // 可以无条件调用,可以有条件调用,可以在中断中使用。可以多次调用。 // // 程序接口: // 区 地址的区域编码。I=0;Q=1;M=2;S=3;SM=4;V=8。请不要输入其他数值。 // 字节 该区域中的字节偏移量。 // 位 该字节中的位号。 // 以上数值请不要输入超过寻址范围的值,会发生间接寻址错的报警。 // 执行过程: // 原理上把输入的区参数、字节参数填入间接寻址指针中。先找到该字节。然后移位指令把目标位移到0位,然后0位进行输出。 // 补充说明: // 程序不能对全部区全部字节进行寻址。 // 程序因调试条件局限,可能不能适应你的程序使用,请在使用前自行检查程序后再使用。 // 程序密码: // 作者:芳季2019-8-18 VAR_INPUT 区:BYTE; // I 0;Q 1;M 2;S 3;SM 4 字节:BYTE; 位:BYTE; END_VAR VAR_OUTPUT Q:BOOL; END_VAR VAR tempD:DWORD; END_VAR BEGIN Network 1 // 建立IB0的指针在tempD。 // 把字节编号注入到指针。 // 用新的指针进行间接寻址,右移字节到临时字节。 // 取得临时字节的最低位,就是意图中寻址的输入点。 LD SM0.0 MOVB LB0, LB4 MOVW 0, LW5 MOVB LB1, LB7 MOVB *LD4, LB8 SRB LB8, LB2 A L8.0 = L3.0 END_SUBROUTINE_BLOCK 希望这个是你需要的。 |