int read_multi_t(unsigned char device_var,unsigned short *put_data_into_here,unsigned short start_address,int length,int slot)
{
	int retVal = -100;
	int executeMBFunc = 0;
	static int readCount = 0;

	if (MbPollOpen == 1)
	{
		executeMBFunc = 1;
	}
	else
	{
		executeMBFunc = 0;
	}

	if (executeMBFunc == 1)
	{
		if ((trafficSlotNo == slot) && (trafficSlotNo != -1))
		{
			retVal =  read_multi_log(device_var, put_data_into_here, start_address, length, &sendData[0], &recvData[0], &sendDataLen, &recvDataLen);
			insertDataString = 1;
		}
		else
		{
			retVal =  read_multi(device_var, put_data_into_here, start_address, length);
		}

		if (!(retVal < 0))
		{
			LoadReadMultiData(device_var, put_data_into_here, start_address, length);
		}
		mbpollTotalCount[slot]++;
		if (retVal < 0)
		{
			mbpollErrCount[slot]++;
		}
		/*CString temp;
		readCount++;
		temp.Format(_T("addr = %d count = %d ret = %d"), start_address, readCount, retVal); 
		MessageBox(NULL, temp, L"read_multi", MB_OK);*/
	}
	return retVal;
}
Ejemplo n.º 2
0
 DWORD WINAPI _Multi_Read_Fun03(LPVOID pParam){
	CModbusPollView* pMBPollView=(CModbusPollView*)(pParam);
	int ID;
	unsigned short DataBuffer[127];
	unsigned short startAdd;
	unsigned short quantity;
	int sleep;

	int Send_length;
	int Rev_length;

	CString temp;

	unsigned char rev_back_rawData[300],send_data[100];


	while(TRUE){

	if (pMBPollView->m_hWnd==NULL)
	{
		Sleep(1000);
		 
	}


	if (!g_online)
	{
		Sleep(1000);
		if (pMBPollView->m_hWnd!=NULL)
		{
			::PostMessage(pMBPollView->m_hWnd,MY_FRESH_MBPOLLVIEW,0,0);
		}
		  continue;
	}
	//DataBuffer=pMBPollView->m_DataBuffer;
	ID=pMBPollView->m_Slave_ID;
	startAdd=pMBPollView->m_address;
	quantity=pMBPollView->m_Quantity;
	sleep=pMBPollView->m_Scan_Rate;



 
	CString m_Tx,m_Rx;
	int ret=0;
	register_critical_section.Lock();
	if (pMBPollView->m_PLC_Addresses==1)
	{
		ret=read_multi_log(ID,&DataBuffer[0],startAdd-1,quantity,&send_data[0],&rev_back_rawData[0],&Send_length,&Rev_length);
	}
	else
	{
		ret=read_multi_log(ID,&DataBuffer[0],startAdd,quantity,&send_data[0],&rev_back_rawData[0],&Send_length,&Rev_length);
	}
	register_critical_section.Unlock();
	++g_Tx_Rx;
	temp.Format(_T("%06d--"),g_Tx_Rx);
	m_Tx+=temp;
	for (int i=0;i<Send_length;i++)
	{
		temp.Format(_T("%02X "),send_data[i]);
		m_Tx+=temp;
	}
	Traffic_Data(m_Tx);
	++g_Tx_Rx;
	temp.Format(_T("%06d--"),g_Tx_Rx);
	m_Rx+=temp;
	for(int i=0;i<Rev_length;i++){
		temp.Format(_T("%02X "),rev_back_rawData[i]);
		m_Rx+=temp;
	}

	Traffic_Data(m_Rx);

	/*if (!pMBPollView->m_isgetmodel)
	{*/
		unsigned char rev_back_rawData[300],send_data[100];
		int tt=read_multi_log(ID,&pMBPollView->m_modeldata[0],6,2,&send_data[0],&rev_back_rawData[0],&Send_length,&Rev_length);
		if (tt>0)
		{
			pMBPollView->m_isgetmodel=TRUE;
		}
		else
		{
			pMBPollView->m_isgetmodel=FALSE;
		}
	/*}*/

	if (ret>0)//读的正确之后,我们才把值传给view显示
	{
		memcpy_s(pMBPollView->m_DataBuffer,sizeof(pMBPollView->m_DataBuffer),DataBuffer,sizeof(DataBuffer));
		++pMBPollView->m_Tx;
	} 
	else
	{
		++pMBPollView->m_Tx;
		++pMBPollView->m_Err;
	}
	

	if (pMBPollView->m_hWnd!=NULL)
	{
		::PostMessage(pMBPollView->m_hWnd,MY_FRESH_MBPOLLVIEW,0,0);
	}
	Sleep(sleep);
	}

	pMBPollView=NULL;
return 1;
}