opc与plc连接之后我想实时收到变化的数据,我现在用了回调OnDataChange,能够监控数据的变化,但是我没办法将得到的新变量与item对应,这个要怎么做啊

解决方案 »

  1.   

    你在初始化OPC与PLC连接的时候,不初始化对应变量的吗?
      

  2.   

    function TOPCDataCallback.OnDataChange(dwTransid: DWORD; hGroup: OPCHANDLE;
                 hrMasterquality: HResult; hrMastererror: HResult; dwCount: DWORD;
           phClientItems: POPCHANDLEARRAY; pvValues: POleVariantArray;
           pwQualities: PWordArray; pftTimeStamps: PFileTimeArray;
           pErrors: PResultList): HResult;stdcall;
    var
      ClientItems: POPCHANDLEARRAY;
      Values: POleVariantArray;
      Qualities: PWORDARRAY;
      I: Integer;
      NewValue:array [0..1] of string;
      OutputValue:array [0..1] of string;
    begin
      Result := S_OK;
      ClientItems := POPCHANDLEARRAY(phClientItems);
      Values:=POleVariantArray(pvValues);
      Qualities:=PWORDARRAY(pwQualities);
      for I:= 0 to dwCount-1 do
      begin
        if Qualities[I] = OPC_QUALITY_GOOD then
        begin
          NewValue[i]:= VarToStr(Values[I]);
          OutputValue[i]:=format(' %d , value: %s', [ClientItems[i],NewValue[i]]);
          //form1.Label1.Caption:=inttostr(ClientItems[0]);
         // form1.Label2.Caption:=inttostr(ClientItems[1]);
        end
        else
        begin
          ShowMessage('Callback received for item , but quality not good');
        end;
      end;
    end;
    这个是数据变化触发的回调函数,里面的dwCount得到的是数据变化的item数量,所以ClientItems[i]我得到的和我实际的item是有出入的