剖析MELD报警信息提示/存储-解读FB651

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
d                                //搜索的元素大于当前元素
l     #index_s
sld   1                           //index_s := 2 * index_s
spbn  bis6                        //左移
+     1                           //index_s := 2 * index_s + 1
spa   bis6                       //右移
------伤脑筋的一集,德国大众的标准程序总是喜欢跳来跳去.但是逻辑性的稳定性很好,这个块我接触了7年,还没出过漏洞.


自动驾驶的全球大结盟非常重要 对自动驾驶的未来发展影响深远
为什么需要debug时钟频率 Debug时钟频率原理详解
顺丰把持高端市场,京东快递挑战顺丰
王健林宣布万达彻底告别房地产!中国楼市要变天了吗?楼市背后究竟隐藏着什么?
曝iPhone SE 2进入生产验证最后阶段 3月如期发布成迷
剖析MELD报警信息提示/存储-解读FB651
5g概念股龙头最详细,2018看好这7只5g通信概念股龙头
iQOO 3再曝猛料,全系支持6频双模5G+Wi-Fi 6,性能表现爆表
Java各种类的区别
我国中小制造企业数字化转型现状
高精度GPS航迹测量系统
设计实践:AWS物联网解决方案
5种前沿的点云分割网络
OnRobot一体化系统解决方案将机器人兼容性提升至新高度
开启游戏生活新方式 惠普新品燃爆游戏之魂
有关晶体管运作的背景知识
浅述高频微波印制板生产中应注意的问题
6.1英寸LCD iPhone外观如何呢?苹果新的中端iPhone渲染图曝光!
我们真的永远也理解不了人工智能吗?
小米爆发,小米5、5s、小米Note 2、小米mix, 小米今年的年度旗舰到底是哪一款?