CAPL学习-ETH功能函数-通用函数

1 General Functions

GetServiceSignal

函数

读取服务信号(Service Signal)的值。

语法

capl 复制代码
double GetServiceSignal(serviceSignalNumber qualifier); // 形式1  
long GetServiceSignal(char qualifier [], double& value); // 形式2  

参数

  • qualifier:服务信号的限定符。
  • value:用于存储服务信号值的变量。

返回值

  • 形式1:始终返回信号值。
  • 形式2
    • 0:无错误,函数执行成功。
    • -1:未找到服务信号,没有与限定符匹配的服务信号。
    • -2:服务信号类型错误,该函数仅用于数值类型的服务信号。
    • -3:缓冲区无效。
    • -4:指定的服务信号无发送方。
    • -5:服务信号尚未被观测到。
    • -255:发生一般错误。

可用性

  • 版本:9.0 SP4
  • 限制:仅适用于仿真/测试设置

相关函数

GetServiceSignalData | GetServiceSignalString | SetServiceSignal

GetServiceSignalData

函数

读取服务信号(Service Signal)的数据。

语法

capl 复制代码
long GetServiceSignalData(serviceSignal qualifier, byte buffer [], dword bufferLength); // 形式1  
long GetServiceSignalData(char qualifier [], byte buffer [], dword bufferLength); // 形式2  

参数

  • qualifier:服务信号的限定符。
  • buffer[]:用于存储服务信号值的数据缓冲区。
  • bufferLength:数据缓冲区的长度。

返回值

  • >=0:从服务信号中获取的字节数。
  • -1:未找到服务信号,没有与限定符匹配的服务信号。
  • -3:缓冲区或缓冲区长度无效,缓冲区长度必须大于0。
  • -5:服务信号尚未被观测到。
  • -255:发生一般错误。

可用性

  • 形式1:版本8.5
  • 形式2:版本9.0 SP4
  • 限制:仅适用于仿真/测试设置

示例

以下示例访问DemoDatabase数据库中PACKAGE1::PACKAGE2包下Service1服务(主版本1,实例ID 2)的Event1事件中的StringValue参数:

capl 复制代码
on key 'r'  
{  
  byte buffer[255];  
  GetServiceSignalData(DemoDatabase::PACKAGE1::PACKAGE2::Service1::1::2::Event1::StringValue, buffer, elcount(buffer));  
}  

注意

服务限定符无需以$符号开头。

相关函数

GetServiceSignal | GetServiceSignalString | SetServiceSignalData

GetServiceSignalString

函数

读取服务信号(Service Signal)的字符串值。

语法

capl 复制代码
long GetServiceSignalString(serviceSignalString qualifier, char buffer [], dword bufferLength); // 形式1  
long GetServiceSignalString(char qualifier [], char buffer [], dword bufferLength); // 形式2  

参数

  • qualifier:服务信号的限定符。
  • buffer[]:用于存储服务信号值的数据缓冲区。
  • bufferLength:数据缓冲区的长度。

返回值

  • >=0:从服务信号中获取的字符串长度。
  • -1:未找到服务信号,没有与限定符匹配的服务信号。
  • -2:服务信号类型错误,该函数仅用于字符串类型的服务信号。
  • -3:缓冲区或缓冲区长度无效,缓冲区长度必须大于0。
  • -5:服务信号尚未被观测到。
  • -255:发生一般错误。

可用性

  • 形式1:版本9.0 SP2
  • 形式2:版本9.0 SP4
  • 限制:仅适用于仿真/测试设置

示例

以下示例访问DemoDatabase数据库中PACKAGE1::PACKAGE2包下Service1服务(主版本1,实例ID 2)的Event1事件中的StringValue参数:

capl 复制代码
on key 'r'  
{  
  char buffer[255];  
  GetServiceSignalString(DemoDatabase::PACKAGE1::PACKAGE2::Service1::1::2::Event1::StringValue, buffer, elcount(buffer));  
  write("服务信号StringValue的实际值: %s", buffer);  
}  

注意

服务限定符无需以$符号开头。

相关函数

GetServiceSignal | GetServiceSignalData | SetServiceSignalString

SetServiceSignal

函数

设置服务信号(Service Signal)的值。

语法

capl 复制代码
double SetServiceSignal(serviceSignalNumber qualifier, double value); // 形式1  
double SetServiceSignal(char qualifier [], double value); // 形式2  

参数

  • qualifier:服务信号的限定符。
  • value:要设置给服务信号的值。

返回值

  • 0:无错误,函数执行成功。
  • -1:未找到服务信号,没有与限定符匹配的服务信号。
  • -2:服务信号类型错误,该函数仅用于数值类型的服务信号。
  • -4:无发送方发送信号,若未找到提供待发送信号的交互层(Interaction Layer),可能会出现此错误。
  • -255:发生一般错误。

可用性

  • 版本:9.0 SP4
  • 限制:仅适用于仿真/测试设置

相关函数

SetServiceSignalData | SetServiceSignalString | GetServiceSignal

SetServiceSignalData

函数

设置服务信号(Service Signal)的数据。

语法

capl 复制代码
long SetServiceSignalData(serviceSignal qualifier, byte buffer [], dword bufferLength); // 形式1  
long SetServiceSignalData(char qualifier [], byte buffer [], dword bufferLength); // 形式2  

参数

  • qualifier:服务信号的限定符。
  • buffer[]:用于存储服务信号值的数据缓冲区。
  • bufferLength:数据缓冲区的长度。

返回值

  • 0:无错误,函数执行成功。
  • -1:未找到服务信号,没有与限定符匹配的服务信号。
  • -3:缓冲区或缓冲区长度无效,缓冲区长度必须大于0。
  • -4:无发送方发送信号,若未找到提供待发送信号的交互层(Interaction Layer),可能会出现此错误。
  • -255:发生一般错误。

可用性

  • 形式1:版本9.0 SP2
  • 形式2:版本9.0 SP4
  • 限制:仅适用于仿真/测试设置

示例

以下示例访问DemoDatabase数据库中PACKAGE1::PACKAGE2包下Service1服务(主版本1,实例ID 2)的Event1事件中的StringValue参数:

capl 复制代码
on key 's'  
{  
  byte buffer[1] = {0x12};  
  SetServiceSignalData(DemoDatabase::PACKAGE1::PACKAGE2::Service1::1::2::Event1::StringValue, buffer, elcount(buffer));  
}  

注意

服务限定符无需以$符号开头。

相关函数

SetServiceSignal | SetServiceSignalString | GetServiceSignalData

SetServiceSignalString

函数

设置服务信号(Service Signal)的字符串值。该函数会根据数据类型(UTF8或UTF16)自动附加相应的字节顺序标记(BOM)。

语法

capl 复制代码
long SetServiceSignalString(serviceSignalString qualifier, char buffer []); // 形式1  
long SetServiceSignalString(char qualifier [], char buffer []); // 形式2  

参数

  • qualifier:服务信号的限定符。
  • buffer[]:用于存储服务信号值的数据缓冲区。

返回值

  • 0:无错误,函数执行成功。
  • -1:未找到服务信号,没有与限定符匹配的服务信号。
  • -2:服务信号类型错误,该函数仅用于字符串类型的服务信号。
  • -3:缓冲区无效。
  • -4:无发送方发送信号,若未找到提供待发送信号的交互层(Interaction Layer),可能会出现此错误。
  • -255:发生一般错误。

可用性

  • 形式1:版本9.0 SP2
  • 形式2:版本9.0 SP4
  • 限制:仅适用于仿真/测试设置

示例

以下示例访问DemoDatabase数据库中PACKAGE1::PACKAGE2包下Service1服务(主版本1,实例ID 2)的Event1事件中的StringValue参数:

capl 复制代码
on key 's'  
{  
  SetServiceSignalString(DemoDatabase::PACKAGE1::PACKAGE2::Service1::1::2::Event1::StringValue, "Hello World");  
}  

注意

服务限定符无需以$符号开头。

相关函数

SetServiceSignal | SetServiceSignalData | GetServiceSignalString

ethClearMacAddressTable

函数

清除以太网网络接口的MAC地址表。

语法

capl 复制代码
long ethClearMacAddressTable(long channel);  

参数

  • channel:以太网通道号,取值范围:1...32。

返回值

  • 0:成功。
  • 1:网络接口不支持。
  • 2:失败,请检查网络接口设置。
  • 3:在基于通道的仿真模式下不支持。

可用性

  • 版本:9.0 SP3
  • 限制:仅适用于仿真/测试设置

示例

capl 复制代码
on key '1'  
{  
  EthClearMacAddressTable(1); // 清除以太网1的MAC地址表  
}  

ethGetLinkStatus

函数

返回通道的链路状态。

语法

capl 复制代码
long ethGetLinkStatus(long channel); // 形式1  
long ethGetLinkStatus(long channel, long hwChannel); // 形式2  
long ethGetLinkStatus(ethernetPort port); // 形式3  

参数

  • channel:以太网通道号,取值范围:1...32。
  • hwChannel:硬件通道号,取值范围:1...16(仅当Vector网络接口支持多个硬件通道时可用)。
  • port:以太网端口,由网络名称和端口名称描述。

返回值

  • 0:链路断开(Link down)。
  • 1:链路连接(Link up)。
  • -1:读取链路状态失败。

可用性

  • 形式1:版本8.2
  • 形式2:版本9.0 SP3
  • 形式3:版本12.0
  • 限制:仅适用于仿真/测试设置

示例

capl 复制代码
// 示例1  
on key 'i'  
{  
  write("链路状态值: %d", ethGetLinkStatus(1));  
}  

// 示例2  
on key 'i'  
{  
  write("链路状态值: %d", ethGetLinkStatus(ethernetPort::MyNetworkName::MyPortName));  
}  

版本信息 :14 SP2
版权所有:© Vector Informatik GmbH

ethSetLinkStatus

CAPL 函数 >> 以太网 >> 函数概述 >> ethSetLinkStatus

函数

配置 Vector 硬件的通道以建立或终止链路。

语法
cpp 复制代码
long ethSetLinkStatus(long channel, long status);          // 形式 1  
long ethSetLinkStatus(long channel, long hwChannel, long status);  // 形式 2  
long ethSetLinkStatus(ethernetPort port, long status);      // 形式 3  
参数
  • channel:以太网通道号。取值范围:1...32
  • status:链路状态。0 = 链路断开;1 = 链路连接
  • hwChannel:硬件通道号。需 Vector 网络接口支持多硬件通道。取值范围:1...16
  • port:以太网端口,由网络名称和端口名称描述。仅支持基于网络的配置和物理测量端口
返回值
  • 0:成功
  • 1:无效通道
  • 2:读取配置失败
  • 3:链路断开失败
  • 4:链路连接失败
  • 5:恢复旁路失败
  • 6:无效链路状态
可用性
版本 形式 限制 测量设置 仿真/测试设置
8.2 1 以太网 ---
9.0 SP3 2 以太网 ---
12.0 3 以太网 ---
示例
cpp 复制代码
// 链路连接  
on key 'u' { ethSetLinkStatus(1, 1); }  

// 链路断开  
on key 'd' { ethSetLinkStatus(1, 0); }  

// 通过端口设置链路状态  
on key 'u' { ethSetLinkStatus(ethernetPort::MyNetworkName::MyPortName, 1); }  

ethGetMacAddressAsNumber

CAPL 函数 >> 以太网 >> 函数概述 >> ethGetMacAddressAsNumber

函数

将 MAC 地址字符串(如 "02:00:00:00:00:01")转换为 qword 数值,可用于 ethernetPacket.sourceethernetPacket.destination

语法
cpp 复制代码
qword ethGetMacAddressAsNumber(char macAddrStr[]);  
参数
  • macAddrStr:MAC 地址字符串(如 "02:00:00:00:00:01")
返回值

MAC 地址的 qword 数值;失败时返回 0

可用性
版本 限制 测量设置 仿真/测试设置
8.5 以太网
示例
cpp 复制代码
on key '1' {  
  ethernetPacket txPacket;  
  txPacket.msgChannel = 1;  
  txPacket.source = ethGetMacAddressAsNumber("20:00:00:00:00:01");  
  txPacket.destination = ethGetMacAddressAsNumber("FF:FF:FF:FF:FF:FF");  
  txPacket.Length = 100;  
  txPacket.type = 0xF123;  
  output(txPacket);  
}  

ethGetMacAddressAsString

CAPL 函数 >> 以太网 >> 函数概述 >> ethGetMacAddressAsString

函数

将 qword 类型的 MAC 地址转换为字符串,适用于 ethernetPacket.sourceethernetPacket.destination

语法
cpp 复制代码
long ethGetMacAddressAsString(qword macAddr, char buffer[], dword bufferLength);  
参数
  • macAddr :qword 类型的 MAC 地址(如 ethernetPacket.source
  • buffer:存储 MAC 地址字符串的缓冲区
  • bufferLength:缓冲区长度
返回值
  • 0:成功
  • 8:缓冲区长度不足
可用性
版本 限制 测量设置 仿真/测试设置
8.5 以太网
示例
cpp 复制代码
on ethernetPacket * {  
  char macAddrStr[18];  
  if (ethGetMacAddressAsString(this.source, macAddrStr, elcount(macAddrStr)) == 0) {  
    write("Received Ethernet packet from %s", macAddrStr);  
  }  
}  

ethGetPhyState

CAPL 函数 >> 以太网 >> 函数概述 >> ethGetPhyState

注意

硬件依赖功能:

  • VT6303 支持基于通道和网络的访问
  • VN 系列(如 VN5640)仅支持基于网络的访问
函数

获取 PHY 状态。仅支持 TJA-1101 等具备该功能的 PHY 类型。

语法
cpp 复制代码
long ethGetPhyState(long channel);              // 形式 1  
long ethGetPhyState(long channel, long hwChannel);  // 形式 2  
long ethGetPhyState(ethernetPort port);          // 形式 3  
参数
  • channel:以太网通道号。取值范围:1...32
  • hwChannel:硬件通道号。需 Vector 网络接口支持多硬件通道。取值范围:1...16
  • port:以太网端口。仅支持基于网络的配置和物理测量端口
返回值
  • 1:ePhyNormalState(正常状态)
  • 2:ePhySleepState(睡眠状态)
  • 3:ePhyPowerOffState(断电状态)
  • 4:ePhySleepRequestState(睡眠请求状态)
  • 0:发生错误
可用性
版本 限制 测量设置 仿真/测试设置
12.0 SP3 以太网 ---
示例
cpp 复制代码
/* 通过轮询端口 PHY 状态实现 TC10 测试 */  
on timer myTimer {  
  if (ethGetPhyState(ethernetPort::MyNetworkName::MyPortName) == 1) {  // ePhyNormalState  
    write("ethernetPort::MyNetworkName::MyPortName's PHY is operational");  
  }  
  if (ethGetPhyState(ethernetPort::MyNetworkName::MyPortName) == 2) {  // ePhySleepState  
    write("ethernetPort::MyNetworkName::MyPortName's PHY is sleeping");  
  }  
  if (ethGetPhyState(ethernetPort::MyNetworkName::MyPortName) == 3) {  // ePhyPowerOffState  
    write("ethernetPort::MyNetworkName::MyPortName's PHY is powered down");  
  }  
}  

ethSetPhyState

CAPL 函数 >> 以太网 >> 函数概述 >> ethSetPhyState

注意

硬件依赖功能:

  • VT6303 支持基于通道和网络的访问
  • VN 系列(如 VN5640)仅支持基于网络的访问
函数

设置 PHY 状态。仅支持 TJA-1101 等具备该功能的 PHY 类型。

语法
cpp 复制代码
long ethSetPhyState(long channel, long phyState);              // 形式 1  
long ethSetPhyState(long channel, long hwChannel, long phyState);  // 形式 2  
long ethSetPhyState(ethernetPort port, long phyState);          // 形式 3  
参数
  • channel:以太网通道号。取值范围:1...32
  • phyState:PHY 状态。1 = ePhyNormalState(正常);2 = ePhySleepState(睡眠);3 = ePhyPowerOffState(断电)
  • hwChannel:硬件通道号。需 Vector 网络接口支持多硬件通道。取值范围:1...16
  • port:以太网端口。仅支持基于网络的配置和物理测量端口
返回值
  • 0:成功
  • 1:无效通道或端口
  • 2:失败
可用性
版本 限制 测量设置 仿真/测试设置
12.0 SP3 以太网 ---
示例
cpp 复制代码
// 设置 PHY 为睡眠状态  
on key 's' {  
  ethSetPhyState(ethernetPort::MyNetworkName::MyPortName, 2);  // ePhySleepState  
}  

// 设置 PHY 为正常状态  
on key 'n' {  
  ethSetPhyState(ethernetPort::MyNetworkName::MyPortName, 1);  // ePhyNormalState  
}  

ethResetStatistics

CAPL 函数 >> 以太网 >> 函数概述 >> ethResetStatistics

函数

重置以太网通道统计信息。统计信息由 Eth<channel> 对象提供。

语法
cpp 复制代码
void ethResetStatistics(long channel);  
参数
  • channel:以太网通道号。取值范围:1...32
可用性
版本 限制 测量设置 仿真/测试设置
11.0 以太网 ---
示例
cpp 复制代码
on key 'i' {  
  ethResetStatistics(1);  // 重置 Eth 1 的统计信息  
}  

output (Ethernet)

CAPL 函数 >> 以太网 >> 函数概述 >> output (Ethernet)

函数

从程序块中输出以太网数据包。形式 2 可用于输出带无效帧校验和(FCS)的数据包。

语法
cpp 复制代码
void output(ethernetPacket packet);               // 形式 1  
void output(ethernetPacket packet, dword fcs);     // 形式 2  
void output(ethernetErrorPacket packet);           // 形式 3  
参数
  • packetethernetPacket 类型(形式 1/2)或 ethernetErrorPacket 类型(形式 3)的变量
  • fcs:以太网帧校验和
可用性
版本 限制 测量设置 仿真/测试设置
所有版本 以太网
示例
cpp 复制代码
ethernetPacket txPacket;  
txPacket.msgChannel = 1;  
txPacket.source = EthGetMacAddressAsNumber("20:00:00:00:00:01");  
txPacket.destination = EthGetMacAddressAsNumber("FF:FF:FF:FF:FF:FF");  
txPacket.Length = 100;  
txPacket.type = 0xF123;  
output(txPacket, 0x1234);  // 输出带自定义 FCS 的数据包  

2 基于网络架构的函数

1. ethGetEthernetPort

函数

获取当前仿真节点的以太网端口。需指定通道,网关节点可通过通道区分不同网络上的端口。

语法

capl 复制代码
ethernetPort ethGetEthernetPort(long Channel);

参数

  • Channel:应用通道,例如 Eth 1。

返回值

以太网端口。

可用性

  • 版本:12.0 SP4
  • 限制:以太网
  • 测量设置:支持
  • 仿真/测试设置:支持

示例

capl 复制代码
on start
{
  ethernetport ownPort;
  ownPort = ethGetEthernetPort(1);
  // ... 对 ownPort 执行操作
}

相关函数

ethernetPort | lookupEthernetPort

2. ethGetEthernetPortInfos

函数

检索所有已连接的基于网络的以太网设备的端口相关信息。需提供足够大小的 ethernetPortInfo 数组以容纳所有可用硬件端口。

语法

capl 复制代码
long ethGetEthernetPortInfos (ethernetportinfo portInfos[]);

参数

  • portInfosethernetPortInfo 类型数组,存储检索到的硬件信息,结构体成员如下:
    • char PortName[32]:端口名称
    • char NetworkName[32]:网络名称
    • char SegmentName[32]:网段名称
    • uint32_t IsPhysical:是否为物理端口

返回值

有效 ethernetPortInfo 元素的数量(出错时返回 0)。

可用性

  • 版本:12.0 SP4
  • 限制:以太网
  • 测量设置:不支持
  • 仿真/测试设置:支持

示例

capl 复制代码
on key 'C' // 检索完整硬件信息
{
  ethernetportinfo allPorts[128];
  long numPorts, j;
  numPorts = ethGetEthernetPortInfos(allPorts);
  write("找到 %d 个端口的硬件信息", numPorts);
  for (j=0; j < numPorts; j++)
  {
    write("#%d %s::%s::%s 物理端口:%d", j,
          allPorts[j].NetworkName,
          allPorts[j].SegmentName,
          allPorts[j].PortName,
          allPorts[j].IsPhysical);
  }
}

3. ethInjectPacket

函数

通过 packet 中定义的特定以太网端口传输以太网报文。支持在仿真端口或物理端口输出帧(例如用于错误注入)。

语法

capl 复制代码
long ethInjectPacket (ethernetPacket packet, byte direction);

参数

  • packetethernetPacket 类型变量。
  • direction:从连接网段视角的传输方向:
    • 实时模式:
      • <rx><0>:从仿真端口发送(进入连接网段)
      • <tx><1>:从物理测量端口发送(离开连接网段)
    • 仿真模式:
      • <tx>/<rx>(或 <0>/<1>):从仿真端口发送(进入/离开连接网段)

返回值

  • 0:成功
  • 1:无效以太网端口
  • 2:报文失败
  • 3:输出不允许

可用性

  • 版本:12.0 SP5
  • 限制:以太网
  • 测量设置:不支持
  • 仿真/测试设置:支持

示例

capl 复制代码
ethernetPacket txPacket;
txPacket.hwPort = lookupEthernetPort("Ethernet1::Port1");
txPacket.source = EthGetMacAddressAsNumber("20:00:00:00:00:01");
txPacket.destination = EthGetMacAddressAsNumber("FF:FF:FF:FF:FF:FF");
txPacket.Length = 100;
txPacket.type = 0xF123;
ethInjectPacket(txPacket, tx); // 通过网络 <Ethernet1> 的物理端口 <Port1> 发送

4. lookupEthernetPort

函数

通过端口限定字符串获取以太网端口。

语法

capl 复制代码
ethernetPort lookupEthernetPort(char[] ethernetPortName);

参数

  • ethernetPortName:端口限定字符串,格式为 <NetworkName>::<PortName>

返回值

以太网端口。

可用性

  • 版本:12.0 SP4
  • 限制:以太网
  • 测量设置:支持
  • 仿真/测试设置:支持

示例

capl 复制代码
on ethernetPacket *
{
  if (this.hwPort == lookupEthernetPort("Ethernet1::ChatClient1"))
  {
    write("在 %s 上接收报文", "Ethernet1::ChatClient1");
  }
}

相关函数

ethernetPort |

相关推荐
ICT技术最前线1 小时前
sdwan组网软件如何帮助企业提升网络效率?
网络·sdwan·宽带组网
OAoffice1 小时前
智能学习培训考试平台如何驱动未来组织:重塑人才发展格局
人工智能·学习·企业智能学习考试平台·学练考一体化平台
linly12192 小时前
ERP学习笔记-频域分析之小波变换fieldtrip
笔记·学习
QiZhang | UESTC2 小时前
学习日记day40
学习
老蒋新思维2 小时前
创客匠人洞察:AI 时代 IP 变现的认知重构,从流量焦虑到价值深耕的破局之道
网络·人工智能·tcp/ip·重构·知识付费·创始人ip·创客匠人
大江东去浪淘尽千古风流人物3 小时前
【MSCKF】UpdaterHelper 学习备注
学习
hmbbcsm3 小时前
python学习之路(十三)[闭包,装饰器,函数式编程,生成器]
学习
Cher ~3 小时前
【协议】ICMP
网络·网络协议
丁丁丁梦涛4 小时前
EMQX配置 ssl 和 wss
网络·网络协议·ssl·emqx·wss