博途序列化

复习一下STL的指针和AR寄存器:

      L     P#M2.3
      LAR1                       //将LAR1的地址指向M2.3
      L W [ AR1 , P#0.5 ]        //M2.3偏置0.5,变成M3,长度是一个字Word,即读取MW3
      T     "STL测试".arrInt[11]

      OPN   "STL测试"              //指向DB块5 "STL测试"
      L     P#DBX2.0             //指向DB5.DBX2.0位,即arrInt[1], 2.0为偏移量
      LAR1                       //将AR1指向DB1.DBX0.0位
      L W [ AR1 , P#0.0 ]        // 将DB1.DBW0写入AR1
      T     "STL测试".arrInt[14]

      OPN   "STL测试"              //指向DB块5
      L     P#DBX6.0             //指向DB1.DBX6.0位,即arrInt[3]
      LAR1                       //将AR1指向DB1.DBX0.0位
      L W [ AR1 , P#0.0 ]        // 将DB1.DBW0写入AR1
      T     "STL测试".arrInt[15]


      L     "STL测试".arrInt[14]   //如果是2
      L     "STL测试".arrInt[15]   //如果是3
      +I
      T     "STL测试".arrInt[16]   //5


序列化可以使任意的UDT, struct 变为byte数组

ANY指针:
P#DB13.DBX0.0 BYTE 2
P#DB13.DBX0.0空格WORD空格2
起始地址, 数据长度
博途的整数是指字节的序号

#pos := 0;
#Tag_RetVal := Serialize(SRC_VARIABLE := #Input_1, DEST_ARRAY => "serializeDes".arrByte, POS := #pos);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

PLC 数据类型 HMI 数据类型 取值范围
Bool Bool 0 (FALSE),1 (TRUE)
SInt SInt -128 … +127 8位
Int Int -32768 … +32767 16位
DInt DInt −2147483648 … +2147483647 32位
LInt LReal -4,503,599,627,370,495…+4,503,599,627,370,495
USInt USInt 0 … 255 8位
UInt UInt 0 … 65535 16位
UDInt UDInt 0 … 4294967295 32位
ULInt LReal 0 … 4,503,599,627,370,495 32位
Real Real ±1.17549E-38 至 ±-3.40282E+38 和 0.0
LReal LReal ±1.79769313486231E+308 至 ±2.22507385850720E-308 和 0.0
S5Time UDInt 0 … 9990000
Time DInt −2147483648 … +2147483647
LTime DInt −2147483648 … +2147483647
Date DateTime/UInt 0 … 65535
Time_of_Day, TOD DateTime/UDInt 0 … 86399999
LTime_of_Day, LTOD DateTime/UDInt 0 … 86399999
Date_And_Time, DT DateTime -
LDT DateTime -
DTL DateTime -
String String -
WString WString -
Char USInt 0 … 255 8位
WChar WString -
Byte USInt 0 … 255 8位
Word UInt 0 … 65535 16位
DWord UDInt 0 … 4294967295
Timer UDInt 0 … 9990000
Counter UInt 0 … 999
PLCUDT PLCUDT

参数
声明
数据类型
存储区
说明

AREA
Input
BYTE
I、Q、M、D
可以选择以下区域:

16#81:Input

16#82:Output

16#83:位存储区

16#84:DB

16#1:I/O 输入

DBNUMBER
Input
DINT、DB_ANY
I、Q、M、D
如果 AREA = DB,则为数据块数量,否则为“0”

BYTEOFFSET
Input
DINT
I、Q、M、D
待读取的地址

仅使用 16 个最低有效位。

RET_VAL
Output
位字符串
I、Q、M、D
指令的结果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

是状态字的第1位。状态字(16 位):
0位—FC反 首先检查的位,位无法在用户程序中用L STW指令
进行描述和计算,由于其未在程序运行时更新
1位—RLO 先前的逻辑运算结果
2位—STA 状态,位无法在用户程序中用L STW指令进行计
算,由于其未在程序运行时更新
3位—OR 或,位无法在用户程序中用L STW指令进行计算,
由于其未在程序运行时更新
4位—OS 存储上溢
5位—OV 溢出
6位—CC0 条件代码
7位—CC1 条件代码
8位—BR 二进制结果
9—15位 未分配

你所使用的DB块中的数据是全局变量,即使你的条件从TRUE变成FALSE,“DB1”.结果1依然会保持住,因为没有被复位,除非你程序中添加:else “DB1”.结果1:=0;

而你在FB中定义的#条件2和#结果2是形式参数,是局部变量,只能在这个FB中使用,当#条件2复位时,#结果2无法保持自己的状态,除非换成全局变量或STATIC类型的变量

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘诺西亚的火山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值