/// <summary>处理Modbus消息</summary> /// <param name="entity"></param> /// <returns></returns> protected virtual ModbusEntity Process(ModbusEntity entity) { // 如果是广播消息,则设置主站ID,便于其他人知道我的主站ID if (entity.Host == 0) { entity.Host = Host; } try { switch (entity.Function) { case MBFunction.ReadCoils: case MBFunction.ReadInputs: entity = ReadCoils(entity); break; case MBFunction.ReadHoldingRegisters: case MBFunction.ReadInputRegisters: entity = ReadRegisters(entity); break; case MBFunction.WriteSingleCoil: entity = WriteSingleCoil(entity); break; case MBFunction.WriteSingleRegister: entity = WriteSingleRegister(entity); break; case MBFunction.WriteMultipleCoils: entity = WriteMultipleCoils(entity); break; case MBFunction.WriteMultipleRegisters: entity = WriteMultipleRegisters(entity); break; case MBFunction.Diagnostics: entity = Diagnostics(entity); break; case MBFunction.ReportIdentity: entity = ReportIdentity(entity); break; default: // 不支持的功能码 return(entity.SetError(Errors.FunctionCode)); } return(entity); } catch (Exception ex) { //WriteLine(ex.Message); #if MF Microsoft.SPOT.Debug.Print(ex.Message); #else Ding.Log.XTrace.WriteLine(ex.ToString()); #endif // 执行错误 return(entity.SetError(Errors.ProcessError)); } }