adam4017编程问题汇报 点击:2517 | 回复:18



老朱

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 23回
  • 年度积分:0
  • 历史总积分:94
  • 注册:2003年8月14日
发表于:2003-12-31 19:45:00
楼主
==== Memo2 ?0.0003 0.0003 ?6贮 6贮 厨 ==== 在各位前辈指点下,我查阅了4017的一些资料,然后,我使用自己制作的Comm读写控件,BCB6编程,作了试验。试验目的是看我连续对端口发指令,应该得到稳定的数据。 报告如下:上面是我收到的数据。 4017的有关命令: 4015, 4017, 4017+, 4018, 4018+, 4018M, 4019 ------------ #AAN Name Read Analog Input from Channel N Description The command will return the input value from one of the eight channels of a specified (AA) module in the currently configured data format. Syntax #AAN(cr) # is a delimiter character. AA (range 00-FF) represents the 2-character hexadecimal address of the analog input module. N identifies the channel you want to read. The value can range from 0 to 7 for 4017, 4018, 4018M, 4019. (the range of 4015 is from 0 to 5) (cr) is the terminating character, carriage return (0Dh). Response >(data)(cr) There is no response if the module detects a syntax error or communication error or if the specified address does not exist. > is a delimiter character. (data) is the input value of the channel number N. Data consists of a + or - sign followed by five decimal digits with a fixed decimal point. (cr) is the terminating character, carriage return (0Dh). Example command: #120(cr) response: >+1.4567(cr) The command requests the analog input module at address 12h to return the input value of channel 0. The analog input module responds that the input value of channel 0 is equal to +1.4567 volts. --------- 可见,我只要对指定端口发字串: #020(回车) 就可得到: >+0.0003 >+0.0003 >+0.0003 这样的结果。 事实上,用4017的utility工具,可以不断发送 #020 而得到: ----- 0> #020 1:34:42 0< >+0.0003 1:34:42 30(ms) 1> #020 1:34:42 1< >+0.0003 1:34:42 30(ms) 2> #020 1:34:42 2< >+0.0003 1:34:42 40(ms) 3> #020 1:34:42 3< >+0.0003 1:34:42 40(ms) 4> #020 1:34:42 4< >+0.0003 1:34:42 50(ms) 5> #020 1:34:42 ------------------ 我的发送指令的代码如下: if (Key==13) Comm1->OutputString(Memo1->Text); 收到数据后显示的代码如下: Memo2->Text=Memo2->Text+Comm1->Input; ------- 不使用我自己编写的程序,而使用其他串口工具,得到的结果也是: ?0.0003 ?0.0003 ?0.0003 >+0.0003 ?0.0003 ?0.0003 >+0.0003 >+0.0003 ?0.0003 ?0.0003 ?0.0003 ?0.0003 ?0.0003 ?0.0003 >+0.0003 ?0.0003 ?0.0003 ----- 可见,我的程序发出的指令,收到的第一二个数据还可接受,后面就乱了,请问问题会出在什么地方呢?



老朱

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 23回
  • 年度积分:0
  • 历史总积分:94
  • 注册:2003年8月14日
发表于:2003-12-28 23:22:00
1楼
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等前辈指点指点 !叩谢请安!

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 1186回
  • 年度积分:0
  • 历史总积分:1256
  • 注册:2003年4月15日
发表于:2003-12-29 14:14:00
2楼
这类模块的使用很简单, 送 command, 等回应即可. PC 端不需再次回应什么确认的东西. Checksum enable 时, 您得加入 checksum 于 command 后面 (当然还有那个 CR 0x0D). AnalogIn() 函数会依 w7000[3] 的设定, 自动计数是否加入 checksum. 您可先将 checksum disable 掉比较方便测试. (模块 及 程序) 另外, 4520 是否要作 RS-485 的收送方向控制 (by RTS)? I-7520 会全自动处理掉 收送方向/baud rate/data format. 还有, command 不能连续接着送出, 得等待回应或一段时间后再送. 不然也是会有冲突. (半双工模式) 再检查看看, 是否是接线不良的问题?

謝聰敏

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 246回
  • 年度积分:0
  • 历史总积分:351
  • 注册:2002年9月23日
发表于:2003-12-29 14:19:00
3楼
因為您此張帖子沒有放到RS-485論壇上, GaryLin可能看不到喔, 下次請直接到RS-485論壇上發表

opal

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 48回
  • 年度积分:0
  • 历史总积分:61
  • 注册:2002年4月23日
发表于:2003-12-29 16:36:00
4楼
两次发送的时间间隔是多少?是不是太频繁了? 4520是自动流控的,可以把它当作一根导线。 如果还有问题,请尽快联系研华公司的技术工程师。 电话:010-62984346-6702

老朱

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 23回
  • 年度积分:0
  • 历史总积分:94
  • 注册:2003年8月14日
发表于:2003-12-30 02:21:00
5楼
回复上面的前辈的指点: GaryLin: 我程序也就是送指令,接收,手动再送指令。因为是调试,故没有进行自动化处理。没有进行checksum,按4017的utility的默认设置。 我用我的程序做完试验,立即用它的utility试验,结果就大不相同,我的数据只有前面一个或两个可以接受,而人家utility得到的数据一直很稳定。且,它可连续送出数据,得到反馈。所以,不存在硬件的问题和接线问题。 既然我能得到一次良好数据,说明我的程序也是可行的。我今天晚上初步怀疑是我收送的数据和指令的长度不当,数据有重叠? opal: 感谢你的指点。稍后我会和他们联系,请求指导。但我担心他们的销售缠我。当然我调试好了会考虑给我客户建议采用研华的东西,但决定权在客户手上。有时候一些销售人员的积极会起副作用。 JackHsieh: 我不太明白这里的坛子是怎么分的,多谢指点!

老朱

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 23回
  • 年度积分:0
  • 历史总积分:94
  • 注册:2003年8月14日
发表于:2003-12-30 02:48:00
6楼
再次汇报: 刚才发现确实是我发送区数据没有清理干净,每次送出时,控件会加上0dh作尾巴,我没清理。结果导致指令重叠上尾巴,结果出错。 现在这个问题得到解决,还是要感谢各位前辈! 现在我要考虑的是,若系统收到错误信息,如何过滤。若系统发出的指令到达4017后畸形导致回复错误,系统怎么自动恢复正常状态? 相信各位前辈一定有经验给我指导,我也希望我会尽快能有可回馈大家的经验教训。

老朱

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 23回
  • 年度积分:0
  • 历史总积分:94
  • 注册:2003年8月14日
发表于:2003-12-30 05:18:00
7楼
实际情况是这样的: 我发送指令是用键盘按回车发送的,这时等于我发送了: #020\r\n 而4017接受的指令是: #020\r 即,我多发送了一个\n 我用跟踪进程序,发现我发的指令是: #020\r\n 而手册上的指令是: #020\r 于是,我改程序,采用在Button上固定发送指令: void __fastcall TForm1::Button3Click(TObject *Sender) { Comm1->OutputString("#020\r"); } 立即解决了问题。所有收到的信息全部是很规整的: >+0.0003\r 希望这个经验教训给其它新接触到这个领域的朋友有所帮助。

謝聰敏

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 246回
  • 年度积分:0
  • 历史总积分:351
  • 注册:2002年9月23日
发表于:2003-12-30 15:42:00
8楼
老朱您好: PC-based論壇是主論壇, 由凌華公司的李侃先生當版主, 至於RS-485論壇则是子論壇, 由泓格公司的一群專業的工程師負責解答有關RS-485方面的問題, 由於問題分類的工作是由工控網負責處理, 例如他們可能不知道研華ADAM-4000系列產品也跟RS-485有關係, 所以就不會把這個問題也丟到RS-485論壇, 基於身為工控產品供應商的責任和義務, 我們從今年開始繼凌華公司之後, 開始藉工控網這個園地, 解答廣大用戶的問題, 從明年開始, 我們也即將在嵌入式論壇內開闢一個新的Windows CE.net控制器與應用子論壇, 希望透過這種交流方式, 讓一些初學者或是用戶能跟製造廠家有更頻繁的交流機會, 感謝工控網潘英璋先生對我們的支持, 最後為了讓本論壇更加完善, 我呼籲身為PC-based產品龍頭的研華公司也能來共襄盛舉, 不要老讓我們這些小老弟來幫你們做技術服務. 泓格科技 謝聰敏

謝聰敏

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 246回
  • 年度积分:0
  • 历史总积分:351
  • 注册:2002年9月23日
发表于:2003-12-30 15:43:00
9楼
老朱您好: PC-based論壇是主論壇, 由凌華公司的李侃先生當版主, 至於RS-485論壇则是子論壇, 由泓格公司的一群專業的工程師負責解答有關RS-485方面的問題, 由於問題分類的工作是由工控網負責處理, 例如他們可能不知道研華ADAM-4000系列產品也跟RS-485有關係, 所以就不會把這個問題也丟到RS-485論壇, 基於身為工控產品供應商的責任和義務, 我們從今年開始繼凌華公司之後, 開始藉工控網這個園地, 解答廣大用戶的問題, 從明年開始, 我們也即將在嵌入式論壇內開闢一個新的Windows CE.net控制器與應用子論壇, 希望透過這種交流方式, 讓一些初學者或是用戶能跟製造廠家有更頻繁的交流機會, 感謝工控網潘英璋先生對我們的支持, 最後為了讓本論壇更加完善, 我呼籲身為PC-based產品龍頭的研華公司也能來共襄盛舉, 不要老讓我們這些小老弟來幫你們做技術服務. 泓格科技 謝聰敏

老朱

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 23回
  • 年度积分:0
  • 历史总积分:94
  • 注册:2003年8月14日
发表于:2003-12-30 23:06:00
10楼
JackyHsieh: 凌华的东西应该和研华的一样吧。希望我在这里抛砖引玉能对凌华的用户也有些作用。我也是各位的“下线”,都是工控中人。我是新丁,还望多多指教。虽然在IT行业爬行多年,在工控里是新丁就是新丁。

謝聰敏

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 246回
  • 年度积分:0
  • 历史总积分:351
  • 注册:2002年9月23日
发表于:2003-12-31 10:23:00
11楼
老朱: 不管是新丁或是"老"丁, 只要是有關PC-based相關的自動控制問題或對產品想法, 我們都希望藉由這個論壇和大家交流, 我是GaryLin的同事, 很高興在這裡認識許多新朋友. 至於研華, 凌華和泓格, 某些產品線確實很相似, 但我認為接下來大家比的將會是服務了, 希望透過這種良性競爭, 可以提升廠家的服務質量, 造福廣大的用戶.

老朱

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 23回
  • 年度积分:0
  • 历史总积分:94
  • 注册:2003年8月14日
发表于:2003-12-31 19:45:00
12楼
JackyHsieh: 好!我投你一票!

cheerfulboy111

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2005年4月27日
发表于:2005-04-27 00:41:00
13楼
您好!您能发一份关于VC采集ADAM-4017的例程序吗!?万分感激!

cheerfulboy111

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2005年4月27日
发表于:2005-04-27 00:42:00
14楼
您好!您能给我发一份关于ADAM-4017例程吗!?万分感激!谢谢! kkll_1230@163.com

cheerfulboy111

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2005年4月27日
发表于:2005-04-27 00:42:00
15楼
您好!您能给我发一份关于ADAM-4017例程吗!?万分感激!谢谢! kkll_1230@163.com

hppost

  • 精华:1帖
  • 求助:0帖
  • 帖子:8帖 | 74回
  • 年度积分:0
  • 历史总积分:187
  • 注册:2004年7月28日
发表于:2005-04-28 16:20:00
16楼
研华产品的所有例程,请到研华网页免费下载。亦无须注册!也可以致电8008100345。不过肯定会问你的一些信息。

黑色的雨

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 64回
  • 年度积分:0
  • 历史总积分:129
  • 注册:2005年4月03日
发表于:2005-05-10 19:05:00
17楼
我也需要一份 mayierly@163.com 急着用!!谢谢!!

张天昊

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 5回
  • 年度积分:0
  • 历史总积分:11
  • 注册:2006年6月13日
发表于:2006-06-14 23:45:00
18楼
能不能给我也发一份啊 ???
robert8388@sina.com

热门招聘
相关主题

官方公众号

智造工程师