设备模型文件configured.cid中有如下一段:
<LDevice inst="STAG1" desc="GOOSE信号">
<LN0 lnClass="LLN0" lnType="CN_LLN0" inst="" desc="逻辑节点0">
<DataSet name="dataSetLCGM1" desc="GOOSE时标发送">
<FCDA ldInst="STAG1" prefix="GO" lnClass="GGIO" lnInst="1" doName="Ind1" daName="stVal" fc="ST"/>
<FCDA ldInst="STAG1" prefix="GO" lnClass="GGIO" lnInst="1" doName="Ind2" daName="stVal" fc="ST"/>
....................
</DataSet>
<GSEControl name="dsgocbLCGM1" desc="dsgocbLCGM1" datSet="dataSetLCGM1" confRev="1" appID="TMSMSTA/LLN0$GO$gocbLCGM1"/>
</LN0>
生成的static.c文件中也有该goose报文控制块的生成,如下:
GSEControlBlock iedModel_STAG1_LLN0_gse0 = {&iedModel_STAG1_LLN0, "dsgocbLCGM1", "TMSMSTA/LLN0$GO$gocbLCGM1", "dataSetLCGM1", 1, false, &iedModel_STAG1_LLN0_gse0_address, 2, 5000, NULL};
```c
以上代码所在服务端运行起来后,通过IEDScout工具连接上该设备,在IEDScout中设置该报文控制块为enable,然后通过wireshark抓包工具能抓到该goose在不断发布。
问题:
1)如果不通过IEDScout中设置该报文控制块为enable,服务端所在libiec61850有没有函数设置该报文控制块为enable,让该goose报文控制块能在网络内组播?如果没有函数设置该报文控制块为enable,有没有类似方法达到此功能?总之我想不通过客户端程序设置,就能达到该goose报文控制块主动发布的目的。
2)我尝试通过更新数据的方式来触发该goose报文控制块,似乎没有作用。代码段如下:
```c
bool iTmp = false;
while (true)
{
iTmp = !iTmp;
IedServer_updateTimestampAttributeValue(iedServer, IEDMODEL_STAG1_GOGGIO1_Ind1_t, &iecTimestamp);
IedServer_updateBooleanAttributeValue(iedServer, IEDMODEL_STAG1_GOGGIO1_Ind1_stVal, iTmp);
IedServer_updateQuality(iedServer, IEDMODEL_STAG1_GOGGIO1_Ind1_q, QUALITY_VALIDITY_GOOD);
sleep(2);
}
............
IEDScout中能读到Ind1数据在更新,但wireshark抓不到该goose报文控制块的发布报文。
也没人管管吗?贴一堆乱七八糟的AI的答案, 没一个有用的。