Ads funktioiden avulla voi toteuttaa kättelyn c++ ohjelman ja Beckhoffin logiikan välillä.

Yksinkertainen esimerkki

Window määrittelyjä
#ifndef WINTYPES_H
#define WINTYPES_H

/*
Microsoftin tytöt ja pojat ovat halunneet keksiä omia nimiä standardi cpp:n tyypeille,
alla muutamia tärkeimpiä, joita tässä esimerkissä tarvitaan. Saatat tarvita Windows projektissa lisää tyyppejä. Niitä löydät osoitteesta
http://msdn.microsoft.com/en-us/library/aa383751(VS.85).aspx#BYTE
*/
typedef int INT;
typedef char* LPSTR;
#define WINAPI __stdcall
typedef int BOOL;
typedef BOOL *PBOOL;
typedef void VOID;
#define CALLBACK __stdcall
typedef unsigned long DWORD;
typedef DWORD *PDWORD;
typedef char CHAR;
typedef CHAR *PCHAR;
typedef float FLOAT;
typedef FLOAT *PFLOAT;
typedef unsigned short WORD;
typedef WORD *PWORD;
typedef short SHORT;
typedef SHORT PSHORT;
typedef void *PVOID;
typedef unsigned char BYTE;
typedef BYTE *PBYTE;
typedef  int   DaqHandleT;
typedef unsigned long ULONG;
typedef long LONG;
typedef unsigned int UINT;
typedef unsigned short USHORT;
typedef wchar_t WCHAR;
typedef unsigned long ULONG;
#endif // WINTYPES_H
projektitiedostoon kirjaston polku
LIBS += "c://twincat//AdsApi//tcadsdll//lib//TcAdsDll.lib"
otsikkotiedosto
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include "WinTypes.h"
#include "c:\twincat\AdsApi\tcadsdll\include\tcadsdef.h"
#include "c:\twincat\AdsApi\tcadsdll\include\tcadsapi.h"

namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
    Q_OBJECT
public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
    long     nErr, nPort;
    AmsAddr  Addr;
    PAmsAddr pAddr;
    DWORD    dwData;
    ULONG hAnalogInputs;
    ULONG hAnalogOutputs;
    void WriteDataToLogic(qint32 *asetusarvot, quint8 kokoTavuina);
    void ReadDataFromLogic(qint32 *mitatutArvot, quint32 kokoTavuina);
private:
    Ui::Dialog *ui;
};
#endif // DIALOG_H
luokan funktiot
#include "dialog.h"
#include "ui_dialog.h"


Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{
    ui->setupUi(this);
    pAddr = &Addr;
    nPort = AdsPortOpen();
    nErr = AdsGetLocalAddress(pAddr);
    pAddr->port =851;
    //5.11.25.80.1.1 netid on logiikan identiteetti (jokaisella oma)
    pAddr->netId.b[0]=5;
    pAddr->netId.b[1]=11;
    pAddr->netId.b[2]=25;
    pAddr->netId.b[3]=80;
    pAddr->netId.b[4]=1;
    pAddr->netId.b[5]=1;
    nErr=AdsSyncReadWriteReq( pAddr, ADSIGRP_SYM_HNDBYNAME, 0x0, 
                              sizeof(ULONG), &hAnalogInputs,
                              sizeof("MAIN.communication.AnalogInputsToPc_"),
                              "MAIN.communication.AnalogInputsToPc_");
...

}


Dialog::~Dialog()
{
    delete ui;
}

void Dialog::WriteDataToLogic(qint32 *asetusarvot, quint8 kokoTavuina)
{
    nErr=AdsSyncWriteReq( pAddr, ADSIGRP_SYM_VALBYHND, hAnalogOutputs,kokoTavuina,asetusarvot);
    Q_ASSERT(nErr==0);
}

void Dialog::ReadDataFromLogic(qint32 *mitatutArvot, quint32 kokoTavuina)
{
    nErr=AdsSyncReadReq( pAddr, ADSIGRP_SYM_VALBYHND,hAnalogInputs, lengthOfVectorAsBytes,mitatutArvot);
    Q_ASSERT(nErr==0);
}

 

Esimerkkejä

ADS-DLL Sample01.zip

ADS-DLL Sample02.zip

ADS-DLL Sample03.zip

ADS-DLL Sample04.zip

 

BechoffEsim.zip

 

  • No labels
You must log in to comment.