首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

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

2012-10-11 
抓斗秤:java连接串口和继电器最近一直在调研计量设备,再来一个抓斗秤的吧? ? 抓斗秤:就是一个抓斗,抓斗可

抓斗秤: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

热点排行