■IEC61850平臺(tái)庫源代碼
■電力軟件委托開發(fā)設(shè)計(jì)
■智能通信處理機(jī)設(shè)計(jì)開發(fā)平臺(tái)
■IEC61850測試驗(yàn)證軟件源代碼
■智能微機(jī)保護(hù)裝置
智能電網(wǎng)核心技術(shù)供應(yīng)商 智能電網(wǎng)開放技術(shù)實(shí)驗(yàn)室
■SCADA系統(tǒng)源碼
■組態(tài)軟件源碼
■繼電保護(hù)開發(fā)平臺(tái)
■繼電保護(hù)源碼
■FTU/DTU配電終端
上海研電電力科技有限公司
變配電工程系統(tǒng)集成、方案設(shè)計(jì)、安裝調(diào)試、委托開發(fā)與設(shè)計(jì),技術(shù)轉(zhuǎn)讓及授權(quán)
服務(wù)和培訓(xùn)
DNP開發(fā)中間件
DNP開發(fā)中間件
YPT-RD330-DNP-SDK
使用說明書
1. 應(yīng)用開發(fā)依賴庫
n 頭文件IDNPApi.h
n 庫文件:
linux: libidnpapis.so
windows: idnpapis.dll、idnpapis.lib
2. 基本使用方法
n 在自己的代碼中包含頭文件
n 項(xiàng)目中添加庫引用
n 根據(jù)需要實(shí)現(xiàn)命令處理接口類,派生自IDNPCommandInterface
n 實(shí)例化IDNPSlaveService對象
n 調(diào)用Init方法初始化配置參數(shù)
n 調(diào)用Start方法
n 循環(huán)調(diào)用Run方法
n 數(shù)據(jù)變化時(shí)調(diào)用UpdateX方法更新數(shù)據(jù)(X表示遙測、遙信、電度對應(yīng)的方法名字)
n 退出時(shí),調(diào)用Stop方法
3. API說明
3.1 配置項(xiàng)
應(yīng)用可以根據(jù)需要從配置文件、數(shù)據(jù)庫中配置上面的這些參數(shù),然后調(diào)用Init方法傳遞給協(xié)議棧;協(xié)議棧本身也會(huì)加載默認(rèn)的配置文件IDNPSlaveConfig.cnf文件,可以直接在這個(gè)文件中配置上面的參數(shù),此時(shí)不需要調(diào)用Init方法。配置文件的格式為:
一行一個(gè)配置項(xiàng),分別表示:
ip配置監(jiān)聽的IP地址,一把使用127.0.0.1,表示監(jiān)聽所有的網(wǎng)絡(luò)接口
port配置DNP服務(wù)的端口號(hào),標(biāo)準(zhǔn)為20000
log配置日志輸出路徑及文件名,絕對路徑
maxlog配置最大輸出日志行,達(dá)到此行后刪除日志重新輸出
ycnums配置設(shè)備的遙測數(shù)目
yxnums配置設(shè)備的遙信數(shù)目
ddnums配置設(shè)備的電度數(shù)目
yknums配置設(shè)備的遙控?cái)?shù)目
ytnums配置設(shè)備的遙調(diào)數(shù)目
utc配置時(shí)間戳是本地時(shí)間還是UTC時(shí)間
masteraddr配置主站的地址
slaveaddr配置本設(shè)備(子站)的地址
3.2 命令處理接口
DNP協(xié)議棧收到來自主站的命令后,會(huì)調(diào)用應(yīng)用注冊的命令處理接口,應(yīng)用必須派生實(shí)現(xiàn)IDNPCommandInterface接口,才能處理命令。接口說明如下:
比如應(yīng)用要處理遙控執(zhí)行,需要在onYKExecute接口中處理,在這里根據(jù)index(遙控號(hào))和val(遙控值,分合閘)發(fā)送到設(shè)備或者輸出繼電器。
3.3 數(shù)據(jù)處理接口
應(yīng)用采集到現(xiàn)場數(shù)據(jù)后,應(yīng)調(diào)用相關(guān)的update方法更新數(shù)據(jù),數(shù)據(jù)更新后,主站將立即收到數(shù)據(jù)。這些接口如下:
比如應(yīng)用要更新一個(gè)遙測值,則需要調(diào)用updateYCValue方法,index表示要更新的遙測號(hào),從0開始,fval表示遙測值,flags表示數(shù)據(jù)的質(zhì)量位,一般不用填寫。
3.4 應(yīng)用程序主要流程
下面的代碼演示了應(yīng)用的主要通信處理流程;初始化完成后使用Start方法啟動(dòng)服務(wù),然后在應(yīng)用程序主循環(huán)中反復(fù)調(diào)用Run方法,并根據(jù)需要更新自己的遙測、遙信、電度數(shù)據(jù)。
4. 示例代碼
#include
#include "IDNPApi.h"
class ICommandProcess:public IDNPCommandInterface
{
public:
ICommandProcess()
{
}
~ICommandProcess()
{
}
// 遙控選擇通知接口 成功返回1 失敗返回0
// index:遙控號(hào) val:遙控值
virtual int onYKSelect(int index, int val)
{
std::cout << "onYKSelect:index=" << index << " val=" << val << std::endl;
return 1;
}
// 遙控執(zhí)行通知接口 成功返回1 失敗返回0
// index:遙控號(hào) val:遙控值
virtual int onYKExecute(int index, int val)
{
std::cout << "onYKExecute:index=" << index << " val=" << val << std::endl;
return 1;
}
// 遙控取消通知接口 成功返回1 失敗返回0
// index:遙控號(hào) val:遙控值
virtual int onYKCancel(int index, int val)
{
std::cout << "onYKCancel:index=" << index << " val=" << val << std::endl;
return 1;
}
// 遙調(diào)選擇通知接口 成功返回1 失敗返回0
// index:遙調(diào)號(hào) val:遙調(diào)值
virtual int onYTSelect(int index, float val)
{
std::cout << "onYTSelect:index=" << index << " val=" << val << std::endl;
return 1;
}
// 遙調(diào)執(zhí)行通知接口 成功返回1 失敗返回0
// index:遙調(diào)號(hào) val:遙調(diào)值
virtual int onYTExecute(int index, float val)
{
std::cout << "onYTExecute:index=" << index << " val=" << val << std::endl;
return 1;
}
// 對時(shí)接口 成功返回1 失敗返回0
// s:當(dāng)前時(shí)鐘秒 ms:當(dāng)前時(shí)鐘毫秒
virtual int onSyncTime(time_t s, int ms)
{
std::cout << "onSyncTime:second=" << s << " ms=" << ms << std::endl;
return 1;
}
};
int main(int c, char** v)
{
// 創(chuàng)建DNP服務(wù)對象
IDNPSlaveService DNPSlave;
// 注冊命令處理器
IDNPCommandInterface* p = new ICommandProcess();
int ret = DNPSlave.Init(p);
// 啟動(dòng)DNP服務(wù)
ret = DNPSlave.Start();
float fval = 0;
int count = 0;
// 輸出日志
DNPSlave.Log("Now start DNP Slave: %d", 1);
// 主循環(huán),反復(fù)調(diào)用Run方法,并按需跟新數(shù)據(jù)
// 這里模擬更新了第一個(gè)遙測、第一個(gè)遙信、第一個(gè)電度
while(1)
{
DNPSlave.Run();
DNPSlave.Sleep(1000);
fval += 1.1;
DNPSlave.updateYCValue(0, fval, 1);
int ival = count % 2;
DNPSlave.updateYXValue(0, ival, 1);
DNPSlave.updateDDValue(0, count, 1);
int idpval = 1;
if(ival)
{
idpval = 2;
}
DNPSlave.updateDbYXValue(0, idpval, 0,0,1);
DNPSlave.Log("Loop count = %dn", count);
count++;
}
// 停止DNP服務(wù)
ret = DNPSlave.Stop();
delete p;
return 0;
}
☆ 變配電二次系統(tǒng)設(shè)計(jì)、系統(tǒng)集成
☆ 工程設(shè)計(jì)與安裝、現(xiàn)場調(diào)試
☆ 軟件開發(fā)與培訓(xùn)
☆ 電力系統(tǒng)仿真實(shí)驗(yàn)室
☆ 大學(xué)生實(shí)習(xí)培訓(xùn)基地
☆ OEM/ODM
☆ 軟件外包服務(wù)
☆ 智能建筑能耗管理
☆ 工業(yè)控制技術(shù)培訓(xùn)
☆ 安防系統(tǒng)設(shè)計(jì)安裝