`

多位置控制系统 以及 在线诊断系统 之设计

阅读更多

利用 Groovy 生成输入数据:

def f = new File("input.txt")

int pos = 0
int floor = 0
int open = 0
int direction = 1

for(i=0; i<=80; i++){
    pos = i
    if(i>=0  && i<= 19) floor = 1
    if(i>=20 && i<=39)  floor = 2
    if(i>=40 && i<=59) floor = 3
    if(i>=60 && i<=79) floor = 4
    if(i == 80) floor = 5
    if(i==0 || i==20 || i==40 || i==60 ||i==80) open = 1
    else open = 0
    f.append(String.format("%d,%d,%d,%d",pos,floor,open,direction) + "\n")
}

 

 

主程序:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.TimerTask;

public class PLC {
	public PLC(String filename) {
		this.filename = filename;
	}

	private int lineno = 0;
	private String filename = null;

	public int getLineno() {
		return lineno;
	}

	public void setLineno(int lineno) {
		this.lineno = lineno;
	}

	public String getFilename() {
		return filename;
	}

	public void setFilename(String filename) {
		this.filename = filename;
	}

	/**
	 * 以行为单位读取文件,常用于读面向行的格式化文件
	 */
	public String readLine(int lineno) {
		File file = new File(filename);
		BufferedReader reader = null;
		String result = "";
		try {
			reader = new BufferedReader(new FileReader(file));
			String tempString = null;
			int line = 1;
			// 一次读入一行,直到读入null为文件结束
			while ((tempString = reader.readLine()) != null) {
				if (line == lineno) {
					result = tempString;
					break;
				}
				line++;
			}
			reader.close();

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (reader != null) {
				try {
					reader.close();
				} catch (IOException e1) {
				}
			}
		}
		return result;
	}

	boolean validate(String line) {
		boolean result = true;
		String[] tokens = line.split(",");
		int pos = Integer.valueOf(tokens[0]);
		int floor = Integer.valueOf(tokens[1]);
		int open = Integer.valueOf(tokens[2]);
		int direction = Integer.valueOf(tokens[3]);

		if (pos < 0 || pos > 80)
			result = false;
		if (pos >= 0 && pos <= 19 && floor != 1)
			result = false;
		if (pos >= 20 && pos <= 39 && floor != 2)
			result = false;
		if (pos >= 40 && pos <= 59 && floor != 3)
			result = false;
		if (pos >= 60 && pos <= 79 && floor != 4)
			result = false;
		if (pos == 80 && floor != 5)
			result = false;
		if ((pos == 0 || pos == 20 || pos == 40 || pos == 60 || pos == 80)
				&& open != 1)
			result = false;
		if (pos != 0 && pos != 20 && pos != 40 && pos != 60 && pos != 80
				&& open != 0)
			result = false;
		if (direction != 1)
			result = false;
		return result;
	}

	public static void main(String[] args) {
		PLC plc = new PLC("input.txt");
		java.util.Timer timer = new java.util.Timer(false);

		TimerTask task = new TimerTask() {
			public void run() {
				plc.setLineno(plc.getLineno() + 1);
				int lineno = plc.getLineno();
				String line = plc.readLine(lineno);
				if (null == line || "".equals(line)) {
					System.exit(0);
				}
				boolean normal = plc.validate(line);
				System.out.println(line + ": " + normal);
				if (!normal) {
					System.exit(1);
				}
			}
		};
		timer.scheduleAtFixedRate(task, 0, 1000);
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics