我最近在用MFC調VISA庫發SCPI程控標準儀表設備。字符集用的UNICODE。
TCHAR sztestitem_scpi[200];
int nLength = lstrlen(sztestitem_scpi);
status = viWrite(instr, (ViBuf)(sztestitem_scpi), (ViUInt32)lstrlen(ztestitem_scpi), &writeCount);
此時發送正常,但是繼續發送
strcpy_s(stringinput, ":SYST:ERR?\n");
status = viWrite(instr, (ViBuf)stringinput, (ViUInt32)strlen(stringinput), &writeCount);
設備顯示指令錯誤。
而
char sztestitem_scpi[200];
int nLength1 = strlen(sztestitem_scpi);
status = viWrite(instr, (ViBuf)sztestitem_scpi, (ViUInt32)strlen(sztestitem_scpi), &writeCount);
if (status < VI_SUCCESS)
{
printf("Error writing to the device %d.\n", /*i +*/ 1);
status = viClose(instr);
}
strcpy_s(stringinput, ":SYST:ERR?\n");
status = viWrite(instr, (ViBuf)stringinput, (ViUInt32)strlen(stringinput), &writeCount);
就沒有問題.
我想問下這是為什么呢?nLength1和nLength長度都一樣。wchar_t會影響指令正確性嗎?還有SCPI指令最后要求以換行符作為結尾。我在發的時候也沒在指令尾部加“\n”怎么也是正確的。。我有點搞不懂,求教
uj5u.com熱心網友回復:
char sztestitem_scpi[200];int nLength1 = strlen(sztestitem_scpi);
字串都沒有初始化, DEBUG版本下和RELEASE版本下會表現出不一樣的結果吧
設定斷點看看,估計是空字串,就沒有發送出去
UNICODE 下使用 char, char* CStringA
uj5u.com熱心網友回復:
不是這個哦,我沒寫全..兩種發送的長度都是一樣的。不是低級錯誤的
uj5u.com熱心網友回復:
正確執行和不正確執行的儀器反應都是對的,就是已經操作成功。所以我懷疑是別的啥問題,比如\n這些...搞不懂
uj5u.com熱心網友回復:
SCPI命令 須以 \r, \n, \r\n 三者之一結束NI IO Trace 可以監視呼叫的函式、傳遞的引數和 回傳值
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/7409.html
標籤:基礎類
