RMCLink C++ Wrapper Class

CRMCLink::ReadBitField Method

Reads a bit field (range of bits) from an integer (L) register in the RMC, and converts the binary value of the bits to a long integer. ReadBitField is typically used to read the value of a multiple-bit parameter in the RMC70, RMC150, or RMC200.

Syntax

C++

HRESULT ReadBitField(

   UINT file,

   UINT element,

   UINT fieldStart,

   UINT fieldLen,

   UINT& value

);

Parameters

file

File number of the register with the bit to be read. See the RMCLink Register Reference for details.

element

Element number of the register with the bit to be read. See the RMCLink Register Reference for details.

fieldStart

Number of the least significant bit (0-31) of the register's bit field. Bits are numbered from least to most significant.

fieldLen

Total number of bits in the bit field (1-32).

value

The value of the bit field is returned in this parameter.

Return Value

Returns S_OK on success. Otherwise, an error code is returned. Possible error codes are listed below.

Remarks

This method is synchronous, which means that it will not return until the read is completed, which may take several seconds. If this method is called on the main thread, then the application will likely be unresponsive until this method completes. For applications where this is not acceptable, this and other synchronous methods should be called from a worker thread, and may use the CancelRequest method to cancel an in progress request.

Error Codes

Member Name

Description

E_OUTOFMEMORY

Out of memory.

E_INVALIDARG

One of the file, element, fieldStart, or fieldLen parameters are out of range.

RMCLINK_E_DISCONNECTING

Link is being disconnected by another thread.

RMCLINK_E_DISCONNECTED

The link has not been connected.

RMCLINK_E_SOCK_INTERNAL

Internal socket error.

RMCLINK_E_CANCELLED

Operation cancelled by call to CancelRequest.

RMCLINK_E_TIMEOUT

Operation timed out.

RMCLINK_E_SOCK_GRACEFUL_CLOSE

TCP/IP connection closed by remote device.

RMCLINK_E_SOCK_ERROR_RD

Connection error while waiting for response from the remote device.

RMCLINK_E_SOCK_INV_RD_LEN

Connection error while waiting for response from the remote device.

RMCLINK_E_SOCK_ERROR_WR

Connection error while sending request to the remote device.

RMCLINK_E_SOCK_INV_WR_LEN

Connection error while sending request to the remote device.

RMCLINK_E_CE_IOE

Serial IOE error.

RMCLINK_E_CE_FRAME

Serial framing error.

RMCLINK_E_CE_BREAK

Serial Break error.

RMCLINK_E_CE_OVERRUN

Serial overrun.

RMCLINK_E_CE_RXOVER

Serial receive overrun.

RMCLINK_E_CE_RXPARITY

Serial parity error.

RMCLINK_E_CE_TXFULL

Serial transmitter full.

RMCLINK_E_CONN_BROKEN

Connection broken.

RMCLINK_E_PARTIAL_WRITE

Unable to send full request to the remote device.

RMCLINK_E_BAD_ADDRESS

Attempt to read beyond the end of a file.

RMCLINK_E_USB_SETTIMEOUT

Internal USB driver error.

RMCLINK_E_USB_OP_ABORT

Unsuccessful transfer of data between the PC and the controller. Ensure that the physical connection between the PC and controller is still intact.

RMCLINK_E_USB_DISCONNECT

The controller appears to have been disconnected from the USB port. Ensure that the physical connection between the PC and controller is still intact.

Example

The following code example illustrates the use of the ReadBitField method.

C++

#include <windows.h>
#include <stdio.h>
#include "RMCLink.h"
 
void main()
{
    // In order to create COM objects, we must initialize the COM sub-system.
    ::CoInitialize(0);
 
    // Create a new RMCLink object.
    CRMCLink* pRMC = CRMCLink::CreateEthernetLink(CRMCLink::dtRMC70, _T("192.168.0.22"));
    if ( pRMC != NULL )
    {
        // Establish the connection.
        HRESULT hr = pRMC->Connect();
        if ( SUCCEEDED(hr) )
        {
            // Read bits 10-11 of L8:0 (Axis 0 Target State bits A and B)
            UINT uTargetState;
            hr = pRMC->ReadBitField(CRMCLink::fn70StatusAxis0, 0, 10, 2, uTargetState);
            if ( SUCCEEDED(hr) )
                printf("Target Data = %d\n", uTargetState);
 
            // Close the connection.
            pRMC->Disconnect();
        }
 
        // Free the RMCLink object we created.
        delete pRMC;
    }
 
    // Release the COM sub-system.
    ::CoUninitialize();
}

 

See Also

CRMCLink Class | RMCLink C++ Wrapper Class


Send comments on this topic.

Copyright (c) 2024 Delta Computer Systems, Inc. dba Delta Motion