撰写
labview 的程式,如果有资料需要做传输,在同一台电脑做传输常常使用的手段是透过 Global Variable、Queue 等手段来达成目的。若是在不同的平台上有资料须要做传递,比如说 PC 跟 RT 之间有资料要做传输,比较常看到大家使用的方式是用 Shared Variable。
Shared Variable 其实是一个庞大的东西,裡面的机制就是使用 TCP/IP 的 Protocol 来传递资料,再去包装成一个 Shared Variable 给使用者使用,使用 Shared Variable 在传输速度上会比较慢,另外资料也不具同步化,会被重复抓取的问题,因此在跨平台传递资料方面,笔者在这边比较建议的方式是直接使用 TCP/IP 的方式来做资料的传输。
TCP/IP 的使用方式,我们可以在 Block Diagram 的 Func
tions 中来找寻,路径在 Functions =》 Data Communication =》 Protocols =》 TCP 选单中,可以如下图依序的去找到。
Block Diagram 上点选滑鼠右键叫出选单,再点选上图的 Data Communication
点选上图的 Protocols
点选上图的TCP
裡面的选单如上图所示,共有十个 Function 可以使用,在直接撰写程式之前,我们先要了解一下 TCP/IP 的架设基本知识,网路分层的知识在这边先不提,要使用 TCP/IP来 传输资料,我们必须先有一个 Server 端準备好在那边,然后由 Client 端来连线去连接到 Server 端,因此必须先决定两个平台 (可以放在同一台电脑内) 谁要当 Server 端,先 Run 起程式来等待 Client 连线。
上图就是一个 Client 端连线到 Server 端,等连线完成后双方都回得到一个 Connection Reference,我们就可以透过 Connection Reference 来使用 TCP 的 Function 来做资料的传输。另外一个值得提到的事情是,TCP 的 Server 端是可以允许多个 Client 来同时连线的,因此只要你具备有平行化程式撰写的概念。
你可以让多台 Client 同时连线到 Server 端传输资料做动作,如下图所示。
讲了那么多都还没开始撰写程式,我们先直接来介绍 TCP 的 Function 吧,先把 Server 跟 Client 分开来看,如下方的呈现方式,可以看到 Server 端一开始要先使用 TCP Listen.vi 来等待 Client 的连线,而 Client 端则是使用 TCP Open Connection 来做连线的动作。
详细的来看 Context Help,Server 端的 TCP Listen.vi 左侧必须要设定你的连线 Port,右上方的 Connection ID 会把 Client 连上的 Ref 给丢出来,所以不同的 Client 连上会有不同的 Connection ID。
TCP Open Connection 中必要的设定是左上角的 IP Address (画面左上的 String) 以及 Remote Port 这两个设定,等到连线上了之后一样会在右上方丢出 Connection ID。
在这边先将程式直接完成,上方的迴圈是 Server 的程式,下方是 Client 的程式,两个程式可以放在不同的电脑来执行,测试看看是否有成功的做通讯。当有正常的连线时,一续使用 TCP Read 读取一次资料,并且检查是否要用 TCP Write 送出资料,为了简化问题,所以在 TCP Read 时我特意每次都只读回 1Byte 的资料回来,也就是一个字元。
在这边提一下,在做仪器控制时常常都会有一个接脚叫做 timeout,timeou t的意思是当一定的时间都没有获得我们想要的结果时,就会触发 timeout 并且回传一个错误讯息,也就是说当我使用 TCP Read 时,我必须指定我要读回多少 Bytes 的资料,当我在 timeout 的时间内没有等到足够的资料回传时,就会触发 timeout,所以我在範例中是每次只抓 1Byte 的资料,并且在后方加入一个 Case 来判断是否有发生 timeout,如下方图示。
发生 timeout 时就不把资料加入到 Data 中。
2