恭喜,你发布的帖子
发布于 2021-12-04 11:52:30
4楼
//买的cpu是314-2 pn/dp默认输入点为24个,但是现在只需要用前16个。还买了一个拓展模块是16??16的,现在就是想让cpu的输入地址是I0.0到I1.7紧接着拓展模块上面的地址是I2.0daoI3.8这个需要在软件上面怎么设置(简单讲就是怎么更改cpu默认的结束地址,软件上面这个是灰色的改不了不知道有没有其他办法)//
首先物理地址是设定起始地址后连续的,例如DI32 点 当起始为I0.0 则其它地址是顺延的,最后一个I3.7
那么按照你说的第一个DI24 我只需要16个 ,扩展模块上 DI16 我用16个,我希望用连续的物理地址。
参考思路,DI24 I0.0------I2.7 DI16 I3.0---I4.7
L IB0
T DB1.DBB0
L LB1
T DB1.DBB1
L IB3
T DB1.DBB2
L IB4
T DB1.DBB3
//////////////////
在程序里 DB1.DBX0.0 ---DB1.DBX1.7 对应你需要的I0.0---I1.7 (I2.0---2.7 不用)
DB1.DBX2.0---DB1.DBX3.7 对应你需要的I2.0---I3.7 实际是I3.0--I4.7
以后程序只出现 DB1.DBX 即可,
这样逻辑控制永远不变,当DI/DO 损坏,仅仅,只需要更换DI/DO 点即可。
AI/AO 同理。
甚至当增加了隔离变送器后,DI/DO AI/AO 基本免维护,仅更换隔离变送器。
我的程序都是这样做的,逻辑系统出来,在根据工艺要求确认接口。
///以上是简单的,但是IB0 还是顺延的 I0.0---I0.7
下面是自由组合的。
FUNCTION_BLOCK FB21
TITLE = 'BOOL_TO_DWORD'
//
// Block Comment...
//
VERSION: '1.0'
AUTHOR: baikai
NAME: B_DW
FAMILY: baikai
know_how_protect
(* 将BOOL量转换为双字*)
VAR_INPUT
X0 : BOOL;
X1 : BOOL;
X2 : BOOL;
X3 : BOOL;
X4 : BOOL;
X5 : BOOL;
X6 : BOOL;
X7 : BOOL;
X8 : BOOL;
X9 : BOOL;
X10 : BOOL;
X11 : BOOL;
X12 : BOOL;
X13 : BOOL;
X14 : BOOL;
X15 : BOOL;
X16 : BOOL;
X17 : BOOL;
X18 : BOOL;
X19 : BOOL;
X20 : BOOL;
X21 : BOOL;
X22 : BOOL;
X23 : BOOL;
X24 : BOOL;
X25 : BOOL;
X26 : BOOL;
X27 : BOOL;
X28 : BOOL;
X29 : BOOL;
X30 : BOOL;
X31 : BOOL;
END_VAR
VAR_OUTPUT
// Output Parameters
OUT:DWORD;
END_VAR
VAR
NO:INT;
S1: ARRAY[0..31] OF BOOL;
S2 AT S1: DWORD;
END_VAR
FOR NO:= 0 TO 31 BY 1 DO
S1[0] := X0;
S1[1] := X1;
S1[2] := X2;
S1[3] := X3;
S1[4] := X4;
S1[5] := X5;
S1[6] := X6;
S1[7] := X7;
S1[8] := X8;
S1[9] := X9;
S1[10] := X10;
S1[11] := X11;
S1[12] := X12;
S1[13] := X13;
S1[14] := X14;
S1[15] := X15;
S1[16] := X16;
S1[17] := X17;
S1[18] := X18;
S1[19] := X19;
S1[20] := X20;
S1[21] := X21;
S1[22] := X22;
S1[23] := X23;
S1[24] := X24;
S1[25] := X25;
S1[26] := X26;
S1[27] := X27;
S1[28] := X28;
S1[29] := X29;
S1[30] := X30;
S1[31] := X31;
END_FOR;
OUT:= S2;
END_FUNCTION_BLOCK
/// X0---X31 自由输入端口,S2 为DB1.DBD0 是连续的,相当于把外部的信号,按照一定的顺序排列好,再去使用。
请填写推广理由:
分享
只看
楼主