public JsonResult GetMachineByLine(string lineNo)
        {
            var lstMachineErr    = new List <string>();
            var lstMachineErrPlc = new List <string>();
            int ret;

            var dataMachine = uow.MenuMasters.GetMachineByLine(lineNo);

            if (dataMachine.Rows.Count <= 0)
            {
                return(Json(new { error = "Không tím thấy Line GetMachineByLine()", success = false }));
            }
            var resdataMachine = JsonConvertDatatable(dataMachine);
            var dataUsr        = uow.MenuMasters.GetUserInMachine(lineNo);

            if (dataUsr.Rows.Count <= 0)
            {
                return(Json(new
                {
                    success = true,
                    dataMachine = resdataMachine,
                    dataUsr = dataUsr.Rows.Count,
                    dataErr = "",
                    plc = ""
                }));
            }
            var resdataUsr = JsonConvertDatatable(dataUsr);

            var combindedStringPlcErr = string.Empty;
            var combindedString       = string.Empty;

            for (int i = 0; i < dataMachine.Rows.Count; i++)
            {
                if (Convert.ToInt16(dataMachine.Rows[i]["status"].ToString()) > 0)
                {
                    try
                    {
                        //read error signal here
                        var rcv = string.Empty;
                        ret = m_plc.ReadDeviceA(dataMachine.Rows[i]["ip"].ToString(), 25884, "W", "62", 1, ref rcv);
                        if (rcv == "000E")                                                 //14
                        {
                            lstMachineErr.Add(dataMachine.Rows[i]["press_no"].ToString()); //its mean, this line has machine error
                        }
                        if (ret < 0)
                        {
                            lstMachineErrPlc.Add(dataMachine.Rows[i]["press_no"].ToString());
                            if (lstMachineErrPlc.Count() > 0)
                            {
                                combindedStringPlcErr = JsonConvert.SerializeObject(lstMachineErrPlc);
                                return(Json(new { dataUsr = resdataUsr, dataMachine = resdataMachine, dataErr = combindedString, plc = combindedStringPlcErr, error = "", success = false }));
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine(ex);
                        return(Json(new { error = "Lỗi đọc PLC", plc = "", success = false }));
                    }
                }
            }


            if (lstMachineErr.Count() > 0) //response to client
            {
                combindedString = JsonConvert.SerializeObject(lstMachineErr);
                if (lstMachineErrPlc.Count() > 0)
                {
                    combindedStringPlcErr = JsonConvert.SerializeObject(lstMachineErrPlc);
                    return(Json(new { dataUsr = resdataUsr, dataMachine = resdataMachine, dataErr = combindedString, plc = combindedStringPlcErr, error = "", success = true }));
                }
                return(Json(new { dataUsr = resdataUsr, dataMachine = resdataMachine, dataErr = combindedString, plc = "", error = "", success = true }));
            }

            if (lstMachineErrPlc.Count() > 0)
            {
                combindedStringPlcErr = JsonConvert.SerializeObject(lstMachineErrPlc);
                return(Json(new { dataUsr = resdataUsr, dataMachine = resdataMachine, dataErr = "", plc = combindedStringPlcErr, error = "", success = true }));
            }
            //if no error machine response here
            return(Json(new { dataUsr = resdataUsr, dataMachine = resdataMachine, dataErr = "", plc = "", success = true, error = "" }));
        }