Добавить товар в группу - OPC Client - PullRequest
0 голосов
/ 01 ноября 2018

Я работаю над проектом связи OPC в Windows 10. (клиент VS10 C ++ для сервера Rexroth OPC)

Я подключаю сервер и добавляю группу, но у меня проблема в следующей функции AddAllItems.

     void AddAllItems(IOPCItemMgt* pIOPCItemMgt, item_container &ITEMS)
        {
            HRESULT hr;
            OPCHANDLE hServerItemTMP;
            size_t m;

            char buf[100];

            //vector<OPCITEMDEF*> AllItemsArray(ITEMS.item_types.size());

            for(int i=0; i<(int)ITEMS.item_types.size(); i++) {

                wcstombs_s(&m, buf, 100, ITEMS.vecwc_Item_IDs[i], _TRUNCATE);
                printf("Adding the item %s to the group...\n", buf);
                ITEMS.hItem_IDs.push_back(i+1);
                // Array of items to add:
                OPCITEMDEF ItemArray[] =
                {{/*szAccessPath*/ L"",
                /*szItemID*/ ITEMS.vecwc_Item_IDs[i],
                /*bActive*/ TRUE,
                /*hClient*/ ITEMS.hItem_IDs[i],
                /*dwBlobSize*/ 0,
                /*pBlob*/ NULL,
                /*vtRequestedDataType*/ VT,
                /*wReserved*/0
                }};
                //AllItemsArray.push_back(ItemArray);

                //Add Result:
                OPCITEMRESULT* pAddResult=NULL;
                HRESULT* pErrors = NULL;

                // Add an Item to the previous Group:
                hr = pIOPCItemMgt->AddItems(1, ItemArray, &pAddResult, &pErrors);

                if (hr != S_OK){
                    printf("Failed call to AddItems function. Error code = %x\n", hr);
                    exit(0);
                } else { printf("AddItems function worked\n"); }

                // Server handle for the added item:
                hServerItemTMP = pAddResult[0].hServer;

                vec_hServerItem.push_back(hServerItemTMP);
                // release memory allocated by the server:
                CoTaskMemFree(pAddResult->pBlob);

                CoTaskMemFree(pAddResult);
                pAddResult = NULL;

                CoTaskMemFree(pErrors);
                pErrors = NULL;
            }

        }

Этот код следует за блоком if и завершается. Почему я не могу добавить элемент в группу? Если я смотрю файл журнала сервера, я вижу «Клиент подключен к серверу».

                hr = pIOPCItemMgt->AddItems(1, ItemArray, &pAddResult, &pErrors);

                if (hr != S_OK){
                    printf("Failed call to AddItems function. Error code = %x\n", hr);
                    exit(0);
                } else { printf("AddItems function worked\n"); }

Код ошибки = 80004005 ч = E_FAIL

Я использую любое тестовое клиентское приложение на этом сервере (чтение и запись). Однако я читаю все данные на сервере моделирования Matrikon или Graybox, используя этот код клиента.

Где я делаю ошибку? Спасибо за сейчас.

...