PviCreateRequest, PviXCreateRequest functions

<< 点击显示目录 >>

主页  PVI通信 > PVI帮助信息 > PVI base system > PVICOM interface > PVICOM functions >

PviCreateRequest, PviXCreateRequest functions

Definition for C/C++

int PviCreateRequest (LPCSTR pObjectName, DWORD ObjectTyp, LPCSTR pObjektDescriptor, LPVOID hEventMsg, DWORD EventMsgNo, LPARAM EventParam, LPCSTR pLinkDescriptor, LPVOID hResMsg, DWORD ResMsgNo, LPARAM ResParam)

int PviXCreateRequest (DWORD hPvi, LPCSTR pObjectName, DWORD ObjectTyp, LPCSTR pObjektDescriptor, LPVOID hEventMsg, DWORD EventMsgNo, LPARAM EventParam, LPCSTR pLinkDescriptor, LPVOID hResMsg, DWORD ResMsgNo, LPARAM ResParam)

Definition for Basic

PviCreateRequest (ByVal pObjectName As String, ByVal ObjectType As Long, ByVal pObjectDescriptor As String, ByVal hEventMsg As Long, ByVal EventMsgNo As Long, ByVal EventParam As Long, ByVal pLinkDescriptor As String, ByVal hResMsg As Long, ByVal ResMsgNo As Long, ByVal ResParam As Long) As Long

PviXCreateRequest (ByVal hPvi As Long, ByVal pObjectName As String, ByVal ObjectType As Long, ByVal pObjectDescriptor As String, ByVal hEventMsg As Long, ByVal EventMsgNo As Long, ByVal EventParam As Long, ByVal pLinkDescriptor As String, ByVal hResMsg As Long, ByVal ResMsgNo As Long, ByVal ResParam As Long) As Long

Arguments

Argument

I/O

说明

hPvi

In

来自 PviXInitialize 函数的实例句柄

pObjectName

In

指向 对象名称对象路径名称的指针。以空尾的字符串形式给出。

ObjectType

In

对象类型条目。

pobj_line, pobj_device, pobj_station, pobj_cpu, pobj_modul, pobj_task, pobj_pvar。

如果对象类型是用pObjectName("OT "参数)中的对象名称指定的,那么这里给出的对象类型就不重要了。

pObjectDescriptor

In

指向 进程对象描述的指针。以空结尾的字符串形式给出。

hEventMsg

In

用户信息的定义 ,它被分配给链接对象,用于传递事件数据(事件)的信号。如果hEventMsg不等于0(零),那么将建立一个临时进程对象和一个链接对象。如果hEventMsg等于0(零),那么就会建立一个没有链接对象的静态进程对象。

EventMsgNo

In

用户信息的信息编号

= 0 (Null)。在这种情况下,可以为hEventMsg指定0(零)或任何不等于0的值(例如,PVI_HMSG_NIL),没有为事件数据分配用户消息。

EventParam

In

用户信息的消息参数 在32位PVI版本(PviCom.dll)中,消息参数(用户参数)的大小为4字节,在64位PVI版本(PviCom64.dll)中为8字节。

pLinkDescriptor

In

指向 链接对象描述的指针。以空结尾的字符串形式给出。

hResMsg

In

用户信息的定义 ,它预示着该函数调用的响应(请求和响应

= 0(空)。PVI管理器不发送响应

ResMsgNo

In

用户信息的信息编号

= 0 (Null):与hResMsg=0含义相同。

ResParam

In

用户信息的消息参数 在32位PVI版本(PviCom.dll)中,消息参数(用户参数)的大小为4字节,在64位PVI版本(PviCom64.dll)中为8字节。

Return value

如果数值不是0,则表明有错误。错误代码被作为一个值返回。原则上,这个函数只报告Windows资源错误(如没有足够的可用内存)或用户错误(如非法的函数参数,不正确的函数使用,等等)。在这种情况下,不会向PVI管理器发送请求,也不会执行定义的响应信息。如果在数据传输过程中或在处理请求时发生错误,那么它将只与响应数据一起报告。

Description

这个函数向PVI管理器发送一个请求,以建立一个 进程对象。静态进程对象或临时进程对象都可以用 一个链接对象来设置。hEventMsg函数参数被用来选择进程对象的类型。响应数据必须用 PviCreateResponse 或PviXCreateResponse函数 读取  ,除非使用 PVICALLBACK_DATA 类型的回调函数 。

指定 "hEventMsg=0"(零)设置了一个没有链接对象的静态进程对象。如果在PVI管理器中已经存在一个具有相同名称和相同对象类型的进程对象,错误12002(对象名称已经存在)将与响应一起报告。如果没有这样一个进程对象,它将被设置为一个静态的进程对象,并使用用pObjectDescriptor定义的对象参数进行设置。在这种情况下,EventMsgNo、EventParam和pLinkDescriptor参数不会被评估,因此是不相关的。

如果hEventMsg函数参数定义了一个用户消息(值不为零),那么就会建立一个进程对象和一个链接对象。如果在PVI管理器中已经有一个具有相同名称和对象类型的进程对象(临时或静态),那么只为这个进程对象建立一个链接对象,pObjectDescriptor参数变得不相关。这与 PviLinkRequest 函数的工作方式 相呼应 。然而,如果没有相应的过程对象,那么就会建立一个临时的过程对象,并使用用pObjectDescriptor定义的对象参数来设置。

用pLinkDescriptor定义的对象参数在设置链接对象时被使用。应用程序收到一个带有响应数据的链接ID,用于识别设置的链接对象。

Example for Visual C++

#include <PviCom.h>
class CPviDlg : public CDialog
{
    ...
    int m_CreateRequestCnt;
    DWORD m_LinkID[1024];
    long m_ErrCode[1024];
    void CreatePviObjects ();
    LRESULT OnPviCreateResp (WPARAM, LPARAM);
    LRESULT OnPviObjEvent (WPARAM, LPARAM);
    ...
    DECLARE_MESSAGE_MAP ()
};
BEGIN_MESSAGE_MAP (CPviDlg, CDialog)
    ...
    ON_MESSAGE (WM_USER+2, OnPviCreateResp)
    ON_MESSAGE (WM_USER+3, OnPviObjEvent)
END_MESSAGE_MAP()
LRESULT CPviDlg::OnPviObjEvent (WPARAM wParam, LPARAM lParam)
{
    ...
    return (0);
}
LRESULT CPviDlg::OnPviCreateResp (WPARAM wParam, LPARAM lParam)
{
    int ErrCode;
    DWORD LinkID;
    ErrCode = PviCreateResponse (wParam, &LinkID);
    if (ErrCode != 0)
        m_ErrCode[lParam] = ErrCode;
    else
        m_LinkID[lParam] = LinkID;
    if (--m_CreateRequestCnt <= 0)
    {
        // last create response was received:
        ...
    }
    return (0);
}
void CPviDlg::CreatePviObjects()
{
    int ErrCode;
    // Initialize members:
    m_CreateRequestCnt = 0;
    memset (m_LinkID, 0, sizeof (m_LinkID));
    memset (m_ErrCode, 0, sizeof (m_ErrCode));
    // Create line object:
    ErrCode = PviCreateRequest ("@Pvi/LNINA2", POBJ_LINE, "CD=LnIna2",
                                CWnd::m_hWnd, WM_USER+3, 1, "EV=e",
                                CWnd::m_hWnd, WM_USER+2, 1);
    if (ErrCode != 0)
        m_ErrCode[1] = ErrCode;
    else
        m_CreateRequestCnt++;
    // Create device object:
    ErrCode = PviCreateRequest ("@Pvi/LNINA2/COM2", POBJ_DEVICE, "CD=\"/IF=com2\"",
                                CWnd::m_hWnd, WM_USER+3, 2, "EV=e",
                                CWnd::m_hWnd, WM_USER+2, 2);
    if (ErrCode != 0)
        m_ErrCode[2] = ErrCode;
    else
        m_CreateRequestCnt++;
    // Create CPU object:
    ErrCode = PviCreateRequest ("@Pvi/LNINA2/COM2/CPU", POBJ_CPU, "CD=\"\"",
                                CWnd::m_hWnd, WM_USER+3, 3, "EV=e",
                                CWnd::m_hWnd, WM_USER+2, 3);
    if (ErrCode != 0)
        m_ErrCode[3] = ErrCode;
    else
        m_CreateRequestCnt++;
    ...
    // Create variable object for global CPU variable PVar1:
    ErrCode = PviCreateRequest ("@Pvi/LNINA2/COM2/CPU/PVar1", POBJ_PVAR, "CD=PVar1",
                                CWnd::m_hWnd, WM_USER+3, 10, "VT=i32 LT=prc",
                                CWnd::m_hWnd, WM_USER+2, 10);
    if (ErrCode != 0)
        m_ErrCode[10] = ErrCode;
    else
        m_CreateRequestCnt++;
    ...
}