blob: b634545a114765f480f5d3312d4c9eba802bd182 [file] [log] [blame]
/*******************************************************************************
* 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_ */