Current section
Files
Jump to
Current section
Files
src/snap7/src/lib/snap7_libmain.cpp
/*=============================================================================|
| PROJECT SNAP7 1.4.1 |
|==============================================================================|
| Copyright (C) 2013, 2015 Davide Nardella |
| All rights reserved. |
|==============================================================================|
| SNAP7 is free software: you can redistribute it and/or modify |
| it under the terms of the Lesser GNU General Public License as published by |
| the Free Software Foundation, either version 3 of the License, or |
| (at your option) any later version. |
| |
| It means that you can distribute your commercial software linked with |
| SNAP7 without the requirement to distribute the source code of your |
| application and without the requirement that your application be itself |
| distributed under LGPL. |
| |
| SNAP7 is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| Lesser GNU General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License and a |
| copy of Lesser GNU General Public License along with Snap7. |
| If not, see http://www.gnu.org/licenses/ |
|=============================================================================*/
#include "snap7_libmain.h"
#ifndef OS_WINDOWS
void libinit(void) __attribute__((constructor));
void libdone(void) __attribute__((destructor));
#endif
static bool libresult = true;
void libinit(void)
{
// in future expansions here can be inserted some initialization code
libresult=true;
}
void libdone(void)
{
// in future expansions here can be inserted some destruction code
}
#ifdef OS_WINDOWS
BOOL APIENTRY DllMain (HINSTANCE hInst,
DWORD reason,
LPVOID reserved)
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
libinit();
break;
case DLL_PROCESS_DETACH:
libdone();
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return libresult;
}
#endif
//***************************************************************************
// CLIENT
//***************************************************************************
S7Object S7API Cli_Create()
{
return S7Object(new TSnap7Client());
}
//---------------------------------------------------------------------------
void S7API Cli_Destroy(S7Object &Client)
{
if (Client)
{
delete PSnap7Client(Client);
Client=0;
}
}
//---------------------------------------------------------------------------
int S7API Cli_SetConnectionParams(S7Object Client, const char *Address, word LocalTSAP, word RemoteTSAP)
{
if (Client)
{
PSnap7Client(Client)->SetConnectionParams(Address, LocalTSAP, RemoteTSAP);
return 0;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_SetConnectionType(S7Object Client, word ConnectionType)
{
if (Client)
{
PSnap7Client(Client)->SetConnectionType(ConnectionType);
return 0;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_ConnectTo(S7Object Client, const char *Address, int Rack, int Slot)
{
if (Client)
return PSnap7Client(Client)->ConnectTo(Address, Rack, Slot);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_Connect(S7Object Client)
{
if (Client)
return PSnap7Client(Client)->Connect();
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_Disconnect(S7Object Client)
{
if (Client)
return PSnap7Client(Client)->Disconnect();
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_GetParam(S7Object Client, int ParamNumber, void *pValue)
{
if (Client)
return PSnap7Client(Client)->GetParam(ParamNumber, pValue);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_SetParam(S7Object Client, int ParamNumber, void *pValue)
{
if (Client)
return PSnap7Client(Client)->SetParam(ParamNumber, pValue);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_SetAsCallback(S7Object Client, pfn_CliCompletion pCompletion, void *usrPtr)
{
if (Client)
return PSnap7Client(Client)->SetAsCallback(pCompletion, usrPtr);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_ReadArea(S7Object Client, int Area, int DBNumber, int Start, int Amount, int WordLen, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->ReadArea(Area, DBNumber, Start, Amount, WordLen, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_WriteArea(S7Object Client, int Area, int DBNumber, int Start, int Amount, int WordLen, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->WriteArea(Area, DBNumber, Start, Amount, WordLen, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_ReadMultiVars(S7Object Client, PS7DataItem Item, int ItemsCount)
{
if (Client)
return PSnap7Client(Client)->ReadMultiVars(Item, ItemsCount);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_WriteMultiVars(S7Object Client, PS7DataItem Item, int ItemsCount)
{
if (Client)
return PSnap7Client(Client)->WriteMultiVars(Item, ItemsCount);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_DBRead(S7Object Client, int DBNumber, int Start, int Size, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->DBRead(DBNumber, Start, Size, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_DBWrite(S7Object Client, int DBNumber, int Start, int Size, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->DBWrite(DBNumber, Start, Size, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_MBRead(S7Object Client, int Start, int Size, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->MBRead(Start, Size, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_MBWrite(S7Object Client, int Start, int Size, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->MBWrite(Start, Size, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_EBRead(S7Object Client, int Start, int Size, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->EBRead(Start, Size, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_EBWrite(S7Object Client, int Start, int Size, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->EBWrite(Start, Size, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_ABRead(S7Object Client, int Start, int Size, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->ABRead(Start, Size, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_ABWrite(S7Object Client, int Start, int Size, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->ABWrite(Start, Size, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_TMRead(S7Object Client, int Start, int Amount, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->TMRead(Start, Amount, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_TMWrite(S7Object Client, int Start, int Amount, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->TMWrite(Start, Amount, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_CTRead(S7Object Client, int Start, int Amount, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->CTRead(Start, Amount, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_CTWrite(S7Object Client, int Start, int Amount, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->CTWrite(Start, Amount, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_ListBlocks(S7Object Client, TS7BlocksList *pUsrData)
{
if (Client)
return PSnap7Client(Client)->ListBlocks(pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_GetAgBlockInfo(S7Object Client, int BlockType, int BlockNum, TS7BlockInfo *pUsrData)
{
if (Client)
return PSnap7Client(Client)->GetAgBlockInfo(BlockType, BlockNum, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_GetPgBlockInfo(S7Object Client, void *pBlock, TS7BlockInfo *pUsrData, int Size)
{
if (Client)
return PSnap7Client(Client)->GetPgBlockInfo(pBlock, pUsrData, Size);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_ListBlocksOfType(S7Object Client, int BlockType, TS7BlocksOfType *pUsrData, int &ItemsCount)
{
if (Client)
return PSnap7Client(Client)->ListBlocksOfType(BlockType, pUsrData, ItemsCount);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_Upload(S7Object Client, int BlockType, int BlockNum, void *pUsrData, int &Size)
{
if (Client)
return PSnap7Client(Client)->Upload(BlockType, BlockNum, pUsrData, Size);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_FullUpload(S7Object Client, int BlockType, int BlockNum, void *pUsrData, int &Size)
{
if (Client)
return PSnap7Client(Client)->FullUpload(BlockType, BlockNum, pUsrData, Size);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_Download(S7Object Client, int BlockNum, void *pUsrData, int Size)
{
if (Client)
return PSnap7Client(Client)->Download(BlockNum, pUsrData, Size);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_Delete(S7Object Client, int BlockType, int BlockNum)
{
if (Client)
return PSnap7Client(Client)->Delete(BlockType, BlockNum);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_DBGet(S7Object Client, int DBNumber, void *pUsrData, int &Size)
{
if (Client)
return PSnap7Client(Client)->DBGet(DBNumber, pUsrData, Size);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_DBFill(S7Object Client, int DBNumber, int FillChar)
{
if (Client)
return PSnap7Client(Client)->DBFill(DBNumber, FillChar);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_GetPlcDateTime(S7Object Client, tm &DateTime)
{
if (Client)
return PSnap7Client(Client)->GetPlcDateTime(DateTime);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_SetPlcDateTime(S7Object Client, tm *DateTime)
{
if (Client)
return PSnap7Client(Client)->SetPlcDateTime(DateTime);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_SetPlcSystemDateTime(S7Object Client)
{
if (Client)
return PSnap7Client(Client)->SetPlcSystemDateTime();
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_GetOrderCode(S7Object Client, TS7OrderCode *pUsrData)
{
if (Client)
return PSnap7Client(Client)->GetOrderCode(pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_GetCpuInfo(S7Object Client, TS7CpuInfo *pUsrData)
{
if (Client)
return PSnap7Client(Client)->GetCpuInfo(pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_GetCpInfo(S7Object Client, TS7CpInfo *pUsrData)
{
if (Client)
return PSnap7Client(Client)->GetCpInfo(pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_ReadSZL(S7Object Client, int ID, int Index, TS7SZL *pUsrData, int &Size)
{
if (Client)
return PSnap7Client(Client)->ReadSZL(ID, Index, pUsrData, Size);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_ReadSZLList(S7Object Client, TS7SZLList *pUsrData, int &ItemsCount)
{
if (Client)
return PSnap7Client(Client)->ReadSZLList(pUsrData, ItemsCount);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_PlcHotStart(S7Object Client)
{
if (Client)
return PSnap7Client(Client)->PlcHotStart();
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_PlcColdStart(S7Object Client)
{
if (Client)
return PSnap7Client(Client)->PlcColdStart();
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_PlcStop(S7Object Client)
{
if (Client)
return PSnap7Client(Client)->PlcStop();
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_CopyRamToRom(S7Object Client, int Timeout)
{
if (Client)
return PSnap7Client(Client)->CopyRamToRom(Timeout);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_Compress(S7Object Client, int Timeout)
{
if (Client)
return PSnap7Client(Client)->Compress(Timeout);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_GetPlcStatus(S7Object Client, int &Status)
{
if (Client)
return PSnap7Client(Client)->GetPlcStatus(Status);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_GetProtection(S7Object Client, TS7Protection *pUsrData)
{
if (Client)
return PSnap7Client(Client)->GetProtection(pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_SetSessionPassword(S7Object Client, char *Password)
{
if (Client)
return PSnap7Client(Client)->SetSessionPassword(Password);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_ClearSessionPassword(S7Object Client)
{
if (Client)
return PSnap7Client(Client)->ClearSessionPassword();
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_IsoExchangeBuffer(S7Object Client, void *pUsrData, int &Size)
{
if (Client)
return PSnap7Client(Client)->isoExchangeBuffer(pUsrData, Size);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_GetExecTime(S7Object Client, int &Time)
{
if (Client)
{
Time=PSnap7Client(Client)->Time();
return 0;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_GetLastError(S7Object Client, int &LastError)
{
if (Client)
{
LastError=PSnap7Client(Client)->LastError;
return 0;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_GetPduLength(S7Object Client, int &Requested, int &Negotiated)
{
if (Client)
{
Negotiated=PSnap7Client(Client)->PDULength;
Requested =PSnap7Client(Client)->PDURequest;
return 0;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_ErrorText(int Error, char *Text, int TextLen)
{
try{
ErrCliText(Error, Text, TextLen);
Text[TextLen-1] = '\0';
}
catch (...){
return errLibInvalidParam;
}
return 0;
}
//---------------------------------------------------------------------------
int S7API Cli_GetConnected(S7Object Client, int &Connected)
{
Connected=0;
if (Client)
{
Connected=PSnap7Client(Client)->Connected;
return 0;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsReadArea(S7Object Client, int Area, int DBNumber, int Start, int Amount, int WordLen, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->AsReadArea(Area, DBNumber, Start, Amount, WordLen, pUsrData);
else
return errLibInvalidParam;
}
//---------------------------------------------------------------------------
int S7API Cli_AsWriteArea(S7Object Client, int Area, int DBNumber, int Start, int Amount, int WordLen, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->AsWriteArea(Area, DBNumber, Start, Amount, WordLen, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsDBRead(S7Object Client, int DBNumber, int Start, int Size, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->AsDBRead(DBNumber, Start, Size, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsDBWrite(S7Object Client, int DBNumber, int Start, int Size, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->AsDBWrite(DBNumber, Start, Size, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsMBRead(S7Object Client, int Start, int Size, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->AsMBRead(Start, Size, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsMBWrite(S7Object Client, int Start, int Size, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->AsMBWrite(Start, Size, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsEBRead(S7Object Client, int Start, int Size, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->AsEBRead(Start, Size, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsEBWrite(S7Object Client, int Start, int Size, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->AsEBWrite(Start, Size, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsABRead(S7Object Client, int Start, int Size, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->AsABRead(Start, Size, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsABWrite(S7Object Client, int Start, int Size, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->AsABWrite(Start, Size, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsTMRead(S7Object Client, int Start, int Amount, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->AsTMRead(Start, Amount, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsTMWrite(S7Object Client, int Start, int Amount, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->AsTMWrite(Start, Amount, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsCTRead(S7Object Client, int Start, int Amount, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->AsCTRead(Start, Amount, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsCTWrite(S7Object Client, int Start, int Amount, void *pUsrData)
{
if (Client)
return PSnap7Client(Client)->AsCTWrite(Start, Amount, pUsrData);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsListBlocksOfType(S7Object Client, int BlockType, TS7BlocksOfType *pUsrData, int &ItemsCount)
{
if (Client)
return PSnap7Client(Client)->AsListBlocksOfType(BlockType, pUsrData, ItemsCount);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsReadSZL(S7Object Client, int ID, int Index, TS7SZL *pUsrData, int &Size)
{
if (Client)
return PSnap7Client(Client)->AsReadSZL(ID, Index, pUsrData, Size);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsReadSZLList(S7Object Client, TS7SZLList *pUsrData, int &ItemsCount)
{
if (Client)
return PSnap7Client(Client)->AsReadSZLList(pUsrData, ItemsCount);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsUpload(S7Object Client, int BlockType, int BlockNum, void *pUsrData, int &Size)
{
if (Client)
return PSnap7Client(Client)->AsUpload(BlockType, BlockNum, pUsrData, Size);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsFullUpload(S7Object Client, int BlockType, int BlockNum, void *pUsrData, int &Size)
{
if (Client)
return PSnap7Client(Client)->AsFullUpload(BlockType, BlockNum, pUsrData, Size);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsDownload(S7Object Client, int BlockNum, void *pUsrData, int Size)
{
if (Client)
return PSnap7Client(Client)->AsDownload(BlockNum, pUsrData, Size);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsCopyRamToRom(S7Object Client, int Timeout)
{
if (Client)
return PSnap7Client(Client)->AsCopyRamToRom(Timeout);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsCompress(S7Object Client, int Timeout)
{
if (Client)
return PSnap7Client(Client)->Compress(Timeout);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsDBGet(S7Object Client, int DBNumber, void *pUsrData, int &Size)
{
if (Client)
return PSnap7Client(Client)->AsDBGet(DBNumber, pUsrData, Size);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_AsDBFill(S7Object Client, int DBNumber, int FillChar)
{
if (Client)
return PSnap7Client(Client)->AsDBFill(DBNumber, FillChar);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_CheckAsCompletion(S7Object Client, int &opResult)
{
if (Client)
{
if (PSnap7Client(Client)->CheckAsCompletion(opResult))
return JobComplete;
else
return JobPending;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Cli_WaitAsCompletion(S7Object Client, int Timeout)
{
if (Client)
return PSnap7Client(Client)->WaitAsCompletion(Timeout);
else
return errLibInvalidObject;
}
//***************************************************************************
// SERVER
//***************************************************************************
S7Object S7API Srv_Create()
{
return S7Object(new TSnap7Server());
}
//---------------------------------------------------------------------------
void S7API Srv_Destroy(S7Object &Server)
{
if (Server)
{
delete PSnap7Server(Server);
Server=0;
}
}
//---------------------------------------------------------------------------
int S7API Srv_GetParam(S7Object Server, int ParamNumber, void *pValue)
{
if (Server)
return PSnap7Server(Server)->GetParam(ParamNumber, pValue);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Srv_SetParam(S7Object Server, int ParamNumber, void *pValue)
{
if (Server)
return PSnap7Server(Server)->SetParam(ParamNumber, pValue);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Srv_StartTo(S7Object Server, const char *Address)
{
if (Server)
return PSnap7Server(Server)->StartTo(Address);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Srv_Start(S7Object Server)
{
if (Server)
return PSnap7Server(Server)->Start();
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Srv_Stop(S7Object Server)
{
if (Server)
{
PSnap7Server(Server)->Stop();
return 0;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Srv_RegisterArea(S7Object Server, int AreaCode, word Index, void *pUsrData, int Size)
{
if (Server)
return PSnap7Server(Server)->RegisterArea(AreaCode, Index, pUsrData, Size);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Srv_UnregisterArea(S7Object Server, int AreaCode, word Index)
{
if (Server)
return PSnap7Server(Server)->UnregisterArea(AreaCode, Index);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Srv_LockArea(S7Object Server, int AreaCode, word Index)
{
if (Server)
return PSnap7Server(Server)->LockArea(AreaCode, Index);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Srv_UnlockArea(S7Object Server, int AreaCode, word Index)
{
if (Server)
return PSnap7Server(Server)->UnlockArea(AreaCode, Index);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Srv_GetStatus(S7Object Server, int &ServerStatus, int &CpuStatus, int &ClientsCount)
{
if (Server)
{
ServerStatus=PSnap7Server(Server)->Status;
CpuStatus=PSnap7Server(Server)->CpuStatus;
ClientsCount=PSnap7Server(Server)->ClientsCount;
return 0;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Srv_SetCpuStatus(S7Object Server, int CpuStatus)
{
if (Server)
{
PSnap7Server(Server)->CpuStatus=CpuStatus;
return 0;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Srv_ErrorText(int Error, char *Text, int TextLen)
{
try{
ErrSrvText(Error, Text, TextLen);
Text[TextLen-1] = '\0';
}
catch (...){
return errLibInvalidParam;
}
return 0;
}
//---------------------------------------------------------------------------
int S7API Srv_EventText(TSrvEvent &Event, char *Text, int TextLen)
{
try{
EvtSrvText(Event, Text, TextLen);
//Text[TextLen] = '\0';
}
catch (...){
return errLibInvalidParam;
}
return 0;
}
//---------------------------------------------------------------------------
int S7API Srv_PickEvent(S7Object Server, TSrvEvent *pEvent, int &EvtReady)
{
EvtReady=0;
if (Server)
{
EvtReady=int(PSnap7Server(Server)->PickEvent(pEvent));
return 0;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Srv_ClearEvents(S7Object Server)
{
if (Server)
{
PSnap7Server(Server)->EventsFlush();
return 0;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Srv_GetMask(S7Object Server, int MaskKind, longword &Mask)
{
if (Server)
{
Mask=0;
if ((MaskKind==mkEvent) || (MaskKind==mkLog))
{
if (MaskKind==mkEvent)
Mask=PSnap7Server(Server)->EventMask;
else
Mask=PSnap7Server(Server)->LogMask;
return 0;
}
else
return errLibInvalidParam;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Srv_SetMask(S7Object Server, int MaskKind, longword Mask)
{
if (Server)
{
if ((MaskKind==mkEvent) || (MaskKind==mkLog))
{
if (MaskKind==mkEvent)
PSnap7Server(Server)->EventMask=Mask;
else
PSnap7Server(Server)->LogMask=Mask;
return 0;
}
else
return errLibInvalidParam;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Srv_SetEventsCallback(S7Object Server, pfn_SrvCallBack pCallback, void *usrPtr)
{
if (Server)
return PSnap7Server(Server)->SetEventsCallBack(pCallback, usrPtr);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Srv_SetReadEventsCallback(S7Object Server, pfn_SrvCallBack pCallback, void *usrPtr)
{
if (Server)
return PSnap7Server(Server)->SetReadEventsCallBack(pCallback, usrPtr);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Srv_SetRWAreaCallback(S7Object Server, pfn_RWAreaCallBack pCallback, void *usrPtr)
{
if (Server)
return PSnap7Server(Server)->SetRWAreaCallBack(pCallback, usrPtr);
else
return errLibInvalidObject;
}
//***************************************************************************
// PARTNER
//***************************************************************************
S7Object S7API Par_Create(int Active)
{
return S7Object(new TSnap7Partner(Active!=0));
}
//---------------------------------------------------------------------------
void S7API Par_Destroy(S7Object &Partner)
{
if (Partner)
{
delete PSnap7Partner(Partner);
Partner=0;
}
}
//---------------------------------------------------------------------------
int S7API Par_GetParam(S7Object Partner, int ParamNumber, void *pValue)
{
if (Partner)
return PSnap7Partner(Partner)->GetParam(ParamNumber, pValue);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Par_SetParam(S7Object Partner, int ParamNumber, void *pValue)
{
if (Partner)
return PSnap7Partner(Partner)->SetParam(ParamNumber, pValue);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Par_StartTo(S7Object Partner, const char *LocalAddress, const char *RemoteAddress,
word LocTsap, word RemTsap)
{
if (Partner)
return PSnap7Partner(Partner)->StartTo(LocalAddress, RemoteAddress, LocTsap, RemTsap);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Par_Start(S7Object Partner)
{
if (Partner)
return PSnap7Partner(Partner)->Start();
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Par_Stop(S7Object Partner)
{
if (Partner)
return PSnap7Partner(Partner)->Stop();
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Par_BSend(S7Object Partner, longword R_ID, void *pUsrData, int Size)
{
if (Partner)
return PSnap7Partner(Partner)->BSend(R_ID, pUsrData, Size);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Par_AsBSend(S7Object Partner, longword R_ID, void *pUsrData, int Size)
{
if (Partner)
return PSnap7Partner(Partner)->AsBSend(R_ID, pUsrData, Size);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Par_CheckAsBSendCompletion(S7Object Partner, int &opResult)
{
if (Partner)
{
if (PSnap7Partner(Partner)->CheckAsBSendCompletion(opResult))
return JobComplete;
else
return JobPending;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Par_WaitAsBSendCompletion(S7Object Partner, longword Timeout)
{
if (Partner)
return PSnap7Partner(Partner)->WaitAsBSendCompletion(Timeout);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Par_SetSendCallback(S7Object Partner, pfn_ParBSendCompletion pCompletion, void *usrPtr)
{
if (Partner)
return PSnap7Partner(Partner)->SetSendCallback(pCompletion, usrPtr);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Par_BRecv(S7Object Partner, longword &R_ID, void *pData, int &Size, longword Timeout)
{
if (Partner)
return PSnap7Partner(Partner)->BRecv(R_ID, pData, Size, Timeout);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Par_CheckAsBRecvCompletion(S7Object Partner, int &opResult, longword &R_ID,
void *pData, int &Size)
{
if (Partner)
{
if (PSnap7Partner(Partner)->CheckAsBRecvCompletion(opResult, R_ID, pData, Size))
return JobComplete;
else
return JobPending;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Par_SetRecvCallback(S7Object Partner, pfn_ParBRecvCallBack pCompletion, void *usrPtr)
{
if (Partner)
return PSnap7Partner(Partner)->SetRecvCallback(pCompletion, usrPtr);
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Par_GetTimes(S7Object Partner, longword &SendTime, longword &RecvTime)
{
if (Partner)
{
SendTime=PSnap7Partner(Partner)->SendTime;
RecvTime=PSnap7Partner(Partner)->RecvTime;
return 0;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Par_GetStats(S7Object Partner, longword &BytesSent, longword &BytesRecv,
longword &SendErrors, longword &RecvErrors)
{
if (Partner)
{
BytesSent=PSnap7Partner(Partner)->BytesSent;
BytesRecv=PSnap7Partner(Partner)->BytesRecv;
SendErrors=PSnap7Partner(Partner)->SendErrors;
RecvErrors=PSnap7Partner(Partner)->RecvErrors;
return 0;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Par_GetLastError(S7Object Partner, int &LastError)
{
if (Partner)
{
LastError=PSnap7Partner(Partner)->LastError;
return 0;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Par_GetStatus(S7Object Partner, int &Status)
{
if (Partner)
{
Status=PSnap7Partner(Partner)->Status();
return 0;
}
else
return errLibInvalidObject;
}
//---------------------------------------------------------------------------
int S7API Par_ErrorText(int Error, char *Text, int TextLen)
{
try{
ErrParText(Error, Text, TextLen);
Text[TextLen - 1] = '\0';
}
catch (...){
return errLibInvalidParam;
}
return 0;
}