From 11:00 PM CDT Friday, May 10 – 02:30 PM CDT Saturday, May 11 (04:00 AM UTC – 07:30 PM UTC), ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
From 11:00 PM CDT Friday, May 10 – 02:30 PM CDT Saturday, May 11 (04:00 AM UTC – 07:30 PM UTC), ni.com will undergo system upgrades that may result in temporary service interruption.
We appreciate your patience as we improve our online experience.
11-04-2014 01:39 PM
@billko wrote:
That's actually very interesting. If Tera Term has a development kit, you might be able to do it yourself.
From what I saw it doesn't! The DLLs shown in the OP are just support DLLs for various UI aspects but not the gist of the applications. The main code for both TeraTerm Pro and the TeraTerm Macro application is directly located in the executable. There is some very limited C++ for some Windows GUI handling but everything else is simply standard C so no ActiveX, .Net or whatever modern Windows functionality either.
In order to use the TeraTerm Pro and Macro as DLL shared library one would have to significantly rearchitect the source code and also change the whole organization of the source files. Not something that is easily done and has a big chance of causing all kinds of breakage. I would estimate the effort to redesign TeraTerm Macro so it can be used as shared library from LabVIEW and other applications in the same order than rewriting the whole functionality as macro executer in LabVIEW. The only thing where you won't get around to use some sort of compiled external code is for the implementation of SSH. Even (T)FTP can be fairly easily implemented in LabVIEW directly and has been at least for FTP already available in the Internet Toolkit although the implementation in there isn't a good example of how to do it.
11-04-2014 02:11 PM
Thanks for the insights Rolf! I do conceide that I am not a Windows framework expert so I don't even dare to start with Visual Studio.
My main interest in Teraterm Macro is the macro/scripting language itself. They are full-featured and has worked for me for many years. I do not want to reinvent those in LabVIEW. If I can somehow pipe LabVIEW controls and indicators to the Teraterm Macro DLL's stdin and stdout then half the effort to implement Teraterm Macro as a LabVIEW plugin is complete - or so I hope.
From what Rolf described the source is a bit convoluted. From what I can observe, the 'Macro' portion of Teraterm does not depend upon the GUI or widget parts of Teraterm terminal program. Macro is a completely independent executable with its own DLLs. You should only re-build that not the whole Teraterm suite in the source code.
Although, you can probably implement all the nice built-in features (RS232, FTP, TFTP, TELNET, SSH, TCP/IP) in LabVIEW, Teraterm Macro already supports all those nicely. If I can only build the functions as statically callable DLL from LabVIEW C function node, that would be awesome!
Cheers!
Aldrin
11-04-2014 08:06 PM
I guess what Rolf is saying is that you can either reinvent it as a dll or reinvent it as LabVIEW code. Either/or, it seems like a rewrite is almost necessary. Ugh.
11-05-2014 04:30 AM
@billko wrote:
I guess what Rolf is saying is that you can either reinvent it as a dll or reinvent it as LabVIEW code. Either/or, it seems like a rewrite is almost necessary. Ugh.
Not a complete rewrite for the DLL but a serious redesign. The problem with this is that it would be programming in C(++) where you don't only have to deal with the actual problem on hand but also about proper memory management and all that stuff, which tends to get tedious and debugging of the actual communication and execution task is very frequently hampered by subtle memory management bugs in your code.
In LabVIEW you would have to start from scratch but you can concentrate on the communication and execution tasks without having to worry about proper memory allocations in the first place. That and the pretty high level APIs that LabVIEW provides make almost any programming task a lot easier in the LabVIEW environment than when programming it in C(++).
11-16-2015 04:42 PM
Hi Relativity,
How can I run a TTL script in the windows command promt? The script can run under the "tera term" console but I cannot run it in the command promt. I'm asking because I would complete command I need to send in the system exe. Please let me know when you have time. Thanks.
Regards,
JP
10-25-2016 03:09 AM
Hi Even,
I am facing a same issue here and was wondering how you finally control Tera Term from labview?
Thanks a lot!
Han
07-21-2019 04:54 PM
Hi Folks,
Sorry for this very, very late follow-up post but my original article got buried under the rubble of articles after NI switched from the old forum and blog system to the current system. I stumbled onto these requests of how I used Teraterm in the command line. I still have no idea how to look-up your own old posts in this new system unless someone replied or kudoed. NI please fix this issue.
Now to try to answer the previous questions. If you didn't know, Teraterm Pro comes in two versions in the same installer package. The serial terminal that you can run as an application in Windows [ttermpro.exe] is used just like any serial terminal like Hyperterm or Putty for doing VT/SSH/TFTP queries. The version of Teraterm you will need to use when scripting from LabVIEW is Teraterm Macro [ttpmacro.exe] These executables are typically installed together from the same ZIP or package installer.
The System Exec node (CMD shell) is used to invoke/call the [ttpmacro.exe] executable and pass the "TTL" script file as the argument. The "cmd /c" option for the System Exec node is optional but here I want the command line window to execute in the background. What I want is the Teraterm macro window dialogs to appear and interact with the operator instead.
One script (included in the ZIP file) is a PING test and I am including here as an example. I have included other script examples to load JFFS and uBoot/uImage images.
Please note that in my setup, I am pulling the image files from a TFTP server in my local network using the TFTP feature of TeraTerm Pro. Doing this in SSH/SCP may be doable but you would need to add a way to send your credentials to the SSH/SCP server. For local provisioning of engineering boards, SSH/SCP may be overkill. Stick to the simpler TFTP. You can actually install the TFTP server in your local PC provisioning machine so the IP address will be localhost or 127.0.0.1
Another important note that I must state: The DUT uses a Linux-based Freescale SoC processor thus needing uBoot, JFFS and uImage provisioned over a BDI RGMII programmer. I am sure this method can be adapted to a Xilinx or Altera setup (if these have no LabVIEW or command line interface included)
; ----------------------------------------- ; | PING test | ; ----------------------------------------- ; Parameters (arguments) and CONSTANTS ; inputbox 'Enter IP Address to PING:' 'Enter IP#' '192.168.1.1xx' ipaddress = inputstr gatewayip = '192.168.1.1' netmask = '255.255.255.0' comport = '/C=3' ; ~~~~~~~~~~~~~~~~ Main ~~~~~~~~~~~~~~~~~~~~ prompt = '1) Power-OFF the CPU board.\n2) Disconnect BDI2000 from CPU board.\n3) Attach COM serial cable to CPU board.\n4) Connect CPU board to LAN.' strspecial prompt messagebox prompt 'Message' ; messagebox 'Now apply power to the CPU board.' 'Message' ; ; command line = 'TERATERM /C=1' (COM1 port) timeout = 30 connect comport ; ;initial boot may take up to a minute to expand JFFS. wait 'Mounting filesystems' if result=0 goto noconnect ; failed to connect or bad COM settings ; prompt = 'Mounting Filesystems.\nThis may take up to a minute on first boot.\nPlease wait...' strspecial prompt statusbox prompt 'Message' ; timeout = 90 wait 'Welcome to Freescale' statusbox 'Logging into Linux...' 'Message' if result=0 goto exitprog ; call ubootprompt ; call login ; call verifylogin ; call delbr2 ; messagebox 'Plug Ethernet to Port 1 of 4-port LAN switch...' 'Message' statusbox 'Wait for LAN port to acquire ARP...' 'Message' call flushipcache wait 'PHY: e0024520:06 - Link is Up - 100/Full' call pingtest wait '-sh-2.05b#' ; messagebox 'Plug Ethernet to Port 2 of 4-port LAN switch...' 'Message' statusbox 'Wait for LAN port to acquire ARP...' 'Message' call flushipcache wait 'PHY: e0024520:06 - Link is Up - 100/Full' call pingtest wait '-sh-2.05b#' ; messagebox 'Plug Ethernet to Port 3 of 4-port LAN switch...' 'Message' statusbox 'Wait for LAN port to acquire ARP...' 'Message' call flushipcache wait 'PHY: e0024520:06 - Link is Up - 100/Full' call pingtest wait '-sh-2.05b#' ; messagebox 'Plug Ethernet to Port 4 of 4-port LAN switch...' 'Message' statusbox 'Wait for LAN port to acquire ARP...' 'Message' call flushipcache wait 'PHY: e0024520:06 - Link is Up - 100/Full' call pingtest wait '-sh-2.05b#' ; ; PING test completed wait '-sh-2.05b#' messagebox 'Gojoseon (CPU) board PING test complete.' 'Message' closett end ; ; ~~~~~~~~~~~~~~~~ Subs ~~~~~~~~~~~~~~~~~~~~ ; Boot and wait for the 'freescale login:' prompt. :ubootprompt timeout = 15 wait 'freescale login:' if result=0 goto exitprog ; send a CR ASCII char x2 send #13 #13 return ; ----------------- ; send username/password :login sendln 'root' pause 1 sendln 'root' return ; ----------------- ; Verify if we are logged-in :verifylogin timeout = 30 call sendcr wait 'sh-2.05b#' if result = 0 goto nologon return :nologon messagebox 'Login not successful.' 'Message' closett end ; ----------------- ; bring BR2 bridge down first prior to TFTP operations ; shutdown bridge :delbr2 statusbox 'Stopping and Deleting IP bridge <BR2>...' 'Message' sendln 'brctl show' pause 2 sendln 'ifconfig br2 down' pause 1 ; delete eth0 and eth1 interfaces sendln 'brctl delif br2 eth0' pause 1 sendln 'brctl delif br2 eth1' pause 1 ; remove bridge entry sendln 'brctl delbr br2' pause 1 ; return ; ----------------- ; clear route table :flushipcache sendln 'ifconfig eth1 down' sendln 'ip route flush cache' ; now manually assign IP to interfaces sendln 'ifconfig eth1 10.10.220.251 netmask 255.255.0.0' ; add route to gateway sendln 'route add default gw ' gatewayip ' dev eth1' ; now bring eth0 and eth1 up. sendln 'ifconfig eth1 up' return ; ----------------- ; PING server :pingtest statusbox 'Sending 10 PING packets.' 'Message' sendln 'ping -c 10 ' ipaddress #10 ; send 10 PING packets statusbox 'PING started. Please wait...' 'Message' wait 'packets transmitted' wait '100% packet loss' '0% packet loss' if result=0 then prompt = 'Some PING packets were not received.\nPlease manually check LAN port.' strspecial prompt statusbox prompt 'Message' goto badping elseif result=1 then prompt = '100% PING packets were not received.\nPlease manually check LAN port.' strspecial prompt statusbox prompt 'Message' elseif result=2 then statusbox 'PING test passed on port.' 'Message' endif ; good ping send #3 ; send CTRL-C send 13 10 return ; bad ping :badping prompt = 'TFTP server PING was not successful.\nPlease check DUT is attached to LAN from ETH0 port.\nAlso check your TFTP server is serving the correct directory.' strspecial prompt messagebox prompt 'Message' closett end ; ----------------- ; allow LAN Phy negotiations to complete :waiteth1 statusbox 'Waiting for 4-Port LAN switch (ETH1) to become active...' 'Message' wait 'br2: port 2(eth1) entering forwarding state' ;wait 'PHY: e0024520:06 - Link is Up - 100/Full' call sendcrkey return ; ----------------- :sendarp arpmsg = 'arping -U' strconcat arpmsg ipaddress sendln arpmsg ; ----------------- :exitprog messagebox 'Timeout reached. Try again...' 'Message' end closett ; ----------------- ; sends CR and LF to DUT :sendcr send 13 10 return ; ----------------- :sendcrkey ; send a CR keyboard char sendkcode 28 1 return ; ----------------- :noconnect prompt = 'Serial port connection failed.\nMake sure Teraterm can access serial port.\nMake sure script COM setting is correct.' strspecial prompt messagebox prompt 'Message' end closett
Cheers!
Enjoy RF Engineering!!
Relativity