FB651 用于 多语言转换
用于在三种语言之间切换消息视图(数据库视图)和消息归档(数据库归档)中的消息文本。在数据库视图和数据库归档中仅交换包含该字符串的两个长度信息的消息文本(字符串[54])。数据库视图中的所有其他数据和
数据库存档保持不变。
通过相应国家/地区标志中的按钮在HMI上切换语言。
控制器的CPU中每种语言都有八个数据块(TextLib)。每个数据块包含最大1024条消息,长度为54个字符(STRING [54])。
数据块包(每个语言变体1个包,每个DB 8个DB)仅在消息文本的语言上有所不同。结构,结构和消息号/ MsgID相同。
FB802可以最大实现3种语言变体。语言变体最初设置为:
-1:德语
-2:通用语言,例如英语
-3:简体中文
语言变体“ 1:德语”和“ 2:通用”对应于单字节字符(SBC)。简体中文的语言变体需要几(3)个字节来表示一个中文字符。
TextLib的DB号在关联的背景数据块(FB650的STAT区域)中指定为初始值。定义了以下数据库编号:
第一语言 第二语言 第三语言
TextLib:德语, 英文 中文
TextLib0 DB804 DB814 DB824
TextLib1 DB805 DB815 DB825
TextLib2 DB806 DB816 DB826
TextLib3 DB807 DB817 DB827
TextLib4 DB808 DB818 DB828
TextLib5 DB809 DB819 DB829
TextLib6 DB810 DB820 DB830
TextLib7 DB811 DB821 DB831
Notes DB文本库:
为了避免有关CPU上内存空间的可能瓶颈,“属性->通用部分2”中的DB文本库应具有“非保留”属性/复选标记。DB文本库不必存储在“数据保持存储器”中。
定义FB651,DB:
-----------------------------------------
-与所使用的(目标)语言无关(对于每个中文字符为3Byte的中文),消息文本长度也与字符串40相同。
-TextLib结构保持不变。
因此,对于每种(目标)语言,总是有8个DB TextLib,每个DB TextLib具有1024条消息,消息长度为字符串40。
-DB视图(DB802)包含20条消息。
-DB归档文件(DB803)包含250条消息。
一直使用的WINCC信息语言
FB651 用于信息语言的DB块切换
L 'LMsg'
T #Packet_ID.ID_1 传送字符串'LMsg'到#Packet_ID.ID_1里
U #Freigabe 如果有允许条件跳转到 IDOn处
SPB IDOn
L 'Libs'
SPA IDEn
IDOn: L '-On-' 将ON字符串传送到#Packet_ID.ID_2里
IDEn: T #Packet_ID.ID_2
16#850008a0 = P#DBX 276.0 使用的当前地址
L P##AktGewaehlteSprache
TAR2
UD DW#16#FFFFFF
+D
T #AnfangsAdresse.AktGewaehlteSprache 保存DB651的DBX276.0地址
16#85000920 = P#DBX 292.0
L P##SprachTextLibs
TAR2
UD DW#16#FFFFFF
+D
T #AnfangsAdresse.TextLibs_1_SBC_Deutsch 德语地址
L P#16.0 P#DBX308.0
+D
T #AnfangsAdresse.TextLibs_2_SBC_Weitere 英语地址
L P#16.0 P#DBX324.0
+D
T #AnfangsAdresse.TextLibs_3_xBC_ChinaVRC 中文地址
XBC1: LAR1 P##Temp_ANYPOINTER_1
L #Konstanten.AnzahlDBsXBC 长度8
T W[AR1,P#2.0]
L #AnfangsAdresse.TextLibs_3_xBC_ChinaVRC 存储中文的地址P#DBX324.0
T D[AR1,P#6.0] 都存在这个ANY类型的变量里
Cop1: L B#16#10
T B[AR1,P#0.0]
L B#16#5 INT
T B[AR1,P#1.0]
L #IDB_Nummer DB651
T W[AR1,P#4.0]
P#DB651 .DBX324.0 INT 8
CALL "BLKMOV" SFC20数据传输
SRCBLK:=#Temp_ANYPOINTER_1 将 P# DB651 .DBX324.0 INT 8 的数据发出
RET_VAL:=#SFCParameter.SFC20View_BLKMOV
DSTBLK:=#AktGewaehlteSprache 传到P# DB651 .DBX292.0 INT 8
CALL "BLKMOV"
SRCBLK:=#AktGewaehlteSprache 发送P# DB651 .DBX292.0 INT 8 的数据
RET_VAL:=#SFCParameter.SFC20View_BLKMOV
DSTBLK:=#Temp_ANYPOINTER_2 传到P# DB650 .DBX2.0 INT 8 用来改变语言
FB650: 语言转换MeldeFB
使用此功能块,将在中央消息归档和中央报告角度中输入块功能块的消息。
该块通常是称为DB650的单独的实例数据块。
该块针对用户程序集中执行一次,FB“ MeldeFB”不具有多实例功能,因此需要一个背景数据块。该功能块用于在中央消息归档和中央消息视图中输入来自模块FB的消息。
输入参数:
COM_RST:该信号是重启信号,并与注释“ restart”相连。
文本Lib0到文本Lib3:在此指定生成的文本库。库DB的符号名称应作为参数值(例如“ TextLib0”)。必须互连所有四个参数。
画面Meldeanzeige 是显示DB802里的内容
画面Meldearchiv_250 是显示DB803里的内容
通道参数:
MsgV:此参数绝对必要,因为所有当前打开的消息都在此输入,并且可以由可视化系统显示。
MsgQ:用于建立与实际消息通道的连接,通过指定UDT类型为“ MsgQueue”的DB,可以评估ModulFB提供的缓冲区。
MsgA:如果需要归档,则必须提供类型为“ MsgArchive”的消息归档DB。该归档文件包含一个1000元素的纯文本消息环形缓冲区。
DB801 信息缓冲
DB802 信息观看
DB803 信息档案
FC650 信息传输MeldSend
DB804-DB811 德语报警数据库由SiVArc 生成
DB814-DB821中文报警数据库由SiVArc 生成
LAR1 P##TextLib0 // TextLib0地址 例如: DB814
L DIW[AR1,P#0.0] // TextLib0 保存DB814
T #DBNr 保存DB块号
SPA FLiS 跳转到FliS -----找到的TextLib的DB号
FLiS: L #DBNr 814
L 0 //判断DB块是否是0
<>I
SPBN DTX4
如果DB块是0 去这步DTX4: LAR1 P##UnDef 保存没有报警信息号
AUF DB [#DBNr] //打开DB块DB814
L 1
BIS6: T #Index_S //搜索二进制文件的索引
L DBW 8 //最大消息数1024
<=i
SPBN EBS6
L #Index_S
+ -1
L #Konstanten.GroesseFeldInTextLib // TextLib中字段元素的大小(以字节为单位)初始值是62
+ L#10
SLD 3
LAR1 //消息条目上的AR1
L DBD[AR1,P#0.0] // TextLib的field元素中消息的ID
L #MSG_ID //要搜索的消息ID
<>D
U(
L DBD[AR1,P#0.0] // TextLib的field元素中消息的ID
L 0
<>D
)
SPBN EBS6 //结束搜寻
L #MSG_ID
L DBD[AR1,P#0.0] // extLib的field元素中消息的ID
>D //搜索的元素大于当前元素
L #Index_S
SLD 1 //Index_S := 2 * Index_S
SPBN BIS6 //左移
+ 1 //Index_S := 2 * Index_S + 1
SPA BIS6 //右移
------伤脑筋的一集,德国大众的标准程序总是喜欢跳来跳去.但是逻辑性的稳定性很好,这个块我接触了7年,还没出过漏洞.
编辑:jq
-
cpu
+关注
关注
68文章
10815浏览量
210927 -
数据库
+关注
关注
7文章
3754浏览量
64250 -
DB
+关注
关注
0文章
48浏览量
22680
原文标题:MELD报警信息提示/存储-解读FB651
文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论