轮询的方法


package cn.rand;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;

/**
* Feb 9, 2009
* version 1.1 *
*/

public class Test {
public static HashMap<String, String> map=new HashMap<String, String>();
/**
* 数据源
* @return
*/
public ArrayList<String> getDataList(){
ArrayList<String> al=new ArrayList<String>();
al.add("测试");
al.add("数据源");
al.add("随机数");
al.add("获取");
al.add("网页");
al.add("娱乐");
al.add("主题");
al.add("歌曲");
return al;
}

/**
* 获取不大于count的随机数
* @param count
* @return
*/
public int getStart(int count){
int result=0;
//进行取模(%)操作是为了防止随机数大于total
result=(int)(Math.round(Math.random()*count))%count;
return result;
}

/**
* 轮转,按顺序随机获取count个值
* @param count 要取个数,个数不足从头取
* @return
*/
public ArrayList<String> getScroll(int count){
ArrayList<String> result=new ArrayList<String>();
ArrayList<String> data=this.getDataList();
int total=data.size();
int begin=this.getStart(total);
System.out.println("begin:"+begin+":total:"+total);
int curCount=0;
for(int i=begin;i<total&&curCount<count;i++,curCount++){
result.add(data.get(i).toString());
}
//数量不足时从头开始取
for(int i=0;i<total&&curCount<count;i++,curCount++){
result.add(data.get(i).toString());
}

return result;
}

/**
* 轮转,随机获取某个数,使其每total次必显示一次 平均出现
* @return
*/
public ArrayList<String> getScroll2(){
ArrayList<String> result=new ArrayList<String>();
ArrayList<String> data=this.getDataList();
int total=data.size();
int begin=this.getStart(total);
int curCount=0;
String key="";
if(map.size()==total){
map.clear();
}
//只显示一个数据
for(int i=begin;i<total&&curCount<1;i++){
key=data.get(i).toString();
if(!map.containsKey(key)){
curCount++;
result.add(key);
map.put(key, key);
}
}
//没有数据时从头开始取
for(int i=0;i<total&&curCount<1;i++){
key=data.get(i).toString();
if(!map.containsKey(key)){
curCount++;
result.add(key);
map.put(key, key);
}
}
return result;
}


public static int begin3=0;
/**
* 轮询3,按顺序进行轮询
* @return
*/
public ArrayList getScroll3(int count){
ArrayList<String> result=new ArrayList<String>();
ArrayList<String> data=this.getDataList();

int total=data.size();
int curCount=0;
for(int i=begin3;i<total&&curCount<count;i++,curCount++){
result.add(data.get(i).toString());
}
//数量不足时从头开始取
for(int i=0;i<total&&curCount<count;i++,curCount++){
result.add(data.get(i).toString());
}
//设置下一次begin开始的位置
begin3+=count;
if(begin3>=total){
begin3=begin3-total;
}
return result;
}



/**
* 得到两个数之间的随机数(产生的结果不包括max)
* @param min
* @param max
* @return
*/
public static float getRandom(int min,int max){
float result = 0;
// Random random = new Random();
// result = (max-min)* random.nextFloat() + min;
//进行取模(%)操作是为了防止随机数大于max
result=(float)(Math.random()*max%max);
if(result<min) result+=min;
return result;
}



/**
* @param args
*/
public static void main(String[] args) {
Test test=new Test();
// ArrayList list=test.getScroll(1);
// for(int i=0;i<list.size();i++){
// System.out.println(list.get(i).toString());
// }
// for(int i=0;i<8;i++){
// ArrayList<String> list1=test.getScroll2();
// for(int j=0;j<list1.size();j++){
// System.out.println(i+":"+list1.get(j).toString());
// }
// }

for(int i=0;i<2;i++){
ArrayList<String> list1=test.getScroll3(3);
for(int j=0;j<list1.size();j++){
System.out.println(i+":"+list1.get(j).toString());
}
}


}

}

PLC通信多站号之间的轮询方法是一种在多个站号之间进行数据传输和交互的技术。通常情况下,PLC控制器与多个外部设备或站号进行通信,这些站号可以是传感器、执行器或其他PLC控制器。 一种常见的轮询方法是循环轮询(cyclic polling),它基于一个预定义的轮询顺序。首先,PLC控制器将发送一条请求指令给第一个站号,请求获取该站号的数据。然后,PLC等待一段时间,以确保该站号有足够的时间来响应。 一旦第一个站号响应并提供数据,PLC控制器将接收和处理这些数据,并随后发送下一个站号的请求指令。这个过程会一直循环,直到所有的站号都被轮询过一次。然后,PLC控制器会回到第一个站号,再次开始轮询。 循环轮询方法的优点是简单且容易实现,并且可以在相对短的时间内对所有站号进行轮询。然而,缺点是如果某个特定站号响应较慢或没有响应,会导致整个轮询过程的延迟。 为了解决这个问题,还可以使用时间分配轮询(time-slice polling)方法。在这种方法中,每个站号被分配一个固定的时间段,在该时间段内可以与PLC控制器进行通信。当时间段结束后,PLC会继续下一个站号的轮询时间分配轮询的优点是可以确保每个站号都有足够的时间来响应,从而避免了延迟问题。然而,缺点是需要精确计算和分配每个站号的时间段,以确保整个轮询过程的平衡和公平性。 总而言之,PLC通信多站号之间的轮询方法可以使用循环轮询时间分配轮询。选择哪种方法取决于具体应用的需求和对性能的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值