| 作者 | 主题 |
|---|---|
|
仪表工1 游士 经验值:165 发帖数:36 精华帖:0 |
楼主
主题:求高手帮我看段程序,要详细每段讲解, 1段 TAR1 #T_AR1 // SAVE ADRESSREGISTER AR1 TAR2 #T_AR2 // SAVE ADRESSREGISTER AR2 2段 L P##OUT_ANY // START ADRESS OF ANY-POINTER LAR2 // INTO AR2 L B#16#10 // ENTER SYNTAX-ID T B [AR2,P#0.0] // INTO ANY-POINTE 0 BYTES L #DAT_TYP L W#16#0 <>I JC NIL L B#16#0 JU TYPE NIL: L #DAT_TYP L W#16#1 <>I JC BOOL L B#16#1 JU TYPE BOOL: L #DAT_TYP L W#16#2 <>I JC BYTE L B#16#2 JU TYPE BYTE: L #DAT_TYP L W#16#3 <>I JC CHAR L B#16#3 JU TYPE CHAR: L #DAT_TYP L W#16#4 <>I JC WORD L B#16#4 JU TYPE WORD: L #DAT_TYP L W#16#5 <>I JC INT L B#16#5 JU TYPE INT: L #DAT_TYP L W#16#6 <>I JC DWOR L B#16#6 JU TYPE DWOR: L #DAT_TYP L W#16#7 <>I JC DINT L B#16#7 JU TYPE DINT: L #DAT_TYP L W#16#8 <>I JC REAL L B#16#8 JU TYPE REAL: L #DAT_TYP L W#16#9 <>I JC DATE L B#16#9 // ELSE LOAD AREA TYPE "DATE" JU TYPE // USE TYPE DATE: L #DAT_TYP // LOAD TYPE OF DATA L W#16#A // IF TYPE OF DATA <>I // <> "TIME_OF_DAY" THEN JC TOD // ASK FOR TOD (TIME_OF_DAY) L B#16#A // ELSE LOAD AREA TYPE "TIME_OF_DAY" JU TYPE // USE TYPE TOD: L #DAT_TYP // LOAD TYPE OF DATA L W#16#B // IF TYPE OF DATA <>I // <> "TIME" THEN JC TIME // ASK FOR TIME L B#16#B // ELSE LOAD AREA TYPE "TIME" JU TYPE // USE TYPE TIME: L #DAT_TYP // LOAD TYPE OF DATA L W#16#C // IF TYPE OF DATA <>I // <> "S5TIME" THEN JC S5TI // ASK FOR S5TIME L B#16#C // ELSE LOAD AREA TYPE "S5TIME" JU TYPE // USE TYPE S5TI: L #DAT_TYP // LOAD TYPE OF DATA L W#16#E // IF TYPE OF DATA <>I // <> "DATE_AND_TIME" THEN JC DT // ASK FOR DT (DATE_AND_TIME) L B#16#E // ELSE LOAD AREA TYPE "DATE_AND_TIME" JU TYPE // USE TYPE DT: L #DAT_TYP // LOAD TYPE OF DATA L W#16#13 // IF TYPE OF DATA <>I // <> "STRING" THEN JC STRI // ASK FOR STRING L B#16#13 // ELSE LOAD AREA TYPE "STRING" JU TYPE // USE TYPE STRI: L #DAT_TYP // LOAD PARAMETER TYPE OF DATA L W#16#17 // IF PARAMETER TYPE OF DATA <>I // <> "BLOCK_FB" THEN JC BLFB // ASK FOR BLOCK_FB L B#16#17 // ELSE LOAD PARAMETER TYPE "BLOCK_FB" JU TYPE // USE TYPE BLFB: L #DAT_TYP // LOAD PARAMETER TYPE OF DATA L W#16#18 // IF PARAMETER TYPE OF DATA <>I // <> "BLOCK_FC" THEN JC BLFC // ASK FOR BLOCK_FC L B#16#18 // ELSE LOAD PARAMETER TYPE "BLOCK_FC" JU TYPE // USE TYPE BLFC: L #DAT_TYP // LOAD PARAMETER TYPE OF DATA L W#16#19 // IF PARAMETER TYPE OF DATA <>I // <> "BLOCK_DB" THEN JC BLDB // ASK FOR BLOCK_DB L B#16#19 // ELSE LOAD PARAMETER TYPE "BLOCK_DB" JU TYPE // USE TYPE BLDB: L #DAT_TYP // LOAD PARAMETER TYPE OF DATA L W#16#1A // IF PARAMETER TYPE OF DATA <>I // <> "BLOCK_SDB" THEN JC BSDB // ASK FOR BLOCK_SDB L B#16#1A // ELSE LOAD PARAMETER TYPE "BLOCK_SDB" JU TYPE // USE TYPE BSDB: L #DAT_TYP // LOAD PARAMETER TYPE OF DATA L W#16#1C // IF PARAMETER TYPE OF DATA <>I // <> "COUNTER" THEN JC COUN // ASK FOR COUNTER L B#16#1C // ELSE LOAD PARAMETER TYPE "COUNTER" JU TYPE // USE TYPE COUN: L #DAT_TYP // LOAD PARAMETER TYPE OF DATA L W#16#1D <>I JC TIMR L B#16#1D JU TYPE TIMR: L B#16#2 TYPE: T B [AR2,P#1.0] L #DAT_LEN T W [AR2,P#2.0] L #DB_NO T W [AR2,P#4.0] T #BLOCK_DB_NO L 0 ==I JC FLAD L P#DBX 0.0 JU OFFD FLAD: L P#M 0.0 OFFD: L #DB_BYTE SLD 3 +D L #DB_BIT +D T D [AR2,P#6.0] 3段 OPN DB [#BLOCK_DB_NO] 4段
L D [AR2,P#6.0] LAR1 TAR1 #ADDRESS_DESTINATION L #DAT_LEN L 2 -I T #DAT_LEN_SUB_2 L #DAT_LEN_SUB_2 L 2 /I T #LOOP_LIM T #DAT_LEN_SUB_2 SLD 3 AD DW#16#FFFFFFF T #DB_BYTE_LEN L #DB_BYTE_LEN L #ADDRESS_DESTINATION +D T #ADDRESS_DESTINATION L #DAT_LEN_TR SLD 3 AD DW#16#FFFFFF T #DB_BYTE_LOW A #EN JCN END L 0 CYCL: T #LOOP L #LOOP L #DAT_LEN_SUB_2 >=I JC A7d0 L #ADDRESS_DESTINATION L #DB_BYTE_LOW -D T #ADDRESS_SOURCE L DBD [#ADDRESS_SOURCE] T DBD [#ADDRESS_DESTINATION] L #ADDRESS_SOURCE T #ADDRESS_DESTINATION L #LOOP L 1 +I JU CYCL A7d0: L #IN_V T W [AR1,P#0.0] END: NOP 0 5段 LAR1 #T_AR1 // RESTORE ADRESSREGISTER ADR1 LAR2 #T_AR2 // RESTORE ADRESSREGISTER ADR2 |
|
潇潇 侠客 经验值:625 发帖数:75 精华帖:6 |
5楼
主题:回复:求高手帮我看段程序,要详细每段讲解,不知道源程序是不是经过测试,因为程序存在违背西门子程序基本原则的问题。 主要是AR2, AR2指向的是FB块背景数据块的起始地址,如果对其赋值,会导致所有读取背景数据块的程序都相应的偏移。所以读到的是错误的数据。(如果有误请大家指正) 我注释了,做了修改。功能主要是每触发一次,数据向高地址根据设定值#i_DAT_LEN_TR做偏移,并用数值i_IN_V填充数据块的起始地址: L #IN_V T W [AR1,P#0.0] 仅供参考。 可阅读的西门子手册是: |
|
宁超 至圣 经验值:11563 发帖数:1009 精华帖:39 |
8楼
主题:回复:求高手帮我看段程序,要详细每段讲解,这个程序应该是个FC,AR2的使用只是在FB中受限制,西门子也没有什么不能使用AR2在FBFC中的编程原则,在FB中用户要使用AR2主要还是因为想要方便,因为指令提供LAR2,TAR2,+AR2这些方便运算,只是使用前要保存好,使用后要恢复。 楼主的功能块中而已经做了相应的处理。 |