此程序是在visual studio 2005的MFC程序中执行的,通过引入ModbusRTU.dll进行程序的编程,通过Dependency Walker工具查看ModbusRTU.dll中的静态函数如下:
在ModbusRTU.h文件中
MOD_API WORD RTUReadDiscreteInputs(BYTE nSlaveAddress, WORD nUnitAddress, WORD nUnitCount, BYTE* pReturnBuf);
在xxx.cpp文件中
WORD xxx::ReadModbusCoil(int iSlave,int iAdd,int iCount)
{BYTE pBuf[256];WORD retWord =RTUReadDiscreteInputs(iSlave, (WORD)0, iCount, pBuf);WORD wVal;if(retWord == MODBUS_SUCCESS){wVal = MAKEWORD(pBuf[0],pBuf[1]);return wVal;}return -1;
}
最后在页面上执行
void DlgPolePipeSet::OnBnClickedButton5()
{EDM* pEdm;WORD wR ;WORD wR03;CString str;CString str2;pEdm =EDM::GetEdmInstance();wR = pEdm->ReadModbusCoil(1,0,16);str.Format("0x%X",wR);GetDlgItem(IDC_EDIT45)->SetWindowText(str);wR03 = pEdm->ReadModbusCoil(6,0,16);//读一个空位wR03 = pEdm->ReadModbusCoil(5,0,16);str.Format("0x%X",wR03);GetDlgItem(IDC_EDIT46)->SetWindowText(str);
}
读取物理位置为01或者05的Modbus的数据,得出的值总是错误的。