diff --git a/vmmTblApp/Db/vmm.template b/vmmTblApp/Db/vmm.template
index 8c64b2d163055ba69025697b5df40dfb0336d3f8..de3a4529cc2256975be81fd719eaf20cd79772b6 100644
--- a/vmmTblApp/Db/vmm.template
+++ b/vmmTblApp/Db/vmm.template
@@ -52,4 +52,12 @@ record(ai, "$(P)$(R)$(HYB)$(VMM)$(C)AnalogMon-R"){
     field(PINI, "YES")
     field(SCAN, "I/O Intr")
     field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))HYB_$(HYB)_$(VMM)_ANALOGMON")
+}
+
+record(ai, "$(P)$(R)$(HYB)$(VMM)$(C)DACVal-R"){
+    field(DESC, "Read DAC value")
+    field(DTYP, "asynInt32")
+    field(PINI, "YES")
+    field(SCAN, "I/O Intr")
+    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))HYB_$(HYB)_$(VMM)_DACVAL")
 }
\ No newline at end of file
diff --git a/vmmTblApp/Db/vmm_tbl.template b/vmmTblApp/Db/vmm_tbl.template
index 036a5252b9b18dce1a88823ae2e91a9c14156dc3..2bd1b9f9d370c9bc58548d5413100f58ff972969 100644
--- a/vmmTblApp/Db/vmm_tbl.template
+++ b/vmmTblApp/Db/vmm_tbl.template
@@ -6,20 +6,6 @@ record(bo, "$(P)$(R)ReadADC-VMMs-S") {
     field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))READ_ADC_VMMS")
 }
 
-record(ai, "$(P)$(R)MonValue-VMM0-RB") {
-    field(DESC, "Monitor Value Read")
-    field(DTYP, "asynFloat64")
-    field(SCAN, "I/O Intr")
-    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))ADC_VALUE_VMM0")
-}
-
-record(ai, "$(P)$(R)MonValue-VMM1-RB") {
-    field(DESC, "Monitor Value Read")
-    field(DTYP, "asynFloat64")
-    field(SCAN, "I/O Intr")
-    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))ADC_VALUE_VMM1")
-}
-
 record(bo, "$(P)$(R)Acquire-S") {
     field(DESC, "Start/stop FEN acquisition")
     field(VAL,  "0")
diff --git a/vmmTblApp/src/vmm_tbl.cpp b/vmmTblApp/src/vmm_tbl.cpp
index 4b432399bb7db9b2bcaa0646b6db46ce06d35645..1805c9189cbe6b6bb9e4fe695e2696cd2433e831 100644
--- a/vmmTblApp/src/vmm_tbl.cpp
+++ b/vmmTblApp/src/vmm_tbl.cpp
@@ -79,6 +79,13 @@ asynStatus VMMTbl::readInt32(asynUser *pasynUser, epicsInt32 *value) {
     goto endOfReadInt32;
   }
 
+  param_index = VecUtils::getIndex(vmmDACVAL_, function, hyb_index, vmm_index);
+  if (param_index == 0) {
+    this->pVmmAPI->readADC(hyb_index, vmm_index, tmp_val);
+    *value = tmp_val;
+    goto endOfReadInt32;
+  }
+
   endOfReadInt32:
   if (param_index < 0) {
     asynPrint(pasynUserSelf, ASYN_TRACE_ERROR,
@@ -188,7 +195,7 @@ asynStatus VMMTbl::createEpicsParams() {
       createParamAndStoreInVector("HYB_" + std::to_string(hyb) + key, typ, vec);
     }
 
-    std::vector<int> SC, SL, ST, STH, SM, SD, SMX, DACIDX;
+    std::vector<int> SC, SL, ST, STH, SM, SD, SMX, DACIDX, DACVAL;
     
     for (int vmm=0; vmm < VMMS_PER_HYBRID; vmm++) {
 
@@ -225,6 +232,10 @@ asynStatus VMMTbl::createEpicsParams() {
       param_name << "HYB_" << hyb <<"_" << vmm << "_ANALOGMON";
       createParamAndStoreInVector(param_name.str(), asynParamInt32, &DACIDX);
 
+      param_name.str("");
+      param_name << "HYB_" << hyb <<"_" << vmm << "_DACVAL";
+      createParamAndStoreInVector(param_name.str(), asynParamInt32, &DACVAL);
+
     }
 
     this->vmmSC_.push_back(SC);
@@ -235,6 +246,7 @@ asynStatus VMMTbl::createEpicsParams() {
     this->vmmSD_.push_back(SD);
     this->vmmSMX_.push_back(SMX);
     this->vmmDACIDX_.push_back(DACIDX);
+    this->vmmDACVAL_.push_back(DACVAL);
 
   }
 
diff --git a/vmmTblApp/src/vmm_tbl.h b/vmmTblApp/src/vmm_tbl.h
index dbefed4f9961d4b9e1de34f51affcb4e966d598e..ece1351e3dddd10f51ffbfbad96c41307067d88a 100644
--- a/vmmTblApp/src/vmm_tbl.h
+++ b/vmmTblApp/src/vmm_tbl.h
@@ -50,6 +50,7 @@ protected:
   std::vector<std::vector<int>> vmmSD_;
   std::vector<std::vector<int>> vmmSMX_;
   std::vector<std::vector<int>> vmmDACIDX_;
+  std::vector<std::vector<int>> vmmDACVAL_;
 
 private:
   static constexpr const char *driverName = "VMMTbl";