//读寄存器 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(); }
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; }
//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(); }