TestCopyData DB 的结构
TestCopyData DB 的区域
TestCopy 功能的 DB 分为以下区域(在 DB 中的偏移 后):
0 ... 27:用户界面
用于设置 TestCopy 模式和功能的界面。此区域分为:
- 1 ... 13
RecvCopy 功能的过滤器设置和已计数接收帧的数量
- 15 ... 25
SendCopy 功能的过滤器设置和已计数发送消息帧的数量
28:错误显示
31 ... 39:内部管理指针
40 ...(默认值:523):缓冲区范围
用于存储符合过滤条件的帧的缓冲区。
此缓冲区必须组态为 WORD 的数组 [0...xxxx]。
下表列出了 DB TestCopyData 的结构:
数据类型/(偏移) | 变量名称 | 格式 | 说明 | |
---|---|---|---|---|
用户界面 | ||||
DBB | 0 | OperationMode | BYTE | 模式 |
DBW | 12 | Recv_TgramCounter | INT | 已复制的接收帧数目 |
DBW | 26 | Send_TgramCounter | INT | 已复制的发送帧数目 |
RecvCopy 功能 | ||||
DBB | 1 | Recv_TgrmType | BYTE | 接收过滤器:消息类型 (MT) |
DBW | 2 | Recv_DestSubscr | INT | 接收过滤器:目标用户编号 |
DBW | 4 | Recv_DestObject | INT | 接收过滤器:目标对象编号 |
DBW | 6 | Recv_SourceSubscriber | INT | 接收过滤器:源用户编号 |
DBW | 8 | Recv_SourceObject | INT | 接收过滤器:源对象编号 |
DBW | 10 | Recv_StartIndex | INT | 接收过滤器:启动索引编号 |
DBB | 14 | SpareDBB14 | BYTE | 保留 |
SendCopy 功能 | ||||
DBB | 15 | Send_TgrmType | BYTE | 发送过滤器:消息类型 (MT) |
DBW | 16 | Send_DestSubscr | INT | 发送过滤器:目标用户编号 |
DBW | 18 | Send_DestObject | INT | 发送过滤器:目标对象编号 |
DBW | 20 | Send_SourceSubscriber | INT | 发送过滤器:源用户编号 |
DBW | 22 | Send_SourceObject | INT | 发送过滤器:源对象编号 |
DBW | 24 | Send_StartIndex | INT | 发送过滤器:启动索引编号 |
错误显示 | ||||
DBB | 28 | FC_RetVal | BYTE | 错误信息: 0 = 无错误 1 = DB TestCopyData 太短 10 = 未知模式 |
DBB | 29 | SpareDBB29 | BYTE | 保留 |
DBB | 30 | SpareDBB30 | BYTE | 保留 |
内部管理指针 | ||||
DBB | 31 | TestCopyStatus | BYTE | TestCopy 操作状态字节 |
DBB | 32 | TestCopyCmdByte | BYTE | TestCopy 操作命令字节 |
DBB | 33 | TestCopyDelCount | BYTE | TestCopy 删除功能的循环计数器 |
DBW | 34 | NextFreeCopyByte | INT | 下一个空闲 TestCopyBuffer 字节的地址 |
DBD | 36 | StartTimeSFC64 | DINT | 复制程序开始时的 SFC64 时间 |
缓冲区范围 | ||||
DBB | 40 | TestCopyBuffer[0] | BYTE | 复制区域,字节 0 |
DBB | 41 | TestCopyBuffer[1] | BYTE | 复制区域,字节 1 |
DBB | 42 | TestCopyBuffer[2] | BYTE | 复制区域,字节 2 |
DBB | 43 | TestCopyBuffer[3] | BYTE | 复制区域,字节 3 |
DBB | n | TestCopyBuffer[n] | BYTE | 复制区域,字节 n |
已复制消息块的结构
帧块可包含多个帧。帧根据以下规则保存在 DB TestCopyData 中:
自上次选择的操作模式 > 0 后,**个条目指示时间差(以毫秒为单位)(7 个十进制 BCD 加符号)。
随后是发送消息的分隔信号 AAAA,接收消息的信号 EEEE。
从帧块存储**条消息。
分隔标识符 AAAA 或 EEEE:
从消息块中存储上一个帧。
块结束标识符 FFFF。
示例
所有接收的帧都将存储在 DB TestCopyData 中。
通过 X 块进行通信,即每个接收块较多 76 个字节。
DB XComData 的接收缓冲区是 FC TestCopy 的源。
当前接收块包含 3 个消息。
图片: 填写 DB TestCopyData 的示例
长度计算
FC TestCopy 使用以下参数确定 DB TestCopyData 的较小长度:
参数 | 参数名称 | 长度 |
---|---|---|
通信缓冲区长度 | LenComBuffer | 76 或 202 个字节 * |
较小帧长度 | LenMinTgrm | 14 个字节 |
偏移管理区域 | Offset | 40 个字节 |
时间差的长度 | Lendt | 4 个字节 |
块分隔符的长度 | LenTrenner | 2 个字节 |
用于实际计算的公式与用于 X 通信和 B 通信的公式相同。结果不同仅因为 X 和 B 通信的通信缓冲区长度不同:
X 通信长度
LenMin_Xcom | =LenComBuffer + Offset + Lendt + (LenComBuffer / LenMinTgrm + 1) * LenTrenner |
= 76 + 40 + 4 + (76/14 + 1) * 2 | |
= 120 + 12 = 较小 132 个字节 |
B 通信长度
LenMin_Bcom | =LenComBuffer + Offset + Lendt + (LenComBuffer / LenMinTgrm + 1) * LenTrenner |
= 202 + 40 + 4 + (202/14 + 1) * 2 | |
= 236 + 40 = 较小 276 个字节 |
如果 FC TestCopy 确定 DB TestCopyData 不具有计算出的较小长度,则在数据字节 DBB28 中出现一条此结果的错误消息。
shtxjd.cn.b2b168.com/m/