求对 4017 的编程示例和请教。。 点击:1200 | 回复:14



gongkongedit

    
  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2003-12-29 14:24:00
楼主
请教各位前辈: 仪器N --adam 4017-4520-PC 现在要做一个系统,轮询读取仪器N的数据,并要求每仪器每秒10个记录。共8个仪器。两串口都连则16个仪器。 要求将数据即时存入一个access库,另外的线程即时进行计算处理。 使用bcb6。 问题: 1)听说有adam4017的win32的dll,可以用来完成度数和设置,哪里可以下载和如何使用? 2)若仅仅使用一般的comm控件,如何考虑?如何处理多线程问题? 现在我仅仅用一个pc,一对4017和4520试验。如何首先做到读取数据和设置状态? 我想,这可以通过向端口发字符串来设置,可以接受com口的数据。 请问有例子吗? 非常谢谢。



GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2003-12-02 12:02:00
1楼
1. 厂家应该会提供 Win32 DLL & Utility 才是. 您可以向厂家问题. 2. 多线程在 debug 时, 会有较多困扰, 能不用就不用. 若非用不可, 则一个串口只用一个线程去处理.

老朱

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 23回
  • 年度积分:0
  • 历史总积分:94
  • 注册:2003年8月14日
发表于:2003-12-10 10:20:00
2楼
研华的adam4017(4000系列)倒是有个utility,也有dll,它的utility是用来设置4017的,不是编程用的。 它的dll据说是个函数包,但没有中文的说明,另外,说明书没有系统的编程实例,到这里来提问,主要是想请教前辈们,以便讨得个系统的实例。我看这里提问的都是很具体的问题,难道对这样的入门问题就无人理睬?

yoyo1101

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 590回
  • 年度积分:0
  • 历史总积分:645
  • 注册:2002年8月30日
发表于:2003-12-10 16:11:00
3楼
装完驱动应该有例子的,在安装目录下找找看,里面应该有DLL、例子、头文件等等,找不到的话还是直接问研华的技术支持比较快。

老朱

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 23回
  • 年度积分:0
  • 历史总积分:94
  • 注册:2003年8月14日
发表于:2003-12-11 11:28:00
4楼
谢谢回复,不过怎么没有研华的人回复呢? 他们在这里收集了用户信息,悄悄地开始搞营销了,不管技术支持了吗?没有技术支持,人家怎么开发?没有对研华产品的开发,研华怎么卖 ?

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2003-12-12 10:51:00
5楼
这个版面并非研华在负责的, 您的问题或许他们根本就没看到. 您不妨直接上他们的网站寻求支持吧!

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2003-12-12 11:27:00
6楼
研华在自己的网站上有专门的技术支持板快,可以直接在上面问。 http://service.advantech.com.tw/eservice,左下角有一个EMAIL SUPPORT。在哪里问应该会有回复。

ebuss

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:1
  • 注册:2003年7月06日
发表于:2003-12-13 01:55:00
7楼
多谢回复。 我知道这个板块研华不负责,但我发现他们在这些地方收集注册用户信息。 另外,希望不是研华的同好们给些指点。

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2003-12-15 12:06:00
8楼
用户信息不一定非得用人去收集才行, 很多是用程序去自动收集的.

交流的天空

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 93回
  • 年度积分:0
  • 历史总积分:114
  • 注册:2003年3月18日
发表于:2003-12-15 17:31:00
9楼
如果你了解串口编程,我想你根本就不需要dll了 因为使用dll你还需要了解一些函数的使用方法, 直接串口编程,你只要按照手册里面的Command Set发指令就可以了!

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2003-12-15 18:15:00
10楼
楼上说的也是! 工业自动化系列专业参考书籍 http://www.icpdas.com.cn/products/books/book_c.htm

老朱

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 23回
  • 年度积分:0
  • 历史总积分:94
  • 注册:2003年8月14日
发表于:2003-12-16 00:02:00
11楼
交流的天空:你一句话提醒梦中人。我试试用我自己的串口程序来处理先。谢谢各位。 另外,我还有一个接近的问题在坛子里,请指点。

d_f

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 45回
  • 年度积分:0
  • 历史总积分:53
  • 注册:2003年12月09日
发表于:2003-12-23 13:50:00
12楼
用dll是绕远的办法,直接用comm控件给模块发指令是最简单的。比如,问1号4017要数据就发#01再加一个回车符就可以了。手册上写得很清楚,可以参考一下。

老朱

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 23回
  • 年度积分:0
  • 历史总积分:94
  • 注册:2003年8月14日
发表于:2003-12-28 23:20:00
13楼
GaryLin: 我下载了你给的地址icpdas.com的关于7017的用于BCB的实例, 它有几个文件: 2003-05-05 11:48 60,135 I7000.H 2002-12-18 10:15 14,848 I7000bc.lib 2002-12-18 10:24 3,997 I7000U.CPP 2002-09-23 11:43 19,428 I8000.h 2002-07-10 18:53 15,639 I87000.h 2003-12-28 02:53 3,813 Project1.bpr 1998-09-25 17:38 693 Project1.cpp 2003-05-07 08:55 28,672 Project1.exe 1998-09-24 15:26 876 Project1.res 2002-03-19 13:06 4,070 Uart.h 2002-12-18 10:15 1,536 Uartbc.lib 2003-12-28 22:23 4,590 Unit1.cpp 2003-12-28 22:23 51 Unit1.ddp 2003-12-28 02:52 3,857 Unit1.dfm 1998-09-28 09:12 1,581 Unit1.h ---- 其中,它的对7017发指令并收数据的过程是这样的: 在unit1.cpp中: void __fastcall TForm1::Button1Click(TObject *Sender) { Word wRet ; if ( bCfgChg && bComOpen ) // Reopen Com port { Close_Com( cPort ); bComOpen = false; }; if ( ! bComOpen ) OpenCom(); w7000[0] = (Word) cPort ; // COM Port w7000[1] = (Word) StrToInt( "0x" + Address->Text ); // Module Address switch ( TypeComboBox->ItemIndex ) { // Module ID case 0: w7000[2] = 0x7017; break; case 1: w7000[2] = 0x7018; break; }; if ( RadioButton1->Checked ) w7000[3] = 1 ; // CheckSum Enable else w7000[3] = 0 ; w7000[4] = 100; // TimeOut = 0.1 second w7000[5] = (Word) StrToInt(Channel->Text) ; w7000[6] = 1; // string debug wRet = AnalogIn(w7000 , f7000, szSend , szReceive ); //这里是收信。存到szReceive里。该函数是在Uart.h中定义的。包看Project1.bpr项目文件(类似于VC的工作区文件、工程文件),可见该项目需要I7000bc.lib、Uartbc.lib库。然而,该示例没有给出库的源程序。 if ( wRet != 0 ) { //Application->MessageBox( (char) "The Error Code:" + IntToStr(wRet), // (char) "AnalogIn() error !!! " , MB_OK ); ShowMessage( "AnalogIn() Error!!\nThe Error Code:" + IntToStr(wRet) ); Close_Com (cPort); }; if ( w7000[6] == 1 ) { TVarRec args[3] = {6,3, f7000[0] }; Edit1->Text = Format("%*.*f", args, 2); Edit2->Text = szReceive; //注意,这里是给Edit2赋值,其值在前面已经得到。 }; } ======== 故,我难以从示例中得到我为什么如下过程会失败的原因:因为不知道应该怎么发指令,接收信息后应该给4017什么回复或处理? 对4017(7017兼容)发指令: #020(CR)(即:#AAN) 仅仅前面一次可以得到正确的返回值0.0003,后面就会有乱码了。

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2003-12-29 14:24:00
14楼
http://www.gongkong.com/tech/detail.asp?id=197580

热门招聘
相关主题

官方公众号

智造工程师