Json与Java Bean互相转换时,Bean中的Timestamp字段是无法直接处理的,需要实现两个转换器。
DateJsonValueProcessor的作用是Bean转换为Json时将Timepstamp转换为指定的时间格式。
2 import java.text.SimpleDateFormat;
3 import java.util.Date;
4 import net.sf.json.JsonConfig;
5 import net.sf.json.processors.JsonValueProcessor;
6 /*** 将Bean中的Timestamp转换为json中的日期字符串*/
7 public class DateJsonValueProcessor implements JsonValueProcessor {
8 public static final String Default_DATE_PATTERN ="yyyy-MM-dd";
9 private DateFormat dateFormat ;
10 public DateJsonValueProcessor(String datePattern){
11 try{
12 dateFormat = new SimpleDateFormat(datePattern);}
13 catch(Exception e ){
14 dateFormat = new SimpleDateFormat(Default_DATE_PATTERN);
15 }
16 }
17 public Object processArrayValue(Object value, JsonConfig jsonConfig) {
18 return process(value);
19 }
20 public Object processObjectValue(String key, Object value,JsonConfig jsonConfig) {
21 return process(value);
22 }
23 private Object process(Object value){
24 return dateFormat.format((Date)value);
25 }
26 }
TimestampMorpher的作用则与DateJsonValueProcessor相反,它是在Jsonl转换为Bean时,会把指定的时间格式转换为Timestamp
2 import java.text.ParseException;
3 import java.text.SimpleDateFormat;
4 import net.sf.ezmorph.MorphException;
5 import net.sf.ezmorph.object.AbstractObjectMorpher;
6 /*** 将json串中的日期字符串转换为bean中的Timestamp*/
7 public class TimestampMorpher extends AbstractObjectMorpher {
8 /*** 日期字符串格式*/
9 private String[] formats;
10 public TimestampMorpher(String[] formats) {
11 this.formats = formats;
12 }
13 public Object morph(Object value) {
14 if( value == null){
15 return null;
16 }
17 if( Timestamp.class.isAssignableFrom(value.getClass()) ){
18 return (Timestamp) value;
19 }
20 if( !supports( value.getClass()) ){
21 throw new MorphException( value.getClass() + " 是不支持的类型");
22 }
23 String strValue=(String) value;
24 SimpleDateFormat dateParser=null;
25 for( int i = 0; i < formats.length ; i++ ){
26 if( null == dateParser ){
27 dateParser=new SimpleDateFormat(formats);
28 }else{
29 dateParser.applyPattern(formats);
30 }
31 try{
32 return new Timestamp( dateParser.parse( strValue.toLowerCase()).getTime() );}
33 catch (ParseException e) {
34 //e.printStackTrace();
35 }
36 }
37 return<
RTU是REMOTE TERMINAL UNIT 的简称,即远方数据终端,用于监视、控制与数据采集的应用。具有遥测、遥信、遥调、遥控功能。RTU功能必须确保两种功能:1,有数据传输功能。2,有采集和控制功能。
经过多年的PLC+DTU在工业自动化应用中已经普遍采用这种方式在进行数据的在线监测和远程控制。当RTU面世后,RTU集成的A/D和I/O采集功能已经可以达到取代部分PLC功能了。
1,在一些相对简单的温度、压力、湿度、水位、烟雾等传感器的数据采集监测,完全已经可以通过RTU取代前端早期的PLC+DTU方式,既可以节约项目施工成本,又简化了前端设备连接和接口兼容性问题的复杂性。
2,在一些前端设备状态监测和开关控制也通过RTU的I/O实现报警和控制,例如:可以根据前端设备驱动电平来控制设备开关状态,或是检测前端干接点电压值变化判断前端设备工作情况。
3,支持标准Modbus 协议的3种类型:Modbus RTU、Modbus ACSSI、Modbus TCP/IP协议,可无缝接入目前工业自动化大部分前端设备厂家和后端主流组态软件。
4,WCTU 30XX 是厦门为那通信自主研发GPRS RTU系列,可支持网络口和串口同时采用两种不同Modbus协议类型进行数据采集和监控。互不冲突,扩展性能优越。
Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。
ModBus网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。
Modbus具有以下几个特点:
(1)标准、开放,用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。目前,支持Modbus的厂家超过400家,支持Modbus的产品超过600种。
(2)Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。
(3)Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。
转载:http://www.winertech.com/dgdt_info.asp?id=206
本文链接:RTU的优势与Modbus协议介绍,转载请注明。
没有评论:
发表评论