海康工業相機功能模塊-引數保存與加載
- 前言
- 相機引數保存的快速方法
- 相機引數匯入匯出的操作方法
- UserSetLoad 加載相機內部引數
- FeatureLoad/FeatureSave
- FileAccess 功能
- MVS匯入匯出功能
- 幾種方法的優缺點比較
前言
前面一篇文章,講了工業相機引數如何設定與獲取,使用sdk能夠將自己想要的引數快速的配置進自己的程式,但是,在實際使用中,我們會發現,sdk配置的引數似乎在斷電只會就消失啦,不能實作斷電生效???
軟體開發程序中,只能夠配置常見的引數,一些偏門的引數,非常見的相機除錯引數,如何批量設定進相機、如果斷電能夠保存???
這一篇文章就是來介紹、解決這個問題
相機引數保存的快速方法
- MVS如何操作
參考相機用戶手冊提供的方法,主要操作分為3步
- 修改引數后,通過User Set Selector 引數下拉選擇其中一套User Set 引數,例如選擇"User Set 1"(你的引數保存在哪里)
- 通過User Set default引數下拉選擇其中一套User Set 引數,例如選擇"User Set 1"(相機重新上電后,加載那套引數)
- 點擊User Set Save 處的“Execute”,即可將引數保存到用戶引數中(實際有效的保存操作)

- sdk介面如何呼叫-UserSetSave方法
參考在MVS里面的操作,主要是三句話的呼叫
//初始化部分,放在Opendevice之后即可
nRet = MV_CC_SetEnumValue(handle, "UserSetSelector", 1);
if (MV_OK != nRet)
{
printf("error: SetEnumValue UserSetSelector fail [%x]\n", nRet);
}
nRet = MV_CC_SetEnumValue(handle, "UserSetDefault", 1);
if (MV_OK != nRet)
{
printf("error: SetEnumValue UserSetDefault fail [%x]\n", nRet);
}
//設定Command型節點-發送引數保存命令
//大部分引數修改完成后,呼叫此命令進行保存,不建議頻繁呼叫
nRet = MV_CC_SetCommandValue(m_handle, "UserSetSave");
if (MV_OK != nRet)
{
printf("error: SetCommandValue fail [%x]\n", nRet);
}
相機引數匯入匯出的操作方法
UserSetLoad 加載相機內部引數
- 方法1: UserSetLoad 加載相機內部引數
上面講了,使用UserSetSave方法,相機支持3套用戶引數保存,那么我們可以將不同的引數保存到不同的UserSetSelector里面,然后使用UserSetLoad 把引數再調出來,實作不同引陣列合的切換
代碼實作也很簡單
引數保存,參考上面的偽代碼,引數加載如下:
nRet = MV_CC_SetEnumValue(handle, "UserSetSelector", 1);//切換不同的引陣列
if (MV_OK != nRet)
{
printf("error: SetEnumValue UserSetSelector fail [%x]\n", nRet);
}
nRet = MV_CC_SetCommandValue(m_handle, "UserSetLoad");//load
if (MV_OK != nRet)
{
printf("error: SetCommandValue fail [%x]\n", nRet);
}
FeatureLoad/FeatureSave
- 方法2:FeatureLoad/FeatureSave
參考MVS提供的示例程式:C:\Program Files (x86)\MVS\Development\Samples\VC\VS\SimpleSamples\ParametrizeCamera_LoadAndSave
關鍵代碼:
// ch:打開設備 | en:Open device
nRet = MV_CC_OpenDevice(handle);
if (MV_OK != nRet)
{
printf("Open Device fail! nRet [0x%x]\n", nRet);
break;
}
printf("Start export the camera properties to the file\n");
printf("Wait......\n");
// ch:將相機屬性匯出到檔案中 | en:Export the camera properties to the file
nRet = MV_CC_FeatureSave(handle, "FeatureFile.ini");
if (MV_OK != nRet)
{
printf("Save Feature fail! nRet [0x%x]\n", nRet);
break;
}
printf("Finish export the camera properties to the file\n\n");
//--------------------------------------------------------------------------
printf("Start import the camera properties from the file\n");
printf("Wait......\n");
// ch:從檔案中匯入相機屬性 | en:Import the camera properties from the file
nRet = MV_CC_FeatureLoad(handle, "FeatureFile.ini");
if (MV_OK != nRet)
{
printf("Load Feature fail! nRet [0x%x]\n", nRet);
break;
}
printf("Finish import the camera properties from the file\n");
// ch:關閉設備 | Close device
nRet = MV_CC_CloseDevice(handle);
if (MV_OK != nRet)
{
printf("ClosDevice fail! nRet [0x%x]\n", nRet);
break;
}
呼叫MV_CC_FeatureSave介面,可以將相機引數匯出到本地,形成一個.ini結尾的檔案,打開這個檔案可以看見相機的參加引數,例如曝光、增益等

修改這個檔案中的你想要修改的引數值,再呼叫MV_CC_FeatureLoad可以重新匯入修改之后的引數
如果是批量應用的話,事先匯出一份ini檔案,然后使用FeatureLoad的介面,就可以實作批量化的引數設定,減少人員除錯
當然,這個功能暫時也有幾個缺點:
- 只能匯出部分引數,只能匯出Streamable屬性為YES的引數,為NO的引數無法匯出,這個屬性取決于相機,相機支持就能匯出;目前根據觀察,海康大部分相機的常見引數,都是YES啦,因此,也無需更多的關心這個問題

- 不同韌體版本、不同相機型號,ini檔案不能互相匯入
- 無法與MVS客戶端互相兼容,MVS不支持ini檔案匯入
FileAccess 功能
- 方法3:FileAccess 功能
這個功能,是將方法1中的userset引數讀出與重新寫入,不過,匯出來的檔案是bin檔案,不能夠被直接閱讀與修改
示例程式:C:\Program Files (x86)\MVS\Development\Samples\VC\VS\SimpleSamples\ParametrizeCamera_FileAccess
關鍵代碼:
MV_CC_FILE_ACCESS stFileAccess = {0};
stFileAccess.pUserFileName = "UserSet1.bin";
stFileAccess.pDevFileName = "UserSet1";
if (1 == g_nMode)
{
//ch:讀模式 |en:Read mode
g_nRet = MV_CC_FileAccessRead(pUser, &stFileAccess);
if (MV_OK != g_nRet)
{
printf("File Access Read fail! nRet [0x%x]\n", g_nRet);
}
}
else if (2 == g_nMode)
{
//ch:寫模式 |en:Write mode
g_nRet = MV_CC_FileAccessWrite(pUser, &stFileAccess);
if (MV_OK != g_nRet)
{
printf("File Access Write fail! nRet [0x%x]\n", g_nRet);
}
}
缺點:
- bin檔案不能被閱讀與修改
- .要求相機型號、韌體版本號一致
- 無法與MVS客戶端互相兼容,MVS不支持bin檔案匯入
MVS匯入匯出功能
方法4:MVS匯入匯出功能
前面提到的方法2、方法3都是sdk呼叫層面的使用方法,且不與MVS兼容,那么再不修改代碼增加軟體功能的情況下,如何使用MVS批量匯入引數呢?
版本要求:MVS3.2.1版本及其以上
使用方法很簡單,鏈接相機后,在屬性界面的上方找到匯入/匯出的圖示按鈕,點擊即可,生成.mfs后綴的檔案即可

缺點就是:
此方法是MVS軟體實作的,沒有開放出來介面供用戶呼叫
幾種方法的優缺點比較
| 方法 | 優點 | 缺點 |
|---|---|---|
| UserSetLoad (推薦使用) | 操作簡單、MVS、sdk都可以操作實作 | 批量機臺復制操作不易 |
| FeatureLoad/FeatureSave | ini檔案可讀性高,批量機臺復制簡單、引數修改簡單 | 需代碼開發;MVS不兼容 |
| FileAccess | 批量復制簡單 | bin檔案不可讀;MVS不兼容 |
| MVS匯入匯出(推薦使用) | 批量復制簡單 | 無介面開放 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/265503.html
標籤:其他
上一篇:記憶體操作函式
