0% fanden dieses Dokument nützlich (0 Abstimmungen)
17 Ansichten5 Seiten

ProfiNET SPS Service

Hochgeladen von

rall.sybera
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
17 Ansichten5 Seiten

ProfiNET SPS Service

Hochgeladen von

rall.sybera
Copyright
© All Rights Reserved
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als PDF, TXT herunterladen oder online auf Scribd lesen

ProfiNET SPS Service

Autonomer Realtime SPS Service entkoppelt Daten

ProfiNET Master Coding

Mit dem ProfiNET Master von Sybera wird das Senden und Empfangen von ProfiNET Datagrammen, sowie deren
Bearbeitung in Echtzeit realisiert. Die Schnittstelle ermöglicht die funktionale Bearbeitung der ProfiNET Nutzdaten
in einer, in die Windows Applikation eingebauten Echtzeit Task. Somit besteht der Binärcode der Windows
Applikation aus einem Windows Code-Bereich und einem Echtzeit Code-Bereich. Daten können über globale
Variablen zwischen den Bereichen ausgetauscht werden.

Windows User Application

Windows Source() Globals Realtime Source()


{ ... } { ... }

SHA Interface DLL

NT-Kernel
und
System-
Services SHA-DRV

Binary Binary
Windows Code Realtime Code

Windows CPU Cores Realtime CPU Core

Dieses Prinzip erfordert jedoch einen nativen Compiler (z.B. Visual Studio C++) um die Bereiche zu trennen und
den Binärcode der Echtzeittask an den separierten SPS Prozessor-Kern zu übertragen. Mit C# ist dies nicht
möglich und es muss vom Anwender neben der eigentlichen Applikation ein zweiter Echtzeit-Prozess mit einem
Daten-Interface entwickelt werden. Ebenfalls ist ein Mischbetrieb zwischen dem Windows 64-Bit Betriebssystem
und einem 32-Bit Applikationscode nur über eine solche Entkopplung möglich.

SYBERA GmbH, Geschäftsführer [Link], Hohenzollernstr.2, 71088 Holzgerlingen, Tel: 07031-744-608 (Fax: -609), Email: info@[Link]
ProfiNET SPS Service
Autonomer Realtime SPS Service entkoppelt Daten

ProfiNET SPS Service

Sybera bietet nun ein SPS Dienstprogramm für ProfiNET, das einen generischen Echtzeit-Code beinhaltet, als
Service installiert wird und im Hintergrund abläuft. Dieser SPS Service arbeitet als ProfiNET Master und allokiert
selbstständig einen globalen Daten-Pool, mit dem zyklisch Daten ausgetauscht werden. An diesen Daten-Pool
kann sich eine User-Applikation über ein einfaches Interface anbinden und ebenfalls Daten austauschen.
Dabei ist das Pool-Interface vorgegeben:

SPS Service Installation

Der SPS-Service kann über das Kommandozeilenfenster installiert oder deinstalliert werden:

Kommandozeilen Parameter:

-install Installiert den Service


-remove Deinstalliert den Service
-period:x Sampling Periode

SYBERA GmbH, Geschäftsführer [Link], Hohenzollernstr.2, 71088 Holzgerlingen, Tel: 07031-744-608 (Fax: -609), Email: info@[Link]
ProfiNET SPS Service
Autonomer Realtime SPS Service entkoppelt Daten

Header file PLCCOMMON.H

#define MAX_UNIT_NUM 100

enum _SPS_CONTROL
{
SPS_CONTROL_NONE = 0,
SPS_CONTROL_START,
SPS_CONTROL_STOP,
SPS_CONTROL_SCAN
};

enum _SPS_STATUS
{
SPS_STATUS_STOPPED = 0,
SPS_STATUS_STARTED,
SPS_STATUS_SCANNED,
SPS_STATUS_WARNING,
SPS_STATUS_ERROR
};

#define MAX_STATION_NUM 1000


#define MAX_IMAGE_SIZE 0x10000

typedef struct _UNIT_INFO


{
UCHAR MacAddr[ETH_ADDRESS_LEN];
TYPE32 Ip;
USHORT InputFrameID;
USHORT InputLen;
UCHAR InputFrameData[MAX_FRAME_DATA];
USHORT OutputFrameID;
USHORT OutputLen;
UCHAR OutputFrameData[MAX_FRAME_DATA];

} UNIT_INFO, *PUNIT_INFO;

typedef struct _SPS_POOL


{
ULONG Control; //SPS service control
ULONG Status; //SPS service status
ULONG Period; //SPS period

BOOL bError; //stack error flag


BOOL bRun; //stack run flag
BOOL bLock; //Pool lock flag
BOOL bBusy; //Pool busy flag

ULONG UpdateCnt; //Station Update Counter


ULONG LoopCnt; //Realtime Cycle Counter

CHAR szStationFile[MAX_PATH]; //station configuration file

ULONG UnitNum;
UNIT_INFO UnitList[MAX_UNIT_NUM];

} SPS_POOL, *PSPS_POOL;

SYBERA GmbH, Geschäftsführer [Link], Hohenzollernstr.2, 71088 Holzgerlingen, Tel: 07031-744-608 (Fax: -609), Email: info@[Link]
ProfiNET SPS Service
Autonomer Realtime SPS Service entkoppelt Daten

SPS Service Pool Interface

Für die Anbindung an den SPS Pool stellt Sybera eine eigene Bibliothek bereit, die auch von gemanagtem Code
(z.B. C#, CVI LabWindows) ausgeführt werden kann.

Sha64DllNoRt32(64).LIB
Sha64DllNoRt32(64).DLL

z.B. C#

DllImport("[Link]")
public extern static System.UInt32 ShaAttachMemWithTag(
System.UInt32 PoolTag, //Pool Tag 0x8057
ref System.UInt32 PoolSize, //Pool Size
ref IntPtr userPool, //Pool Ptr (Windows Use)
ref System.UInt64 PoolHandle); //Pool Handle

public extern static System.UInt32 ShaDetachMem(System.UInt64 PoolHandle); //Pool Handle

public extern static System.UInt32 ShaWriteMem(


ref IntPtr BlockPtr,
UInt32 BlockLen,
UInt32 Offs);

public extern static System.UInt32 ShaReadMem(


ref IntPtr BlockPtr,
UInt32 BlockLen,
UInt32 Offs);

z.B. C++

__declspec(dllimport) ULONG SHAAPI ShaAttachMemWithTag(


ULONG PoolTag, //Pool Tag 0x8057
PULONG PoolSize, //Pool Size
PVOID* ppUserPool, //Pool Ptr (Windows Use)
HANDLE* phPool); //Pool Handle

__declspec(dllimport) ULONG SHAAPI ShaDetachMem(HANDLE hPool); //Pool Handle

__declspec(dllimport) ULONG SHAAPI ShaWriteMem(


PVOID pBlock,
ULONG BlockLen,
ULONG Offs)

__declspec(dllimport) ULONG SHAAPI ShaReadMem(


PVOID pBlock,
ULONG BlockLen,
ULONG Offs)

SYBERA GmbH, Geschäftsführer [Link], Hohenzollernstr.2, 71088 Holzgerlingen, Tel: 07031-744-608 (Fax: -609), Email: info@[Link]
ProfiNET SPS Service
Autonomer Realtime SPS Service entkoppelt Daten

Beispiel UserAPP (C++)

//Define image offsets


#define EL1008_DI_OFFSET 0
#define EL2008_DO_OFFSET 0
#define SPSPOOL_TAG 0x8180

void main(void)
{
HANDLE hPool = NULL;
PSPS_POOL pPool;
ULONG PoolSize;
UCHAR c;
DWORD Error;

//Try to attach to BOOT memory


Error = ShaAttachMemWithTag(
SPSPOOL_TAG, //Memory tag
&PoolSize, //Memory size
(void**)&pPool, //Pointer to memory for Windows access
&hPool); //Handle to memory device

if (Error == ERROR_SUCCESS)
{
//Get device RX pointer
//Get device TX pointer
PUCHAR pEL1008_DI = (PUCHAR)&pPool->ImageData[RX_IMAGE][EL1008_DI_OFFSET];
PUCHAR pEL2008_DO = (PUCHAR)&pPool->ImageData[TX_IMAGE][EL2008_DO_OFFSET];

do
{
//Set output values
(*pEL2008_DO)++;

Sleep(100);
}
while (!kbhit());

//Detach from BOOT memory


ShaDetachMem(hPool);
}
}

Der neue SPS Service erleichtert den Umgang mit gemanagtem Code (z.B. C# und CVI LabWindows) und bietet
eine ideale Plattform für den zyklischen Datenaustausch. Mit einem einfachen Interface können nun die zyklischen
SPS-Daten mit der eigenen Applikation ausgetauscht und bearbeitet werden, ohne dazu eine Echtzeit-Task zu
implementieren.

SYBERA GmbH, Geschäftsführer [Link], Hohenzollernstr.2, 71088 Holzgerlingen, Tel: 07031-744-608 (Fax: -609), Email: info@[Link]

Das könnte Ihnen auch gefallen