恭喜,你发布的帖子
发布于 2016-04-03 20:18:34
6楼
Decoding BCD --> bit FC62
This block decodes BCD values into bits in the target area The address should
be
specified at parameters "BCD_Low" and "BCD_High", in which the value to be
decoded is located. The "FirstNum" and "LastNum" parameters specify the
limiting
range of the value to be decoded.
At the "FirstByte" parameter, the first byte should be specified in which the
result is to be transferred. Inputs, outputs, flags, data blocks and instance
data blocks are permissible address ranges.
The block only starts to run when a 1 signal is available at the "enable"
parameter and if the same display number is entered at "display mask" parameter
and at "S_E0_display_mask_.." parameter-
The "Group" parameter has a 1 signal if a value was decoded.
KNOW_HOW_PROTECT
NETWORK 1 查询在FIRSTBYTE中输入的是什么地址
L 0 // Lokaldaten
T #FirstByteTyp
L P##FIRSTBYTE //取指针,比如实参输入为DB62.DBB5
LAR1 //指针参数占用6个字节
L D [AR1,P#0.0] //区域间间接寻址,D为双字, 取指针指向的数值
SRD 8 // 右移动8位
T #SchmierDWort
SRD 8 // Ist hier ein Wert eingetragen
T #DB_Nummer // 右移16位后,为DB数,
OPN DI [#DB_Nummer] // 把DB块按DI打开
L #SchmierDWort
L B#16#FF //取地址标识符代码。
AW
T #SchmierDWort
L B#16#81
==D
L 1 // Eingang 输入I 代码81
JC erg1
L #SchmierDWort
L B#16#82
==D
L 2 // Ausgang 输出Q 代码82,
JC erg1
L #SchmierDWort
L B#16#83
==D
L 3 // Merker M 代码83
JC erg1
L #SchmierDWort
L B#16#84
==D
L 4 // Datenbaustein 数据块 代码84
JC erg1
L #SchmierDWort
L B#16#85
==D
L 5 // Instanz-Datenbaustein 共享数据块
JC erg1
L #SchmierDWort
L B#16#86
==D
L 2 // Lokaldaten nicht zulaessig 不允许的本地数据块
BEC
erg1: T #FirstByteTyp
L D [AR1,P#2.0] // Bereich der Daten ermitteln 数据调查的范围
SLD 8 //左移8位,在右移8位是为了去掉开头的两个1字节
SRD 8
T #SchmierDWort // Byte-Bit-Adresse 字节-位-地址
L 7 // Byte ausblenden 字节减少
AW //后3位表示位,比如M5.3中的3
L 0 // falls Bits projektiert
<>D //由7来判断是否带有输入地址是否带有BIT。
L 1 // falsche Parametrierung 虚假的参数
BEC //如果带有BIT,比如M5.3那就结束块调用。
L #SchmierDWort //但指针型输入,如P#db62.dbx3.0不算带有BIT
SRD 3 //他等同于直接输入DB62.DBB3
T #ByteBereich //输入的字节数,对于DB62.DB6他是6,对于MB5他是5
NETWORK 2 BCD-Wert in DoubleINT wandeln BCD数值改变成双整数
AN #BCD_CODE
JC int
L #FKT_HIGH
SLW 8
L #FKT_LOW
+D
BTD
T #BitWert
JU int2
int: NOP 0
L #FKT_HIGH
SLW 8
L #FKT_LOW
+I
T #BitWert
int2: NOP 0
NETWORK 3 Berechnung Anzahl Byte 计算字节数量
L #LASTNUM
L #FIRSTNUM
-D
+ 1 // 计算有多少个功能
T #AnzNum
L 8
/D // 计算有多少个字节
T #AnzBytes
L 8
*D
L #AnzNum // 在乘以8来进行对比校验 (没有余数)
==D
JC NW3E
L #AnzBytes //如果在上面的校验中有余数
+ 1 //就是说功能数不是8的倍数
T #AnzBytes //那么此外多出1个字节
NW3E: NOP 0
NETWORK 4 Pr黤en auf maximalen Datenbereich vorhanden 可用的最大数据范
L #AnzBytes //Anzahl ben鰐igter Datenbereiche aufgrund dekodierter Signale
L #ByteBereich //1. Byte laut Parametrierung
+D //letztes Datenbyte
L #FirstByteTyp
JL erg5 //跳转表格
JU erg6
JU TypE //E输入地址
JU TypA //A输出地址
JU TypM //M地址
JU TypD //DB块
JU TypD //DI块
erg5: JU erg6
TypE: TAK //letztes Datenbyte
L 2047 //letztes Eingangsbyte Byte 2047
>I
L 3 //Fehlerkennung Datenbereich zu klein
BEC //wenn Datenbereich zu klein, dann BEB
JU erg6
TypA: TAK //letztes Datenbyte
L 2047 //letztes Ausgangsbyte Byte 2047
>I
L 3 //Fehlerkennung Datenbereich zu klein
BEC //wenn Datenbereich zu klein, dann BEB
JU erg6
TypM: TAK //letztes Datenbyte
L 1023 //letztes Merkerbyte Byte 1023
>I
L 3 //Fehlerkennung Datenbereich zu klein
BEC //wenn Datenbereich zu klein, dann BEB
JU erg6
TypD: TAK //letztes Datenbyte
L DILG //L鋘ge des DBs
>D
L 3
BEC
erg6: NOP 0
NETWORK 5 Datenbereich loeschen 删除数据范围
L #AnzBytes
M001: DEC 1 // Schleife bis alle Bytes gel鰏cht
T #AnzBytes
SLW 3
L #ByteBereich
SLD 3
+D
LAR1
L #FirstByteTyp
JL erg3
JU erg4
JU Typ1 // E输入
JU Typ2 // A输出
JU Typ3 // M地址
JU Typ5 // DB
JU Typ5 // DI
erg3: JU erg4
Typ1: L 0 // E输入
T IB [AR1,P#0.0]
JU erg4
Typ2: L 0 // A输出
T QB [AR1,P#0.0]
JU erg4
Typ3: L 0 // M地址
T MB [AR1,P#0.0]
JU erg4
Typ5: L 0 // DB/DI
T DIB [AR1,P#0.0]
erg4: L 0
L #AnzBytes
==D
JCN M001
NETWORK 6 Sammelbit Ruecksetzen
SET
R #GROUP
NETWORK 7 Freigabe 使能
O( // HMI反馈的屏幕代码DB59.DBB79+80
L #FIRSTNUM //要在第一个是最后一个之间
L #BitWert //不然就BEC结束调用
>D
)
O(
L #LASTNUM
L #BitWert
<D
)
O(
L #DISPLAY_MASK // 译码页面要一致,不然后BEC结束调用
L #S_E0_DISPLAY_MASK
<>I
)
ON #ENABLE // 要有使能,不然BEC结束调用
BEC
NETWORK 8 Datenbit's setzen 数据放置
L #BitWert
L #FIRSTNUM
-D
L #ByteBereich
SLD 3
+D
LAR1
SET
L #FirstByteTyp
JL eee1
JU eee2
JU Set1 // E输入
JU Set2 // A输出
JU Set3 // M地址
JU Set5 // DB
JU Set5 // DI
eee1: JU eee2
Set1: = I [AR1,P#0.0]
JU eee2
Set2: = Q [AR1,P#0.0]
JU eee2
Set3: = M [AR1,P#0.0]
JU eee2
Set5: = DIX [AR1,P#0.0]
eee2: = #GROUP
L 0
请填写推广理由:
分享
只看
楼主