MN26 Development of Technology Enhanced Contents for ME4262 Automation in Manufacturing
Tan Guo Xiang
A0086024L
1. Introduction
2. Literature Review
3. Analysis and Review of Tool Used
4. Implementation Details
5. Conclusion
6. Recommendation of Future Work
Introduction
Literature Review
Analysis and Review of Tools
Implementation Details
Conclusion
Recommendation for Future Study
Mobile Phone Penetration rate from 2003 – 2014 from Infocomm Development Authority of Singapore
Polls provide lecturers with a shorter feedback loop during teaching.
However, commercial solutions require each student to be issued with a keypad over the course of the semester.
Videos demonstrating the concept clearly are hard to find online and tend to be meant as commercial advertisement.
Image Source: ME4262 Lecture 2 Notes
Introduction
Literature Review
Analysis and Review of Tools
Implementation Details
Conclusion
Recommendation for Future Study
Image Source: https://www.khanacademy.org/
Image Source: https://www.khanacademy.org/
Image Source: https://w3.org/
Image Source: http://upload.wikimedia.org/wikipedia/commons/6/6a/JavaScript-logo.png
Image Source: http://blog.froont.com/9-basic-principles-of-responsive-web-design/
Image Source: http://blog.froont.com/9-basic-principles-of-responsive-web-design/
Introduction
Literature Review
Analysis and Review of Tools
Implementation Details
Conclusion
Recommendation for Future Study
Image Source: http://foundation.zurb.com/
Image Source: http://foundation.zurb.com/
Image Source: http://rubyonrails.org
Introduction
Literature Review
Analysis and Review of Tools
Implementation Details
Conclusion
Recommendation for Future Study
1. Including necessary libraries
2. Implementing the layout
3. Implementation of solutions based on the requirements of the question
4. Making graphs dynamic by responding to user input
<script src='../../d3.min.js'></script>
<script src='../../nv.d3/nv.d3.min.js'></script>
<script src='../../jquery-2.1.1.min.js'></script>
<script src='../../foundation-5.3.0/js/foundation.min.js'></script>
<script src='../../foundation-5.3.0/js/vendor/modernizr.js'></script>
<script src='../../jquery-ui-1.11.1/jquery-ui.min.js'></script>
<script src='../../jquery.ui.touch-punch.min.js'></script>
<meta content='width=device-width, initial-scale=1.0' name='viewport'>
<script> Tag
<meta> Tag
<script>
jQuery(function($) {
function calculateVariableCostofLabour(labourCost, labourOverhead, productionRate) {
return (labourCost * (100 + labourOverhead) / 100 / productionRate);
}
function calculateUniformAnnualCost(machineCost, maintenanceCost, salvageValue, rateOfReturn, serviceLife) {
var capitalReturnFactor = calculateCapitalReturnFactor(rateOfReturn, serviceLife).toFixed(5);
var sinkingFundFactor = calculatorSinkingFundFactor(rateOfReturn, serviceLife).toFixed(5);
return ((machineCost * capitalReturnFactor) + maintenanceCost - (salvageValue * sinkingFundFactor));
}
function calculateUniformAnnualCostWithMachineOverhead(uniformAnnualCost, machineOverheadRate) {
machineOverheadRate = machineOverheadRate / 100;
return (uniformAnnualCost * (1 + machineOverheadRate));
}
function calculateCapitalReturnFactor(rateOfReturn, serviceLife) {
rateOfReturn = rateOfReturn * 0.01;
return ((rateOfReturn * Math.pow((rateOfReturn + 1), serviceLife)) / (Math.pow((rateOfReturn + 1), serviceLife) - 1));
}
function calculateLabourCostPerUnit(labourRate, productionRate) {
return (labourRate / productionRate);
}
function calculateVariableCost(labourCost, materialCost) {
return (labourCost + materialCost);
}
function calculateVariableCostOvertime(labourCost, materialCost, labourOvertimeRate) {
return ((labourCost * (1 + (labourOvertimeRate / 100))) + materialCost);
}
function calculateElecricityRate(electricityConsumption, powerConsumption, productionRate) {
return (electricityConsumption * powerConsumption / productionRate);
}
function calculateOvertimeCost(cost, variableCostWithOverhead, variableCostOvertimeWithOverhead, productionRate, projectedSales, maximumProductionCapcity) {
var currentSales = productionRate * 8 * 5 * 50;
var salesDifference = projectedSales - currentSales;
projectedSales = (projectedSales >= maximumProductionCapcity) ? maximumProductionCapcity : projectedSales;
if (!drawOvertime || salesDifference < 0) {
var variableCost = variableCostWithOverhead * projectedSales
} else {
var variableCost = (variableCostWithOverhead * currentSales) + (variableCostOvertimeWithOverhead * salesDifference);
}
return variableCost + cost;
}
function calculateRentPerAnnum(monthlyRent, factorySpace) {
return (monthlyRent * 12 * factorySpace);
}
function calculatorSinkingFundFactor(rateOfReturn, serviceLife) {
rateOfReturn = rateOfReturn * 0.01;
return (rateOfReturn/(Math.pow((1 + rateOfReturn), serviceLife) - 1));
}
function calculateRevenue(revenue, numberOfUnits) {
return (revenue * numberOfUnits);
}
function calculateCost(cost, variableCost, number_of_units) {
return Number((cost + (variableCost * number_of_units)).toFixed(2));
}
function roundUp(x){
var y = Math.pow(10, parseInt(x).toString().length - 1);
x = (x / y);
x = Math.ceil(x);
x = x * y;
return x;
}
var lowerBound = 0;
var upperBound = 0;
var upperBoundMax = 0;
var slider;
var $slider = $('#range-slider');
var drawOvertime = false;
var ProfitBreakEvenGraph = {
_init: function() {
var widget = this;
nv.addGraph(function() {
var chart = nv.models.lineChart()
.margin({left: 80, right: 40}) //Adjust chart margins to give the x-axis some breathing room.
.useInteractiveGuideline(false)
.showLegend(true) //Show the legend, allowing users to turn on/off line series.
.showYAxis(true) //Show the y-axis
.showXAxis(true) //Show the x-axis
;
chart.xAxis //Chart x-axis settings
.axisLabel("Annual Output (units)")
chart.yAxis //Chart y-axis settings
.axisLabel('Cost / Revenue ($)')
/* Done setting the chart up? Time to render it!*/
var myData = widget._generateLineData(false);
d3.select('#chart svg') //Select the <svg> element you want to render the chart in.
.datum(myData) //Populate the <svg> element with chart data...
.call(chart); //Finally, render the chart!
//Update the chart when window resizes.
nv.utils.windowResize(function() { chart.update() });
d3.select('.draw-overtime').on('click', function() {
drawOvertime = !drawOvertime;
if (drawOvertime) {
d3.select(this).text('Remove Overtime');
d3.select(this).attr('class', 'alert button radius tiny draw-overtime');
d3.select('.a-profit-header').text('Method A Profit Based on Projected Sales With Overtime');
d3.select('.b-profit-header').text('Method B Profit Based on Projected Sales With Overtime');
} else {
d3.select(this).text('Draw Overtime');
d3.select(this).attr('class', 'success button radius tiny draw-overtime');
d3.select('.a-profit-header').text('Method A Profit Based on Projected Sales');
d3.select('.b-profit-header').text('Method B Profit Based on Projected Sales');
}
widget._updateChart(chart, false)
});
d3.selectAll('input').each(function() {
d3.select(this).on('input', function() {
widget._updateChart(chart, false);
$rangeInputValue.text(lowerBound + '-' + upperBound);
})
});
$rangeInputValue = $('#range-input-value');
slider = $slider.slider({
range: true,
min: lowerBound,
max: upperBoundMax,
values: [lowerBound, upperBound],
slide: function(event, ui) {
lowerBound = ui.values[0];
upperBound = ui.values[1];
widget._updateChart(chart, true);
$rangeInputValue.text(lowerBound + '-' + upperBound);
}
});
$rangeInputValue.text(lowerBound + '-' + upperBound);
return chart;
});
},
_updateChart: function(chart, isSlider) {
var myData = this._generateLineData(isSlider);
d3.select('#chart svg')
.datum(myData)
.call(chart)
},
d3.selectAll('input').each(function() {
d3.select(this).on('input', function() {
widget._updateChart(chart, false);
$rangeInputValue.text(lowerBound + '-' + upperBound);
})
});
Introduction
Literature Review
Analysis and Review of Tools
Implementation Details
Conclusion
Recommendation for Future Study
Introduction
Literature Review
Analysis and Review of Tools
Implementation Details
Conclusion
Recommendation for Future Study