我写了一个代码,通过ModBUS RTU与9600波特率的主设备通信我下载了一个ModBUS从站仿真程序我可以用这种方式和电脑通信我可以用我的微控制器读取输入寄存器我下载了另一个程序ModBUS Poll来读取Krohne IFC050输入寄存器我得到了Krohne IFC050的寄存器值但是,我需要使用CC430F6137从Krohne IFC050流量计中获取输入寄存器值我试过用同样的代码来读取Krohne IFC050的输入寄存器,但我不能。我使用RS485接口进行通信我多次更换RS485的终端不过,没有任何回应我不能用微控制器从克罗恩那里读取任何信息。
Krohne Slave ID=1这段代码只是用来交流,并不专业在这里我试着获取设备信息这是我的代码:
modbusMsg[0] = 0x01; modbusMsg[1] = 0x2B; modbusMsg[2] = 0x0E; modbusMsg[3] = 0x02; modbusMsg[4] = 0x00;
crc =0xFFFF;
CRC16(modbusMsg[0], &crc);
CRC16(modbusMsg[1], &crc);
CRC16(modbusMsg[2], &crc);
CRC16(modbusMsg[3], &crc);
CRC16(modbusMsg[4], &crc);
modbusMsg[5] =crc;
modbusMsg[6] =crc >>8;
RS485_EN_WRITE;
RS485_EN_READ;
writeCircBuf(&bufOUT, modbusMsg[0]);
if(!(UCA0IE & UCTXIE))
UCA0IE |= UCTXIE;
writeCircBuf(&bufOUT, modbusMsg[1]);
if(!(UCA0IE & UCTXIE))
UCA0IE |= UCTXIE;
writeCircBuf(&bufOUT, modbusMsg[2]);
if(!(UCA0IE & UCTXIE))
UCA0IE |= UCTXIE;
writeCircBuf(&bufOUT, modbusMsg[3]);
if(!(UCA0IE & UCTXIE))
UCA0IE |= UCTXIE;
writeCircBuf(&bufOUT, modbusMsg[4]);
if(!(UCA0IE & UCTXIE))
UCA0IE |= UCTXIE;
writeCircBuf(&bufOUT, modbusMsg[5]);
if(!(UCA0IE & UCTXIE))
UCA0IE |= UCTXIE;
writeCircBuf(&bufOUT, modbusMsg[6]);
if(!(UCA0IE & UCTXIE))
UCA0IE |= UCTXIE;
最佳答案
我已经解决了这个问题太简单了如果有人遇到像我这样的问题,解决方案是检查你的RS485转换器启用引脚当我更改数据启用和读取启用状态时,问题得到解决。
谢谢你的评论,谢谢所有的观众。