JavaCro'14 - Java in M2M technologies – Mango M2M software – Ivan Raguž
-
Upload
hujak-hrvatska-udruga-java-korisnika-croatian-java-user-association -
Category
Technology
-
view
1.075 -
download
6
description
Transcript of JavaCro'14 - Java in M2M technologies – Mango M2M software – Ivan Raguž
Sadržaj :
• Uvod
• Mango M2M
• Mango sučelje
• Arhitektura Mango M2M sustava• Arhitektura Mango M2M sustava
Uvod
M2M koncept
- Machine to machine (M2M) odnosi se na tehnologije koje omogućavaju uređajima komunikaciju preko protokola sa drugim uređajima iste sposobnosti.
- M2M koristi mjerne uređaje za hvatanje događaja koji se odvija preko mreže i prevodi ih u smislene informacije
- Podaci sa uređaja mogu se prikupljati i uređajima je moguće upravljati bez ljudskih utjecaja
Mango M2M
-Mango je softver otvorenog standarda za Machine-to-Machine (M2T) tehnologiju (software za industrijsku kontroli, SCADA, HMI ili domotics software)
- Omogućava korisniku istovremeni pristup i kontrolu elektroničkim senzorima, uređajima i strojevima preko raznih protokola.senzorima, uređajima i strojevima preko raznih protokola.
- Osigurava korisnička sučelja za konfiguriranje različitih "data sources" koji omogućavaju upravljanje "downstream" procesima, korisničkim pristupom, porukama upozorenja, zapisivanjem podataka i automatizaciju.
Mango M2M
Značajke Mango M2M-a
- Brzina
- Višestruki protokoli
- Višestruke baze podataka - Višestruke baze podataka
- Meta point
Mango M2M
Značajke Mango M2M-a
- Korisničko definirani događaji
- Inport/Export
- Hvatanje događaja - Hvatanje događaja
- Sigurnost
- Izvještaji
Mango M2M
Značajke Mango M2M-a
- Dinamički dijagrami postavljenih točaka
- Liste pregleda
- Hijerarhija točaka podataka- Hijerarhija točaka podataka
- Grafički prikazi
- Detalji podatkovnih točaka
Mango M2M
Značajke Mango M2M-a
- Lista aktivnih alarma
- Vremesko definiranje događaja
- Udaljeni grafički pregledi- Udaljeni grafički pregledi
- Zvuk alarmnih događaja
Mango sučelje
Izvještaji- Definiranja podatkovne točke koju želimo pratiti preko izvještaja- Postavljanje vremenskog okidača- Postavljanje mail notifikacije (adrese primatelja ili grupe primatelja)
Mango sučelje
Skupovi podataka – “Data source”
- Skupovi podataka su mjesta odakle podaci stižu u aplikaciju na obradu
- Skupovi podataka mogu biti svi skupovi koji su podržani protokolima unutar mango m2m aplikacije
- Skupovi podataka mogu se dodavati prilagodbom koda aplikacije i umetanjem protokola
Mango sučelje
Podatkovne točke – “Data points”
- Skup atributa koji se povijesno može pratiti ili detektori događaja koje mjere stanja interesa pojedinih vrijednosti točaka.
Mango sučelje
Podatkovne točke – “Data points”
- Hijerarhijska struktura podatkovnih točaka i pregledi
Arhitektura Mango M2M sustava
Java, web bazirana aplikacija
Otvoreni standard
Spring MVC Framework
Direct Web Remoting (DWR)
Dojo Framework
Apache Tomcat
Apache Ant
Arhitektura Mango M2M sustava
- Definiranjem skupova podatka zavisno o protokolu koji nam je potreban
- Referentni kod- com.serotonin.mango.rt.dataSource.DataSourceRT- com.serotonin.mango.vo.dataSource.DataSourceVO- com.serotonin.mango.vo.dataSource.DataSourceVO
- Izvršavaju zadatke prikupljanja i slanje informacija iz vanjskih sustava u sistem i obrnuto
Arhitektura Mango M2M sustava
DataSourceRT.java
abstract public class DataSourceRT implements
ILifecycle {
public static final String ATTR_UNRELIABLE_KEY =
"UNRELIABLE";"UNRELIABLE";
private final DataSourceVO<?> vo;
Arhitektura Mango M2M sustava
Tipovi objekta u DataSourceVO
BACNET(10, "dsEdit.bacnetIp", true) {
@Override
public DataSourceVO<?> createDataSourceVO() {
return new BACnetIPDataSourceVO();
}}
},
HTTP_RECEIVER(7, "dsEdit.httpReceiver", true) {
@Override
public DataSourceVO<?> createDataSourceVO() {
return new HttpReceiverDataSourceVO();
}
},
Arhitektura Mango M2M sustava
Tipovi objekta u DataSourceVO
SNMP(5, "dsEdit.snmp", true) {
@Override
public DataSourceVO<?> createDataSourceVO() {
return new SnmpDataSourceVO();
}}
},
EBI25(16, "dsEdit.ebi25", false) {
@Override
public DataSourceVO<?> createDataSourceVO() {
return new EBI25DataSourceVO();
}
},
Arhitektura Mango M2M sustava
Tipovi objekta u DataSourceVO
MODBUS_IP(3, "dsEdit.modbusIp", true) {
@Override
public DataSourceVO<?> createDataSourceVO() {
return new ModbusIpDataSourceVO();
}}
},
POP3(12, "dsEdit.pop3", true) {
@Override
public DataSourceVO<?> createDataSourceVO() {
return new Pop3DataSourceVO();
}
},
Arhitektura Mango M2M sustava
Spring MVC DispatcherServlet parmetri mapiranja
<bean id="publicUrlMappings"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<!-- All user URLs -->
<prop key="/compound_events.shtm">compoundEventsController</prop><prop key="/compound_events.shtm">compoundEventsController</prop>
<prop
key="/data_point_details.shtm">dataPointDetailsController</prop>
<prop key="/data_point_edit.shtm">dataPointEditController</prop>
<prop key="/data_source_edit.shtm">dataSourceEditController</prop>
<prop key="/data_sources.shtm">dataSourceListController</prop>
Arhitektura Mango M2M sustava
dataSourceEditController
public class DataSourceEditController extends ParameterizableViewController {
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
throws Exception {
DataSourceVO<?> dataSourceVO = null;
User user = Common.getUser(request);
// Get the id.
int id = Common.NEW_ID;int id = Common.NEW_ID;
String idStr = request.getParameter("dsid");
if (idStr == null) {
// Check for a data point id
String pidStr = request.getParameter("pid");
if (pidStr == null) {
// Adding a new data source? Get the type id.
int typeId = Integer.parseInt(request.getParameter("typeId"));
Permissions.ensureAdmin(user);
// A new data source
dataSourceVO = DataSourceVO.createDataSourceVO(typeId);
dataSourceVO.setId(Common.NEW_ID);
dataSourceVO.setXid(new DataSourceDao().generateUniqueXid());
Arhitektura Mango M2M sustava
Kreiranje skupova podataka
<td align="right" id="dataSourceTypesContent"><select id="dataSourceTypes">
<option value="10">BACnet I/P</option><option value="21">DNP3 IP</option><option value="14">Galil DMC-21x2</option><option value="7">HTTP Receiver</option><option value="11">HTTP Retriever</option><option value="15">HTTP Image</option><option value="27">Internal Data Source</option><option value="26">JMX</option><option value="26">JMX</option><option value="9">Meta Data Source</option><option value="3">Modbus IP</option><option value="2">Modbus Serial</option><option value="13">NMEA listener</option><option value="8">1-wire</option><option value="23">Pachube</option><option value="24">Serotonin Persistent TCP</option><option value="12">POP3 Email</option><option value="5">SNMP</option><option value="4">Spinwave Receiver</option><option value="6">SQL</option><option value="1">Virtual Data Source</option><option value="17">VMStat Data Source</option>
</select><img title="Add" class="ptr" onclick="addDataSource()" alt="Add" src="images/icon_ds_add.png" border="0">
</td>
Arhitektura Mango M2M sustava
Konektori i protokoli
BACnet I/P
public class BACnetIPDataSourceRT extends
PollingDataSource implements DeviceEventListener,
ExceptionListener {ExceptionListener {
public class BACnetIPDataSourceVO extends
DataSourceVO<BACnetIPDataSourceVO> {
public static final Type TYPE = Type.BACNET;
Arhitektura Mango M2M sustava
Konektori i protokoli
BACnet I/P
import com.serotonin.bacnet4j.LocalDevice;
import com.serotonin.bacnet4j.Network;import com.serotonin.bacnet4j.Network;
import com.serotonin.bacnet4j.RemoteDevice;
import com.serotonin.bacnet4j.RemoteObject;
import
com.serotonin.bacnet4j.event.DeviceEventListener;
import
com.serotonin.bacnet4j.event.ExceptionListener;
Arhitektura Mango M2M sustava
Konektori i protokoli
ModBus IP
abstract public class ModbusDataSource extends
PollingDataSource implementsPollingDataSource implements
MessagingExceptionHandler {
abstract public class ModbusDataSourceVO<T extends
ModbusDataSourceVO<?>> extends DataSourceVO<T> {
Arhitektura Mango M2M sustava
Konektori i protokoli
ModBus IP
import com.serotonin.modbus4j.BatchRead;
import com.serotonin.modbus4j.BatchResults;import com.serotonin.modbus4j.BatchResults;
import com.serotonin.modbus4j.ExceptionResult;
import com.serotonin.modbus4j.ModbusMaster;
Arhitektura Mango M2M sustava
Konektori i protokoli
SNMP
public class SnmpDataSourceRT extends
PollingDataSource {PollingDataSource {
public class SnmpDataSourceVO extends
DataSourceVO<SnmpDataSourceVO> {
Arhitektura Mango M2M sustava
Konektori i protokoli
SNMP
import org.snmp4j.PDU;
import org.snmp4j.Snmp;import org.snmp4j.Snmp;
import org.snmp4j.Target;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.Variable;
import org.snmp4j.smi.VariableBinding;
Arhitektura Mango M2M sustava
Definirati podatkovne točke “data point”
Referentni kod
- com.serotonin.mango.rt.dataImage.DataPointRT- com.serotonin.mango.vo.DataPointVO,- com.serotonin.mango.vo.DataPointVO,
Arhitektura Mango M2M sustava
DataPointRT
public class DataPointRT implements IDataPoint,
ILifecycle, TimeoutClient {
private static final Log LOG =
LogFactory.getLog(DataPointRT.class);LogFactory.getLog(DataPointRT.class);
private static final PvtTimeComparator
pvtTimeComparator = new PvtTimeComparator();
Arhitektura Mango M2M sustava
DataPointRT
Konfiguracijski podaci
private final DataPointVO vo;
private final PointLocatorRT pointLocatorprivate final PointLocatorRT pointLocator
Arhitektura Mango M2M sustava
DataPointRT
Runtime podaci
private volatile PointValueTime pointValue;
private final PointValueCache valueCache;private final PointValueCache valueCache;
private RuntimeManager rm;
private List<PointEventDetectorRT> detectors;
private final Map<String, Object> attributes = new
HashMap<String, Object>();
Arhitektura Mango M2M sustava
DataPointRT
Podaci zapisa intervala
private PointValueTime intervalValue;
private long intervalStartTime = -1;private long intervalStartTime = -1;
private List<IValueTime> averagingValues;
private final Object intervalLoggingLock = new
Object();
private TimerTask intervalLoggingTask;