论文网首页|会计论文|管理论文|计算机论文|医药学|经济学论文|法学论文|社会学论文|文学论文|教育论文|理学论文|工学论文|艺术论文|哲学论文|文化论文|外语论文|论文格式
中国论文网

用户注册

设为首页

您现在的位置: 论文大全网 >> 计算机论文 >> 通信技术论文 >> 正文 会员中心
 计算机应用论文   计算机理论论文   计算机网络论文   电子商务论文   软件工程论文   操作系统论文   通信技术论文
基于JACOB的托利多电子称与计算机通信的研究

基于jacob的托利多电子称与计算机通信的研究

在基于java swing 技术开发的论文联盟http://过磅管理系统中,需要与串口通信,读取电子称的数据。microsoft 的mscomm是一个功能强大的串口通信控件,在vb中用它来开发串口通信程序是一个不错的选择。java 的jni类库用于访问c/c++代码是比较方便的,但是用来访问vb开发的串口通信程序却很麻烦[1]。jacob(java-com bridge)是一个开源的基于jni技术开发的类库,用于java代码与com组件之间的通信。本文利用jacob在java swing 中调用vb下开发的dll串口通信程序,实现对地磅数据的自动读取。
  
  一、8142 系列电子秤串口数据格式与mscomm通信控件
  
  绿华糖厂使用的托利多电子秤型号是8142或是8142pro,这两种电子秤的串口发送数据方式都是设置为连续发送,而且数据格式都是一样的,如表1所示:
  
  其中,状态字a、b、c分别表示小数点位置、分度倍乘、是否超载等信息,具体见电子称所附说明书。限于篇幅,不再一一给出。综上可知一帧数据共有18个字节,但实际传输中只用了17个字节,最后一个字节检查校验和,一般不使用。
  计算机与串口通信程序的开发利用mscomm activex控件是比较方便的[2]。它具有如下重要属性:commport属性:设置与返回通讯端口数;settings属性:设置与返回波特率,奇偶校验位,字符串的停止位和数据位;portopen属性:设置与返回通讯端口的状态,并可开放、关闭端口;input属性:返回和删除接收缓冲区的字符;output属性:写字符串到发送缓冲区。
  (一)数据包的提取
  数据包的提取是利用oncomm事件来完成的。设置mscomm的rthreshold属性为18,这样当接收缓冲区收到18个字节时,就会发生mscomm事件。由于电子称工作于连续发送方式,即使收到18个字节仍不能保证是一个完整的数据帧。因此就必须对这18个字节做进一步的分析,以确认是否为有效数据。由表1的数据格式可知,正确的数据包的第一个字节为02h,第17个字节为0dh。这样,在mscomm事件中就可以检测这两个位置的字节以判断是否为正确的数据帧。
  (二)超载检测和负值检测
  如果接受的数据超载(即接受的重量超过电子秤的量程范围)或者为负值,接受数据就没有意义了,所以必须对它进行检测。超载检测主要是判断数据包中的状态字b的‘2’位数据是否为‘1’,若为‘1’,则为超载;若为‘0’,则为正常,可以通过超载检测。负值检测主要是判断状态字b中的‘1’位数据是否为‘1’,若为‘1’,则为负值;若为‘0’,则为正常,可以通过检测。
  (三)重量数据的析取
  在托利多电子秤上所显示的重量数据在数据包中处于5 到10 位,有6 个字节,每个字节对应于电子秤所显示的一位数值。将每个字节转换为字符并连接为字符串,就可以作为重量数据返回给上层调用程序了。
  二、电子称数据采集dll控件的开发
  通信程序的开发是在vb6.0环境下完成的。点击“文件”->“新建工程”,在弹出的新建工程对话框中选择activex dll控件选项,新建一个工程,取名为tuledo8142。并为该工程添加一个mscomm控件。源码主要包括两个函数与一个oncomm事件处理。其中getcheng函数供swing调用以设置通信格式并打开com口[3]。其代码如下:
  public function getcheng()
  mscomm1.commport = 1
  mscomm1.settings = "9600,e,7,1"
  mscomm1.rthreshold = 18
  mscomm1.inputlen = 18
  mscomm1.inbuffercount = 0
  mscomm1.portopen = true
   end function
  在oncomm事件中判断数据帧是否有效,并负责析取重量数据,主要代码如下:
  private sub mscomm1_oncomm()
  dim inbytes() as byte
  inbytes = mscomm1.input
  if inbytes(0) = 2 and inbytes(16) = 13 then
  value = chr(inbytes(4)) & chr(inbytes(5)) & chr(inbytes(6)) & chr(inbytes(7)) & chr(inbytes(8)) & chr(inbytes(9))
  mscomm1.inbuffercount = 0
  mscomm1.portopen = false
  exit sub
  end sub
  getvalue函数仅供swing读出重量值:

转贴于论文联盟 http://

public function getvalue() as string 论文联盟http://
   getvalue = value
  end function
  接着就需要将该通信程序封装为ocx控件。具体步骤为,点击“文件”->“生成tuledo8142.dll…” 。这样会生成tuledo8142.dll文件,可以供swing使用了。
  
  三、在swing中使用数据采集dll控件
  
  (一)jacob的安装
  在eclipse3.2中,右键点击工程,打开configuration对话框,将jacob.jar文件加入到classpath中。
  (二)在swing中的java读磅值函数
  public string readcheng(){
   string result= "nodata";
   int count = 0;
   //使用jacob启动读称:
   dispatchchengreader = new dispatch("youjvcheng.class1");
   dispatch.call(chengreader, "beginreadcheng");
   //等待结果:
   while(result.equals("nodata") ){
   result = dispatch.call(chengreader, "getresult").tostring();
   if(count++ >10000)break;
   }
  
  return result;
  }
  (三)使用多线程实时显示磅值
  在实时显示数据的同时,为了不影响正常操作的进行,必须用多线称实现数据的显示[4]。以下是显示数据的线称类:
  class dispchengthread implements runnable
   {
   public void run()
   {
   dispatch chengreader = new dispatch("cheng4thread.class1");

转贴于论文联盟 http://

 while(ischengthreadrunned){
   try{
   thread.sleep(400);论文联盟http://
   }catch(interruptedexception e)
   {
   system.out.println(" 读磅秤线程出现异常:\n");
   e.printstacktrace();
   }
   string result= "nodata";
   int count = 0;
  
   //启动读称:
   dispatch.call(chengreader, "beginreadcheng");
   //等待结果:
   while(result.equals("nodata") ){
   //每隔50ms读一次数据:
   try{
   thread.sleep(50);
   }catch(interruptedexception e)
   {
  system.out.println(" 读磅秤线程出现异常:\n");
   e.printstacktrace();
   }
   result = dispatch.call(chengreader, "getresult").tostring();
   if(count++ >10)break;
   }//end while
  valuechenglabel.settext( ( "第"+v++ +"次读磅:"+result));
   valuecheng = result;
   }//end while
   //线程结束:
   valuechenglabel.settext("");
   chengreader = null;
   }//end run()
   }// end dispchengthread
  
  四、应用情况
  
  本文提出swing电子称数据采集方案已在籽棉收购系统中得到应用。数据读取快速准确,运行稳定,取的了满意的效果。 转贴于论文联盟 http://
  • 上一个计算机论文:
  • 下一个计算机论文:
  •  更新时间:
    一种基于霍尔传感器的车辆行程及速度测量系
    基于高斯变异的自适应猴群算法
    基于Java RMI的分布式数据库系统开发与应用
    基于AES加解密系统的设计与实现
    基于安卓的掌上校园客户端设计初探
    基于Asterisk的呼叫中心弹屏模块设计与实现
    基于PLC井下主排水泵综合自动化控制的研究
    基于WSN—T的车位管理原型系统探究
    基于频段局部能量特征方法的接地网故障诊断
    基于CATIA飞机三通导管零件的逆向建模
    基于Windows构架网络数据包拦截技术的个人防
    基于MIDAS的大体积混凝土水管冷却仿真分析
    | 设为首页 | 加入收藏 | 联系我们 | 网站地图 | 手机版 | 论文发表

    版权所有 www.11665.com © 论文大全网 All rights reserved