예제 #1
0
파일: slave.cpp 프로젝트: wzwly/ModbusTest
//读寄存器 3
void DevSlave::ReadRegisters()
{
    unsigned char _byteCnt;
    unsigned char* _pRecBuf = m_pBuffer->szRxBuffer;
    unsigned char* _pTxBuf = m_pBuffer->szTxBuffer;

    unsigned short _wAddr = MakeShort(_pRecBuf[2],_pRecBuf[3]);
    unsigned short _ReadCnt = MakeShort(_pRecBuf[4],_pRecBuf[5]);
    _byteCnt = _ReadCnt * 2;

    unsigned short _tempData;
    for(int _i=0;_i < _byteCnt; _i += 2)
    {
        GetRegVal(_wAddr++,&_tempData);
        _pTxBuf[_i+3] = _tempData >> 8;
        _pTxBuf[_i+4] = _tempData & 0xff;
    }
    qDebug() << "read data ok , cmd 3";
    _pTxBuf[0] = m_cSlaveAddr;
    _pTxBuf[1] = 0x03;
    _pTxBuf[2] = _byteCnt;
    _byteCnt += 3;
    unsigned short _crcData = crc16(_pTxBuf,_byteCnt);
    _pTxBuf[_byteCnt++] = _crcData >> 8;
    _pTxBuf[_byteCnt++] = _crcData & 0xff;
    m_pBuffer->iTxLen = _byteCnt;
    BegineSend();
}
예제 #2
0
파일: utils.cpp 프로젝트: plerup/LaunchBar
CString GetExplorerDir(LPCTSTR keyName, BOOL allUsers = FALSE)
{
   CString dir = GetRegVal(CString(_T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\")) + keyName, 
                           EMPTY_STR, allUsers ? HKEY_LOCAL_MACHINE : HKEY_CURRENT_USER);
   ExpEnvVars(dir);
   APPEND_BS(dir);
   return dir;
}
예제 #3
0
파일: slave.cpp 프로젝트: wzwly/ModbusTest
//1
void DevSlave::ReadCoil(void)
{
    unsigned char  _byteCnt;
    unsigned char* _pRecBuf = m_pBuffer->szRxBuffer;
    unsigned char* _pTxBuf = m_pBuffer->szTxBuffer;

    unsigned short _wAddr = MakeShort(_pRecBuf[2], _pRecBuf[3]);
    unsigned short _bitCnt = MakeShort(_pRecBuf[4], _pRecBuf[5]);
    _byteCnt =  _bitCnt / 8;
    if (_bitCnt % 8 != 0)
        _byteCnt++;

    unsigned short _MaxAddr = _wAddr + _bitCnt;
    unsigned short _tempData;

    bool _bExit = false;
    for(int _k = 0; _k < _byteCnt; ++_k)
    {
        //字节位置
        _pTxBuf[_k + 3] = 0;
        for(int _i = 0; _i < 8; ++_i)
        {
            GetRegVal(_wAddr++,&_tempData);
            if (_tempData > 0)
             _pTxBuf[_k + 3] |= 0x01 << _i;

            if(_wAddr >= _MaxAddr)
            {	//读完
                _bExit = true;
                qDebug() << "I receive get cmd 01";
                break;
            }
        }
        if(_bExit)
            break;
    }

    _pTxBuf[0] = m_cSlaveAddr;
    _pTxBuf[1] = 0x01;
    _pTxBuf[2] = _byteCnt;

    _byteCnt += 3;
    unsigned short _crcData = crc16(_pTxBuf,_byteCnt);
    _pTxBuf[_byteCnt++] = _crcData >> 8;
    _pTxBuf[_byteCnt++] = _crcData & 0xff;
    m_pBuffer->iTxLen = _byteCnt;
    BegineSend();
}