精华内容
下载资源
问答
  • 题目要求:请完善实验给定代码,使得工程可以完成学生信息的管理功能,主要功能包括:添加学生数据、打印学生名单、删除学生数据三个功能。 方法: (1)添加信息:每次空间不足时使用copyOf扩容或者每次都new一个...

    题目要求:请完善实验给定代码,使得工程可以完成学生信息的管理功能,主要功能包括:添加学生数据、打印学生名单、删除学生数据三个功能。
    方法:
    (1)添加信息:每次空间不足时使用copyOf扩容或者每次都new一个数组来代替
    (2)删除信息:删除第i个位置上的元素,此时,需要将从第i个位置之后的所有元素都要向前移动一个位置,并把最后一个位置赋空。

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class StudentManage2 {
    
        public static void main(String[] args) throws IOException {
            // TODO 自动生成的方法存根
            StuManage sm=new StuManage();
    
            Scanner sc = new Scanner(System.in);
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int n = 0;
    
            do{
                System.out.println("************************************************");
                System.out.println("请选择需要的功能:");
                System.out.println("1.添加学生数据");
                System.out.println("2.打印学生名单");
                System.out.println("3.删除学生信息");
                System.out.println("************************************************");
                n = sc.nextInt();
    
                //因为要输入中文名称,使用空格,所以scanner不合适,改用BufferedReader读取输入
                 switch(n){    
                    case 1 : {
                    System.out.print("名字:");
                    String name=br.readLine();
                    System.out.print("学号:");
                    String stuNum=br.readLine();
                    System.out.print("性别:");
                    String sex=br.readLine();
                    System.out.print("年龄:");
                    String age=br.readLine();
    
                    Stu stu=new Stu(name,stuNum,sex,age);
                    sm.addStu(stu);}break;
                    case 2 : sm.showStu();break;
                    case 3 : {
                        System.out.println("请输入需要删除的学生的学号:");
                    String stuNum=sc.next();
                    if(sm.delStu(stuNum))
                            System.out.println("操作成功");
                    else
                        System.out.println("操作失败");
                    }break;
                }
                    }
            while(true);
        }
    
    }   
       class Stu{  //学生类
    
        String name ; 
        String stuNum ;
        String sex  ;
        String age ;
        public String getName() {
              return name;
             }
    
        public String getStuNum() {
              return stuNum;
             }
    
    
             public String getSex() {
              return sex;
             }
    
                 public String getAge() {
                  return age;
                 }
    
             //构造函数
             public  Stu(String name,String stuNum,String sex,String age){
              this.name = name;
              this.stuNum = stuNum;
              this.sex = sex;
              this.age = age;
             }  
            /* public void print() {
                 System.out.println(stuNum + "    " + name+"  " + sex +"  "+ age);
                 }*/
    }
    
    class StuManage{  //学生管理类,对象数组的创建,添加,打印,删除
        private Stu[]a= new Stu[1];
        private int count;
    //使用Arrays.copyOf对数组扩容
            /*
            if (count >= a.length){ //空间不足时,扩容 
            int newLength = a.length+1;  //新数组的长度
              a=Arrays.copyOf(a, newLength);  //扩容
    
              } 
            a[count] = student;  //对新扩容数组赋值(对象)
              count++;               //每添加一个对象,count加1
              System.out.println("操作成功");
              */
              //单纯使用数组扩容
            if (count >= a.length){
                Stu []b= new Stu [a.length+1];
                for(int i=0;i<a.length;i++)
                    b[i]=a[i];
                a= b ;
            }
            a[count] = student;  //对新扩容数组赋值(对象)
              count++;               //每添加一个对象,count加1
              System.out.println("操作成功");
             }
    
        public void showStu(){  //打印学生信息
    
            System.out.println("学号            姓名       性别      年龄");
              for(int i=0;i<count;i++){
               Stu student=a[i];  //数组里存的都是对象的引用(地址)
                 // a[i].print();   
               System.out.println(student.getStuNum() + "    " + student.getName()+"  " +student.getSex() +"  "+ student.getAge());
              }  
        }
    
        public boolean delStu(String delstuNum){  //删除学生信息
    
              for(int i=0;i<a.length;i++){
               Stu student=a[i];
               if(student.stuNum.equals(delstuNum)){ //(对象比较来说)equals表示比较两个对象实例化后的值是否相等
                                                 //(对象比较来说)== 表示比较两个对象的内存地址(就是对象的引用变量存放的内存地址)
    
                    /*for(int j=i;j<a.length;j++)  //删除原理:删除第i个位置上的元素,此时,需要将从第i个位置之后的所有元素都要向前移动一个位置
                        a[j]=a[j+1];*/
    
    
                    for(int j=i+1;j<a.length;j++)
                        a[j-1]=a[j];
    
                    a[count-1]=null;   // 将最后一个元素赋值为空,null
                    count--;           // 删除一个元素,,count自减1
                   return true;
                  }
              }
            return false;
             }
        }   
    
    展开全文
  • MS SQ图书管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库建立和维护以及前端应用程序开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好库。而对于后者则要求应用程序功能...
  • 请完善实验给定代码,使得工程可以完成学生信息的管理功能,主要功能包括:添加学生数据、打印学生名单、删除学生数据三个功能。
    //请完善实验给定代码,使得工程可以完成学生信息的管理功能,主要功能包括:添加学生数据、打印学生名单、删除学生数据三个功能。
    
    import java.io.*;
    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class StudentManage1 {
    
    	public static void main(String[] args) throws IOException {  //throws IOException是使用BufferedReader必需加的声明
    		StuManage sm=new StuManage();
    		Scanner sc = new Scanner(System.in);
    		
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		int n = 0;
    		
    		do{
    			System.out.println("************************************************");
    			System.out.println("请选择需要的功能:");
    			System.out.println("1.添加学生数据");
    			System.out.println("2.打印学生名单");
    			System.out.println("3.删除学生信息");
    			System.out.println("************************************************");
    			n = sc.nextInt();
    			
    			//因为要输入中文名称,使用空格,所以scanner不合适,改用BufferedReader读取输入
    			 switch(n){    
    		    	case 1 : {
    		    	System.out.print("名字:");
    		        String name=br.readLine();
    		    	System.out.print("学号:");
    		        String stuNum=br.readLine();
    		        System.out.print("性别:");
    		        String sex=br.readLine();
    		        System.out.print("年龄:");
    		        String age=br.readLine();
    		        
    		        Stu stu=new Stu(name,stuNum,sex,age);
    		        sm.addStu(stu);}break;
    		    	case 2 : sm.showStu();break;
    		    	case 3 : {
    		    		System.out.println("请输入需要删除的学生的学号:");
    		        String stuNum=sc.next();
    		        if(sm.delStu(stuNum))
    		        		System.out.println("操作成功");
    		        else
    		        	System.out.println("操作失败");
    		        }break;
    			}
    				}
    		while(true);
    	}
    	
    }	
       class Stu{  //学生类
    	 
    	String name ; 
    	String stuNum ;
    	String sex  ;
    	String age ;
    	public String getName() {
    		  return name;
    		 }
    
    	public String getStuNum() {
    		  return stuNum;
    		 }
    
    		 
    		 public String getSex() {
    		  return sex;
    		 }
    
    			 public String getAge() {
    			  return age;
    			 }
    		 
    		 //构造函数
    		 public  Stu(String name,String stuNum,String sex,String age){
    		  this.name = name;
    		  this.stuNum = stuNum;
    		  this.sex = sex;
    		  this.age = age;
    		 }	
    }
       
    class StuManage{  //学生管理类
    	private ArrayList<Object> a= new ArrayList();
    	
    	public void addStu(Stu student){  //添加学生信息
    		  a.add(student);
    		  System.out.println("操作成功");
    		 }
    	
    	public void showStu(){  //打印学生信息
    		  
    		System.out.println("学号            姓名       性别      年龄");
    		  for(int i=0;i<a.size();i++){
    		   Stu student=(Stu) a.get(i);
    		    System.out.println(student.getStuNum() + "    " + student.getName()+"  " +student.getSex() +"  "+ student.getAge());
    		    
    		  }	 
    	}
    	
    	public boolean delStu(String stuNum){  //删除学生信息
    		  
    		  for(int i=0;i<a.size();i++){
    		   Stu student=(Stu)a.get(i);
    		   if(student.stuNum.equals(stuNum)){
    		       a.remove(i);
    		       return true;
    		      }
    		  }
    		return false;
    		 }
    	}	
    


    展开全文
  • 1、要求利用面向对象的方法以及C++编程思想来完成系统设计; 2、要求在设计过程中,建立清晰类层次; 3、在系统设计中要分析和定义...4) 运营管理主要包括每条线路客运量和营收情况统计;运营技术状况;
  • C++面向对象程序设计 课程设计报告 班级 信管 1551 学号 姓名 完成日期 2016 年 10 月 题目描述 设计一个文字界面银行卡管理系统功能主要包括创建新 卡卡号登录 每个卡片信息包括有卡号及用户名信息 输入卡号后...
  • 仓库管理系统是典型的信息管理系统(MIS),其开发主要包括后台数据库建立和维护以及前端应用程序开发两个方面。对于前者要求建立起数据一致性和完整性强.数据安全性好库。而对于后者则要求应用程序功能完备,易...
  • 最近刚看完小甲鱼python零基础...该学生信息管理系统主要包括:录入学生信息,查找学生信息,删除学生信息,修改学生信息,排序学生信息,统计学生人数,显示学生信息以及退出信息管理系统八个部分。 其中,各部分.

    最近刚学习完小甲鱼python零基础视频中类与对象部分,心血来潮,从早上构思到晚上写出来,做了一个简易的学生信息管理系统。

    本程序主要运用了类与对象,以及方法定义的知识,写的比较普通,望能够对初学者有一定的帮助。

    但由于没有深入剖析代码,只是为了完成一个结果,可能代码有些许繁琐,望大家在阅读的时候给予指正,同时提出一些修改建议。

     

    该学生信息管理系统主要包括:录入学生信息,查找学生信息,删除学生信息,修改学生信息,排序学生信息,统计学生人数,显示学生信息以及退出信息管理系统八个部分。

    其中,各部分的功能如下:

    • 录入学生信息:通过输入学生姓名,性别,年龄录入学生信息,另外学生还包括学号,年级班级的信息。学号的自动生成模拟学校分配学号,即按入学年份(由系统时间年份决定)以及次序生成,如:202103即2021年入学的第三个学生的学号。年级信息同样由系统时间年份确定年级(2021级即2021年入学的年级),而班级信息则随机分配,班级有1-3班,用调用random中的方法进行随机分配。同时存储学生信息。
    • 查找学生信息:分为按姓名查找和按学号查找。
    • 删除学生信息:输入姓名即删除该学生信息。
    • 修改学生信息:将学生的所有信息进行依此选择修改(姓名,性别,年龄,姓名,性别,年龄)。
    • 排序学生信息:按年级排序(实在不想录入各科成绩了,太多太烦了,理解一下 :<)。
    • 统计学生人数:返回学生人数
    • 显示学生信息:打印所有学生信息
    • 退出信息管理系统:退出程序(程序最后必须要执行)

     

    以下就是代码部分了.......

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    • 需要的模块()
    import time as t    #获取系统时间使用
    import random as r  #随机获取班级使用
    import sys          #退出程序时使用
    import os           #判断文件是否存在时使用
    import pickle as p  #保存获取文件使用
    • 界面设计部分,其实就是按规则打印的print()语句
    #界面设计
    
    def Interface():
        print("--------------------------功能菜单----------------------------")
        print("\n")
        print("                       1. 录入学生信息                         ")
        print("                       2. 查找学生信息                         ")
        print("                       3. 删除学生信息                         ")
        print("                       4. 修改学生信息                         ")
        print("                       5. 排序学生信息                         ")
        print("                       6. 统计学生人数                         ")
        print("                       7. 显示学生信息                         ")
        print("                       0. 退出信息管理系统                      ")
        print("\n")
        print("--------------------------------------------------------------")
    
    
    • main()主函数
    def main():
        Interface()     #显示界面
        choose = input("请选择服务:")
        while choose:
            if choose == '1':
                input_info()
                choose = input("请选择服务:")
            elif choose == '2':
                find_info()
                choose = input("请选择服务:")
            elif choose == '3':
                del_info()
                choose = input("请选择服务:")
            elif choose == '4':
                mod_info()
                choose = input("请选择服务:")
            elif choose == '5':
                sort_info()
                choose = input("请选择服务:")
            elif choose == '6':
                sum_info()
                choose = input("请选择服务:")
            elif choose == '7':
                show_info()
                choose = input("请选择服务:")
            elif choose == '0':
                print("成功退出...")
                sys.exit(0)
            else:
                choose = input("请选择服务:")
    
    main()
    • 文件获取,学生信息初始化部分
    #列表打包所有学生个人信息
    
    if os.path.exists('学生信息库.pkl'): #判断文件是否存在
        with open('学生信息库.pkl', 'rb') as stu_file:
            stu_list = p.load(stu_file) #存在则获取其中的内容并赋值给stu_list
    else:
        stu_list = [] #不存在则赋值stu_list为空列表
    • 学生类(我看很多例子都不用类,但是我只是为了复习巩固类与对象的知识,学着做了一下)
    #学生类
    class Student():
        
        def __init__(self, name, age, sex):
            self.stuInfo = dict()       #初始化一个字典存储学生信息
            self.name = str(name)       #姓名
            self.age = str(age) + "岁"  #年龄
            self.sex = str(sex)         #性别
            self.stu_num = self.getStuNum()             #学号
            self.grade = (str(t.localtime()[0]) + "级") #年级
            self.cls = (str(r.randint(1, 3)) + "班")    #班级
            self.stuInfo = dict(name = self.name, age = self.age, \
                             sex = self.sex, stu_num = self.stu_num, \
                             stu_cls = (self.grade + self.cls)) #学生信息放入字典
            global stu_list                 #指明全局变量
            stu_list.append(self.stuInfo)   #放入stu_list列表中
            with open('学生信息库.pkl', 'wb') as stu_file:
                p.dump(stu_list, stu_file)  #存储学生信息
            print("%s同学信息录入成功!!" % self.name) #打印结果
    
        #获取学号的方法
        def getStuNum(self):
            global stu_list
            num = len(stu_list) #获取已有人数
            num += 1            #已有人数加1获取序号
            return (str(t.localtime()[0]) + str(num).zfill(2)) #返回学号

     

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    以下是各个方法的实现代码内容:

    1. input_info()方法
      def input_info():
          name = input("请输入姓名:")
          age = input("请输入年龄:")
          sex = input("请输入性别:")
          clsname = name
          clsname = Student(name, age, sex) #按输入内容实例化一个对象

       

    2. find_info()方法
      def find_info():
          way = input("请选择查找方式(姓名,学号):")
          find = False #指示是否找到学生
          global stu_list
          if way == "姓名":
              Name = input("请输入学生姓名:")
              for info in stu_list: #info则依此为各学生的信息对应的字典
                  if info['name'] == Name:
                      for inf in info.values(): #inf则依此为学生的各信息
                          print(inf, end = ' ')
                      find = True #指示找到学生信息
                      break
              if not find:
                  print("不存在该学生的信息!!") #如果未找到则提示
              find = False
              print("\n")
          elif way == "学号":
              Stu_num = input("请输入学生学号:")
              for info in stu_list:
                  if info['stu_num'] == Stu_num:
                      for inf in info.values():
                          print(inf, end = ' ')
                      find = True
                      break
              if not find:
                  print("不存在该学生的信息!!")
              find = False
              print("\n")
          else:
              way = input("请选择查找方式(姓名,学号):")

       

    3. del_info()方法
      def del_info():
          Name = input("请输入欲删除学生姓名:")
          done = False #指示是否完成操作
          global stu_list
          for index in range(len(stu_list)):  #按索引查找
                  if stu_list[index]['name'] == Name:
                      del stu_list[index]     #利用列表的del方法删除列表元素
                      with open('学生信息库.pkl', 'wb') as stu_file:
                          p.dump(stu_list, stu_file) #刷新存储内容
                      done = True                    #指示操作成功
                      break
          if not done:
              print("不存在该学生信息!!")            #如果不能操作则提示

       

    4. mod_info()方法
      def mod_info():
          Name = input("请输入欲修改学生姓名:")
          done = False
          global stu_list
          for index in range(len(stu_list)):
                  if stu_list[index]['name'] == Name:
                      stu_list[index]['name'] = input("请输入修改后的姓名:")
                      stu_list[index]['age'] = (input("请输入修改后的年龄:") + "岁") 
                      stu_list[index]['sex'] = input("请输入修改后的性别:")
                      stu_list[index]['stu_cls'] = input("请输入修改后的年级班级:")
                      stu_list[index]['stu_num'] = input("请输入修改后的学号:")
                      done = True
                      break
          if not done:
              print("不存在该学生信息!!")

       

    5. sort_info()方法
      def sort_info():
          #按班级排序
          global stu_list
          stu_list.sort(key = lambda x : x["stu_cls"]) #利用列表的sort()方法,用lambda表达式选择按班级升序排序
          print("排序完毕!!")

       

    6. sum_info()方法
      def sum_info():
          global stu_list
          num = len(stu_list) #学生数量即列表元素个数
          print("总共有" + str(num) + "个学生!")

       

    7. show_info()方法
      def show_info():
          print("-------------------学生信息------------------")
          print("    姓名    年龄    性别    学号    年级班级\n")
          global stu_list
          for info in stu_list:
              for key in info.keys():
                  print(" " * 4 + str(info[key]), end = '') #按一定的格式打印学生信息
              print("\n") 

      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    程序执行效果(程序最后一定按0退出程序,否则会一直循环执行):

    --------------------------功能菜单----------------------------
    
    
                           1. 录入学生信息                         
                           2. 查找学生信息                         
                           3. 删除学生信息                         
                           4. 修改学生信息                         
                           5. 排序学生信息                         
                           6. 统计学生人数                         
                           7. 显示学生信息                         
                           0. 退出信息管理系统                      
    
    
    --------------------------------------------------------------
    请选择服务:1
    请输入姓名:张三
    请输入年龄:20
    请输入性别:男
    张三同学信息录入成功!!
    请选择服务:1
    请输入姓名:李四
    请输入年龄:19
    请输入性别:女
    李四同学信息录入成功!!
    请选择服务:1
    请输入姓名:王五
    请输入年龄:21
    请输入性别:男
    王五同学信息录入成功!!
    请选择服务:赵六
    请选择服务:1
    请输入姓名:赵六
    请输入年龄:20
    请输入性别:女
    赵六同学信息录入成功!!
    请选择服务:2
    请选择查找方式(姓名,学号):姓名
    请输入学生姓名:李四
    李四 19岁 女 202102 2021级2班 
    
    请选择服务:2
    请选择查找方式(姓名,学号):学号
    请输入学生学号:202104
    赵六 20岁 女 202104 2021级1班 
    
    请选择服务:2
    请选择查找方式(姓名,学号):姓名
    请输入学生姓名:刘小
    不存在该学生的信息!!
    
    
    请选择服务:6
    总共有4个学生!
    请选择服务:7
    -------------------学生信息------------------
        姓名    年龄    性别    学号    年级班级
    
        张三    20岁    男    202101    2021级3班
    
        李四    19岁    女    202102    2021级2班
    
        王五    21岁    男    202103    2021级1班
    
        赵六    20岁    女    202104    2021级1班
    
    请选择服务:5
    排序完毕!!
    请选择服务:7
    -------------------学生信息------------------
        姓名    年龄    性别    学号    年级班级
    
        王五    21岁    男    202103    2021级1班
    
        赵六    20岁    女    202104    2021级1班
    
        李四    19岁    女    202102    2021级2班
    
        张三    20岁    男    202101    2021级3班
    
    请选择服务:3
    请输入欲删除学生姓名:赵六
    请选择服务:7
    -------------------学生信息------------------
        姓名    年龄    性别    学号    年级班级
    
        王五    21岁    男    202103    2021级1班
    
        李四    19岁    女    202102    2021级2班
    
        张三    20岁    男    202101    2021级3班
    
    请选择服务:6
    总共有3个学生!
    请选择服务:4
    请输入欲修改学生姓名:张三
    请输入修改后的姓名:张三
    请输入修改后的年龄:21
    请输入修改后的性别:男
    请输入修改后的年级班级:2021级1班
    请输入修改后的学号:202101
    请选择服务:7
    -------------------学生信息------------------
        姓名    年龄    性别    学号    年级班级
    
        王五    21岁    男    202103    2021级1班
    
        李四    19岁    女    202102    2021级2班
    
        张三    21岁    男    202101    2021级1班
    
    请选择服务:5
    排序完毕!!
    请选择服务:7
    -------------------学生信息------------------
        姓名    年龄    性别    学号    年级班级
    
        王五    21岁    男    202103    2021级1班
    
        张三    21岁    男    202101    2021级1班
    
        李四    19岁    女    202102    2021级2班
    
    请选择服务:0
    成功退出...
    >>> 

     

    上述为程序所有代码,若需要文件,则可点击如下链接:

    基于python的简易学生信息管理系统

    展开全文
  • OPC的对象模型

    千次阅读 2015-11-09 10:57:06
    OPC逻辑对象模型包括3类对象:OPC server对象、OPC group对象、OPC item对象,每类对象包括...主要功能为:1)创建和管理OPC Group对象;2)管理服务器内部状态信息;3)将服务器错误代码翻译成描述性语句;4)
    OPC逻辑对象模型包括3类对象:OPC server对象、OPC group对象、OPC item对象,每类对象都包括一系列接口。
    OPC Server对象提供了一种访问数据的方法,它通过Iopcserver 、Opcbrowser、Ipersistfile向客户提供接口。主要功能为:1)创建和管理OPC Group对象;2)管理服务器内部的状态信息;3)将服务器的错误代码翻译成描述性语句;4)浏览OPC服务器内部的数据组织结构。从OPC Server对象的功能可以看出,OPC Server对象面向OPC服务器的技术细节,基本独立于实时数据源,可以统一实现,其中数据的组织结构与数据源属性与具体数据源有关,需要从用户处获取信息。OPC Server对象主要实现IUnknown和IOPC Server接口,OPC客户通过OPC服务器的接口与OPC对象进行通信.IOPCServer接口为OPC客户提供了方便有效操作OPC组的方法。


    OPC Group对象的主要功能表现为:1)管理OPC Group对象的内部状态信息;2)创建和管理Items对象。3)OPC服务器内部的实时数据存取服务(同步与异步方式)。从OPC Group对象的功能可以看出,该对象面向OPC服务器中的数据存取信息,对实时数据源的依赖性很强,需要从用户数据源处获取信息。OPC Group提供了客户程序组织数据的手段.每个组中都可以定义一个或多个OPC Item。组有两种类型:公共组(Public)和局部组(local),公共组可以被多个客户共享,而局部组只能被一个客户使用。OPC组中有以下几个主要属性:1)Name :组的名字 2)Active:组的激活状态标志 3)Update Rate OPC:服务器向客户程序提交数据变化的刷新速率4)Percent Dead band:数据死区,即能引起数据变化的最小数值百分比。
    OPC ITEM 是非COM对象,在OPC标准中用来描述实时数据,是客户端不可见的对象。代表了与服务器中的数据的连接,它并不是数据源,而仅仅是与数据源的连接。每个项都有以下主要属性:1) Active项的激活状态2)Value项的数值3)类型为VARIANT;4)Quality项的品质,5)代表数值的可信度,类型为SHORT;6)TimeStamp时间戳,代表数据的存取时间。 

    OPC技术基础包含了两套接口:客户化接口(Custom Interface)和自动化接口(Automation Interface)。客户化接口是一个OPC服务器所必须实现的接口,它描述了OPC组件对象的接口和其中的方法,适合C++和PASCAL语言设计,并可实现最佳运行性能的客户应用程序。客户化接口没有项对象,它对项的操作都是通过包容此项的组对象进行的。自动化接口是可选接口,它提供的是一个自动配置和存取过程控制数据。只要是支持C0M对象的编程语言都能进行OPC客户端的开发。OPC提供了客户化接口和自动化接口,要进行客户端开发实际上就是对这两套接口的声明和调用。 自动化接口封装了C0M底层的许多实现,使开发者能比较轻松的进行数据访问。 



    开发OPC客户端程序常用的方法包括:使用OPCNetAPI(OPCNetAPI.dll)、使用自动化接口(OPCDaAuto.dll)、使用自定义接口(OpcRcw.Ae.dll,OpcRcw.Batch.dll,OpcRcw.Dx.dll,OpcRcw.Comn.dll,OpcRcw.Da.dll,OpcRcw.Hda.dll)。本文所采用的OPC服务器为AB公司的RSLinx服务器,在线数据采集接口程序采用VB6.0开发,使用自动化接口方式,通过调用OPCDaAuto.dll动态连接库实现。

        在线数据采集接口程序主要应用OPC数据访问规范。OPC数据访问规范主要解决服务器端和客户端的实时数据存取问题,OPC数据访问规范中包含三类对象,即服务器(Server)群组(Group)和数据项目(Item),三类对象的组织结构像普通文件系统,其中服务器与分区、群组与文件夹、项目与文件一一对应,各个部分都有自己的属性,同时负责管理其底层分支。接口程序主要通过以下几个主要环节实现:

        ①搜索OPC服务器

        DimGetserver As OPCServer

        DimServers As Variant

        Set Getserver= New OPCServer

        Servers=Getserver.Get OPCServers

        If UBound( Serv ers) > 0Then

        For i= LBound(Servers) To UBound(Servers)

        ServerName.AddItemServers(i)

        Next i

        Set Getserver= Nothing

        ServerName.ListIndex=0

        End If

        ②连接OPC服务器。以上程序实现自动探索OPC服务器,搜索到OPC服务器后,在搜索到的OPC服务器列表中选取并连接OPC服务器:

        SetOPCMyserver = New OPCServer

        OPCMyserver.ConnectServerName.List(ServerName.ListIndex),

        ③创建一个OPC的群组(Group)

        Set OPCMygroups=OPCMyserver.OPCGroups

        Set OPCMy group Pouch=OPCMygroups.Add("Grouppouch1")OPCMygroupPouch.UpdateRate=1000

        ④添加一个OPC项目(Item),一个OPC的项目(Item)对应PLC的一个地址,如下列程序中的[pouch]F8:19表示pouch节点的F8:19地址。

        SetOPCMyitems = OPCMy group Pouch. OPCItems

        Client Handles(1)=819

        OPCItemIDs(1)="[pouch]F8:19"

        OPCMyitems.AddItems1,OPCItemIDs,ClientHandles,ItemServerHandles,Errors''',RequestedDataTypes,AccessPaths

        ⑤设置OPC群组(group)的通讯方式,若IsActive为True,则为OPC服务器主动发数据,否则只有客户端发送读取请求,才读数据。当需要采集的数据是累加数,如统计产品的箱数等数据时,可采取IsActive=False的读取数据方式。若需要采集的数据是不连续变化的数据,并需要全部保存,如每一箱产品的重量时,可以采取IsActive=True的读取方式。

    OPCMygroupPouch.IsActive=False
        ⑥读取数据

        *当IsActive=False时,客户端主动读取数据,可由计时器触发,使系统实现定时采集数据。

        DimanItemAsOPCItem

        DimValues Pouch(900)AsLong

        For EachanItemInOPCMygroup Pouch. OPCItems

        anItem.Read OPCDevice

        Values Pouch(anItem.ClientHandle)=anItem.value

        Next anItem

        *当IsActive=True时,通过DataChange事件触发,即若PLC地址的数据发生改变时触发该事件实现数据采集。在VB中定义了OPC的群组(Group)后,将自动产生该事件过程。

        Private Sub OPCMygroup Pouch DataChange(ByValTransactionID As Long , ByVal NumItems As Long ,Client Handles ( ) As Long , ItemValues ( ) AsVariant ,Qualities( ) As Long,TimeStamps( ) As Date)

        Dim Client As String

        Dim value As String

        For i= 1 To NumItems

        Client= ClientHandles(i)

        value= ItemValues(i)

        Next i

        End Sub


    *存在的不足

        在实际生产现场的应用中也发现,采用IsActive=True的方式读取现场数据的时候,当数据变化较快(1min100次左右时),会产生遗漏一部分数据的情况。




    展开全文
  • 为此,该连锁店提出,近期内要运用信息技术,建立起包括人事管理系统、库存管理系统的管理信息系统,以简化人事管理,提高商品库存效率,增加公司年度利润。 1.1.2系统目标和开发可行性 1.1.3组织结构分析 .... ...
  • 洛阳理工学院 课程设计报告 课程名称...问题描述 设计实现药店管理系统能够实现药品库存管理销售信息管理和查询功能 2.基本要求 库存管理包括药品入库出库管理药品库存报警药品有效期管理过期报警 销售管理根据实际销售
  • 主要介绍了应用面向对象的UML建模技术设计高校科技信息管理系统,ASP.NET下MVC设计模式实现,以及ASP.NET关键技术在系统应用,包括应用代码分离技术实现界面设计和程序设计分离,ADO.NET访问数据库技术以及数据...
  • 探讨了组件式GIS概念、特点和开发方式,并结合面向对象程序设计语言Visual Basic,开发出适于林场级森林资源管理信息系统,其中包括森林资源属性数据库建立和图形数据库建立;系统的主要功能模块包括空间...
  • 根据这些图书馆业务信息,本系统的主要功能包括:实现图书馆图书信息管理和维护,如用户信息管理,图书馆规则维护,新书入库,整理图书,修改图书信息和进行查询等;以及服务系统图书信息查询,图书借出和归还...
  • 系统管理员主要包括了医院科室管理、医生管理、床位管理、药品管理、收费员信息管理、系统管理。医生主要包括了患者住院管理、开药管理、系统管理,其中患者住院管理下具有患者住院登记和病床安排两个模块。收费员...
  • 毕业生信息管理系统是一个对毕业生基本信息进行管理的典型信息系统,其中包括对毕业生基本信息添加、修改、删除等,同时,本系统也具有统计毕业生信息的功能,能够对毕业生的就业信息和考研信息进行统计。...
  • 我们采用IEC 62351,编制了GB/Z 25320指导性技术文件,主要包括以下部分: ——第1部分:通信网络和系统安全安全问题介绍; ——第2部分:术语; ——第3部分:通信网络和系统安全包含TCP/IP协议集; ——第4...
  • 图书馆管理信息系统用例图和类图 类图 图书管理系统主要管理对象是图书,系统用户包括,借阅者,图书管理员。该系统主要设计包括:Book (代表一本书)、Borrower (借阅者)和 Worker(图书管理员)。 其中...
  • 采集数据对象是中国部分有影响力重点高校计算机科学与技术、软件工程相关专业科研、教学和学术论坛,主要内容包括研究方向和研究项目,采集日期范围2007-09-01至2007-10-01。 为便于在科教研中快速查找需求...
  • 高校人事管理系统所需要完成功能主要有: 人事信息的输入,包括:编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间等。 人事信息的查询,包括:编号、姓名、性别、年龄、职务、职称...
  • 人力资源管理系统是一个典型的信息管理系统(MIS),本系统是一个为适应当前各个行业对人力资源信息管理的迫切需求而设计开发的软件系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面,...
  • 1,掌握计算机管理信息系统设计一般方法,主要包括系统分析、系统设计组织和实施。 2,关系型数据库管理系统编程技术,并能独立完成一般小系统程设计、调试运行等工作。 3, 培养把所学知识运用到具体...
  • 面对这样庞大的信息量,就需要有学生信息管理系统来提高学生管理工作的效率 任务概述 需求分析通过详细调查现实世界要处理的对象,充分了解原系统的工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。...
  • 详细论述了如何遵循Rational 统一过程思想,采用面向对象的分析和设计方法,使用UML建模语言进行系统分析与设计全过程,主要包括需求分析、架构设计、详细设计、实施等。
  • 职工信息管理系统

    2011-12-24 12:44:28
    该设计要求学生以某企业职工信息管理业务为背景,设计、开发一套“职工信息管理系统”软件。 通过该题目设计,培养学生面向对象程序设计思想,要求学生达到熟练掌握C++语言基本知识和技能,基本掌握面向对象...
  • 服务信息管理系统

    2013-03-22 21:50:46
    服务信息管理系统为企事业单位服务中心工作人员日常工作调度、安排、计划。分为电话中心、商务中心、客服等各部门提供充足信息和快捷查询手段.其开发内容主要包括后台数据库建立和维护以及前端应用程序...
  • 主要包括会员和管理员两个模块,每个模块又有其不同子模块,如下所示: 会员模块: 1、个人信息 2、设备信息 3、使用记录 4、建议信 管理员模块: 1、个人信息 2、会员管理 3、会员充值 4、使用登记 5、设备...
  • 本课题会开发一个计算机协会社团信息管理系统,从而实现计算机协会社团信息管理系统内部各种繁琐事务管理。追求低碳生活,摆脱以前纸质化办公模式,节约人力物力从而达到提高办事效率目的。随着计算机技术...
  • OpenDDS是对象管理规范“实时系统数据分发服务”(DDS)以及其他一些相关规范开源C ++实现。 这些标准定义了一组接口和协议,用于基于发布-订阅和分布式缓存模型开发分布式应用程序。 尽管OpenDDS本身是用C...
  • 这个管理系统主要包括三个部分,1、新建名片(包括姓名、电话、QQ、邮箱);2、显示全部名片;3、查询名片(键入要查询的信息,若查到则可以选择修改/删除操作,反之则不) 代码如下: class Execute: def __...
  • 此存储库已移至主要的RabbitMQ统一“ monorepo”,包括所有未解决问题。 您可以在下找到源。 所有问题均已转移。 介绍 将Erlang VM上UNIX顶级信息添加到 。 最近发行版中最接近交互式CLI替代产品是rabbitmq-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,402
精华内容 560
关键字:

信息管理的对象主要包括