Пример #1
0
/**
 * @brief A frontend to AdsSyncReadWriteReqEx2() with port = defaultPort and pnRead = NULL
 */
int32_t AdsSyncReadWriteReq(PAmsAddr pAddr,
                         uint32_t nIndexGroup,
                         uint32_t nIndexOffset,
                         uint32_t nReadLength,
						 void *pReadData,
                         uint32_t nWriteLength, void *pWriteData)
{
	return AdsSyncReadWriteReqEx2(defaultPort, pAddr,
								 nIndexGroup, nIndexOffset,
								 nReadLength, pReadData,
								 nWriteLength, pWriteData,
								 NULL);
}
Пример #2
0
uint32_t getHandleByNameExample(std::ostream& out, long port, const AmsAddr& server,
                                const std::string handleName)
{
    uint32_t handle = 0;
    const long handleStatus = AdsSyncReadWriteReqEx2(port,
                                                     &server,
                                                     ADSIGRP_SYM_HNDBYNAME,
                                                     0,
                                                     sizeof(handle),
                                                     &handle,
                                                     handleName.size(),
                                                     handleName.c_str(),
                                                     nullptr);
    if (handleStatus) {
        out << "Create handle for '" << handleName << "' failed with: " << std::dec << handleStatus << '\n';
    }
    return handle;
}
Пример #3
0
uint32_t getSymbolSize(std::ostream& out, long port, const AmsAddr& server, const std::string handleName)
{
    AdsSymbolEntry symbolEntry;
    uint32_t bytesRead;

    const long status = AdsSyncReadWriteReqEx2(port,
                                               &server,
                                               ADSIGRP_SYM_INFOBYNAMEEX,
                                               0,
                                               sizeof(symbolEntry),
                                               &symbolEntry,
                                               handleName.size(),
                                               handleName.c_str(),
                                               &bytesRead);
    if (status) {
        throw std::runtime_error("Unable to determine symbol size, reading ADS symbol information failed with: " + std::to_string(
                                     status));
    }
    return symbolEntry.size;
}