`
suigara
  • 浏览: 80600 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

抓斗秤:java连接串口和继电器

 
阅读更多

最近一直在调研计量设备,再来一个抓斗秤的吧

    抓斗秤:就是一个抓斗,抓斗可以抓东西,抓斗上有个计量设备。采购的原料到货后(船装的),抓斗秤开始一把一把的抓。。。
每抓一把,计量设备就使用在称重,并把重量通过无线(高级吧。。)传给计量仪表,仪表上就会实时显示计量值,但这个值不一定是正确的(因为一直在动),必须到了指定位置后,计量设备的称重才是相对准确的,这时会发一个信号给磅房的继电器,计算机接收到这个信号后,才能把当前串口给的重量当做是这斗的重量进行累加。
结束后把所有的累加结果放到磅单上保存、推单。
串口接收数据在汽车衡的时候就已经做了,这回只是数据格式不同,根据情况解析就可以了。
现在的问题在于如何知道稳定的信号(继电器接收到的信号)
通过看计算机上的驱动,发现继电器使用的是研华PCI1761板卡,通过在现场查看厂家给的技术资料,发现厂家提供了一个COM组件供开发使用,但是只提供给.net平台。
凭借以前做过点vb,并且电脑上有vb开发程序,按照文档的步骤用vb做了一个界面,查看继电器的状态。忘了说了,继电器就是开关,pci1761提供了最多8路的开关量。
南方这边有三个抓斗秤,分别对应pci1761的0,1,2路,当某路的信号量的值为true(1)的时候,说明对应的抓斗秤到位了。
vb做的界面可以看到集线器的状态,这是心放下一半了。
回来后,查资料,看看vb能不能导出java可调用的dll,发现不行(可能是我没查到吧)
于是硬着头皮用vc2005开发(本机上已经有这个了),先看看jni需要的格式,这部分参见附件。
通过附件的例子,自己也通过java的native方法(自己定义的)生成了一个头文件。
接下来就是实现了,具体细节就不在这说了,忙活了一个晚上+一个上午,最终写了不到100行(核心代码也就40行吧)的代码,经过不停地google、修改,vc编译才通过,调用下,报错,大概意思就是没有设备吧,想想也对。
第二天又去了现场,到达磅房,拷贝测试程序和写好的dll,运行,成功!!!
最后贴出来vc核心代码吧:
// PCI1761.cpp : 定义 DLL 应用程序的入口点。
//
#import "C:\Windows\SysWOW64\AdvDIO.dll" no_namespace
#include "stdafx.h"
#include "nc_mes_pub_hardware_PCI1761.h"
#include "atlbase.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif
HRESULT hr ;
CLSID clsid;
JNIEXPORT void JNICALL Java_nc_mes_pub_hardware_PCI1761_coInitialize
(JNIEnv *, jobject){
// advlib = NULL;
CoInitialize(NULL);
//CLSID clsid;
hr = CLSIDFromProgID(L"AdvDIO.AdvDIOCtrl", &clsid);
//printf ("%x \n",hr);
}
/*
* Class: nc_mes_pub_hardware_PCI1761
* Method: readChanel
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_nc_mes_pub_hardware_PCI1761_readChanel
(JNIEnv *, jobject, jint channel){
CComPtr<IAdvDIO> advlib;
hr = advlib.CoCreateInstance(clsid);
if ( SUCCEEDED( hr ) )
{
advlib->DeviceNumber = 0;
if(advlib->DeviceNumber < 0){
return -100;
}
int i =advlib->ReadDiChannel( channel );
advlib.Release();
advlib = NULL;
return i;
}
else
{
return -1;
}
}
/*
* Class: nc_mes_pub_hardware_PCI1761
* Method: coUnInitialize
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_nc_mes_pub_hardware_PCI1761_coUnInitialize
(JNIEnv *, jobject){
CoUninitialize();
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics