/******************************************************************************* | |
* Copyright (c) 2012 -2015 AIT, fortiss GmbH | |
* This program and the accompanying materials are made available under the | |
* terms of the Eclipse Public License 2.0 which is available at | |
* http://www.eclipse.org/legal/epl-2.0. | |
* | |
* SPDX-License-Identifier: EPL-2.0 | |
* | |
* Contributors: | |
* Filip Andren, Alois Zoitl - initial API and implementation and/or initial documentation | |
*******************************************************************************/ | |
#ifndef MODBUSCOMLAYER_H_ | |
#define MODBUSCOMLAYER_H_ | |
#include <forte_config.h> | |
#include "comlayer.h" | |
#include <stdint.h> | |
class CModbusConnection; | |
class CIEC_ANY; | |
namespace forte { | |
namespace com_infra { | |
class CModbusComLayer : public CComLayer{ | |
public: | |
CModbusComLayer(CComLayer* pa_poUpperLayer, CBaseCommFB* pa_poComFB); | |
virtual ~CModbusComLayer(); | |
EComResponse sendData(void *pa_pvData, unsigned int pa_unSize); // top interface, called from top | |
EComResponse recvData(const void *pa_pvData, unsigned int pa_unSize); | |
EComResponse processInterrupt(); | |
private: | |
struct STcpParams { | |
char m_acIp[15]; | |
unsigned int m_nPort; | |
}; | |
struct SRtuParams { | |
char m_acDevice[256]; | |
int m_nBaud; | |
char m_cParity; | |
int m_nDataBit; | |
int m_nStopBit; | |
}; | |
struct SCommonParams { | |
unsigned int m_nNrPolls; | |
unsigned int m_nNrSends; | |
long m_nPollFrequency; | |
unsigned int m_nFuncCode; | |
unsigned int m_nSlaveId; | |
unsigned int m_nReadStartAddress[100]; | |
unsigned int m_nReadNrAddresses[100]; | |
unsigned int m_nSendStartAddress[100]; | |
unsigned int m_nSendNrAddresses[100]; | |
unsigned int m_nResponseTimeout; | |
unsigned int m_nByteTimeout; | |
}; | |
template<typename T> | |
T convertFBOutput(TForteByte *pa_acDataArray, unsigned int pa_nDataSize); | |
unsigned int convertDataInput(void *pa_poInData, unsigned int pa_nDataSize, TForteUInt16 *pa_poConvertedData); | |
EComResponse openConnection(char *pa_acLayerParameter); | |
void closeConnection(); | |
//int processClientParams(char* pa_acLayerParams, char* pa_acIp, unsigned int &pa_nPort, long &pa_nPollFrequency, unsigned int &pa_nFuncCode, unsigned int &pa_nSlaveId, unsigned int *pa_nStartAddress, unsigned int *pa_nNrAddresses); | |
int processClientParams(char* pa_acLayerParams, STcpParams* pa_pTcpParams, SRtuParams* pa_pRtuParams, SCommonParams* pa_pCommonParams); | |
int findNextStartAddress(const char* pa_acString, int pa_nStartIndex); | |
int findNextStopAddress(const char* pa_acString, int pa_nStartIndex); | |
bool isIp(const char* pa_acIp); | |
EComResponse m_eInterruptResp; | |
CModbusConnection *m_pModbusConnection; | |
TForteByte m_acRecvBuffer[cg_unIPLayerRecvBufferSize]; | |
unsigned int m_unBufFillSize; | |
}; | |
} | |
} | |
#endif /* MODBUSCOMLAYER_H_ */ |