本节是从机程序,首先看状态图
然后是流程图。
最后是程序,和主机程序差不多,都有读取和发送,但是从机多了一步,就是执行主机的命令,去读或者写寄存器。另外,对于本机的一些异常要返回错误码个主机。
//Modbus功能码03处理程序///已验证程序OK
//读保持寄存器
void Modbus_03_Solve(void)
{
u8 i;
RegNum= (((u16)RS485_RX_BUFF[4])<<8)|RS485_RX_BUFF[5];//获取寄存器数量
if((startRegAddr+RegNum)<1000)//寄存器地址+数量在范围内
{
RS485_TX_BUFF[0]=RS485_RX_BUFF[0];
RS485_TX_BUFF[1]=RS485_RX_BUFF[1];
RS485_TX_BUFF[2]=RegNum*2;
for(i=0;i<RegNum;i++)
{
RS485_TX_BUFF[3+i*2]=(*Modbus_HoldReg[startRegAddr+i]>&g