Download presentation
Presentation is loading. Please wait.
1
Introduction to Labview
Dawgma Team 1712 Bob Bellini, Paul Gehman
2
Overview What is LabVIEW? What’s new for FRC LabVIEW 2016
Block Diagram and Front Panel References Note that there is something for everybody – new and experienced users will benefit from this presentation.
3
Part 1 What is LabVIEW?
4
LabVIEW Usage in Universities
Basics LabVIEW Usage in Universities 110 Countries 7000+ Universities LabVIEW is used at High Schools, Colleges, and Universities around the world, from technical schools, to PhD programs. learning LabVIEW now will give you a leg up on college applications.
5
Companies that use LabVIEW
After you graduation there will be lots of opportunities to put your LabVIEW skills to use in a huge variety of companies from automotive, aerospace, semiconductor, green energy, food and many other industries. More than 35,000 companies use NI Tools
6
What is LabVIEW? Speak G Go with the flow Easy writing
Graphical programming language used to develop sophisticated measurement, test, and control systems Go with the flow Dataflow programming Easy writing Easy to learn Powerful debugging tools LabVIEW is a graphical programming language – you draw your program. It is easy to learn and use, while also being a powerful, full featured programming language. LabVIEW uses data flow, meaning that a node does not run until it has all the data from previous nodes at its input wires.
7
LabVIEW Programs Are Called Virtual Instruments (VIs)
Each VI has 2 Windows Front Panel User Interface (UI) Controls = Inputs Indicators = Outputs Block Diagram Graphical Code Data travels on wires from controls through functions to indicators Blocks execute by Dataflow LabVIEW is a graphical programming language – you draw your program. It is easy to learn and use, while also being a powerful, full featured programming language. LabVIEW uses data flow, meaning that a node does not run until it has all the data from previous nodes at its input wires. LabVIEW programs are called virtual instruments (VIs). Controls are inputs and indicators are outputs. Each VI contains three main parts: Front Panel – How the user interacts with the VI. Block Diagram – The code that controls the program. Icon/Connector – Means of connecting a VI to other VIs. In LabVIEW, you build a user interface by using a set of tools and objects. The user interface is known as the front panel. You then add code using graphical representations of functions to control the front panel objects. The block diagram contains this code. In some ways, the block diagram resembles a flowchart. Users interact with the Front Panel when the program is running. Users can control the program, change inputs, and see data updated in real time. Controls are used for inputs such as, adjusting a slide control to set an alarm value, turning a switch on or off, or to stop a program. Indicators are used as outputs. Thermometers, lights, and other indicators display output values from the program. These may include data, program states, and other information. Every front panel control or indicator has a corresponding terminal on the block diagram. When a VI is run, values from controls flow through the block diagram, where they are used in the functions on the diagram, and the results are passed into other functions or indicators through wires. Introduction to LabVIEW Hands-On 6 ni.com
8
Dataflow Programming Block diagram execution
Dependent on the flow of data Block diagram does NOT execute left to right Node executes when data is available to ALL input terminals Nodes supply data to all output terminals when done Note – this slide is hidden LabVIEW follows a dataflow model for running VIs. A block diagram node executes when all its inputs are available. When a node completes execution, it supplies data to its output terminals and passes the output data to the next node in the dataflow path. Visual Basic, C++, JAVA, and most other text-based programming languages follow a control flow model of program execution. In control flow, the sequential order of program elements determines the execution order of a program. Consider the block diagram above. It adds two numbers and then multiplies by 2 from the result of the addition. In this case, the block diagram executes from left to right, not because the objects are placed in that order, but because one of the inputs of the Multiply function is not valid until the Add function has finished executing and passed the data to the Multiply function. Remember that a node executes only when data are available at all of its input terminals, and it supplies data to its output terminals only when it finishes execution. In the second piece of code, the Simulate Signal Express VI receives input from the controls and passes its result to the Graph. You may consider the add-multiply and the simulate signal code to co-exist on the same block diagram in parallel. This means that they will both begin executing at the same time and run independent of one another. If the computer running this code had multiple processors, these two pieces of code could run independent of one another (each on its own processor) without any additional coding. © National Instruments Corporation 14 Introduction to LabVIEW Hands-On
9
Controls Palette Right-click on the front panel
Search for controls Right-click on the front panel (not the block diagram) to open the Controls Palette Pin to keep open Browse subpalettes With the Controls Palette, you can access all of the controls and indicators that are placed on the front panel. Right-click on the FRONT PANEL (not the block diagram) to browse the Controls Palette. Use the thumbtack in the top left corner to lock the front panel so it stays open. The modern, silver, classic, and system palettes all have a different look and feel, but they all function the same. You can even create custom controls and indicators using your own graphics. There is a link to a tutorial in the references section.
10
Controls Palette (Controls & Indicators)
Customize Palette View Control: Numeric Note – this slide is hidden Use the Controls palette to place controls and indicators on the front panel. The Controls palette is available only on the front panel. To view the palette, select Window»Show Controls Palette. You also can display the Controls palette by right-clicking an open area on the front panel. Tack down the Controls palette by clicking the pushpin on the top left corner of the palette. Indicator: Numeric Slide © National Instruments Corporation 7 Introduction to LabVIEW Hands-On
11
Search for functions by name
Functions Palette Search for functions by name Right-click on the block diagram (not the front panel) to open the Functions Palette Contains the VIs, functions, and constants you use to create the block diagram FRC-specific palettes include the WPI Robotics Library, FIRST Vision, and PID Open the Functions Palette by right-clicking on the BLOCK DIAGRAM (not the front panel). You can browse through hundreds of functions sorted by type or search directly for a function by name using the search button in the top right corner. When you install the FRC 2015 Update Package, you see a few extra palettes specific to FIRST. The FIRST WPI Robotics Library, Vision, and PID palettes all include functions you need to program your robot.
12
Functions (and Structures) Palette
(Place items on the Block Diagram Window) Note – this slide is hidden Use the Functions palette to build the block diagram. The Functions palette is available only on the block diagram. To view the palette, select Window»Show Functions Palette. You also can display the Functions palette by right-clicking an open area on the block diagram. Tack down the Functions palette by clicking the pushpin on the top left corner of the palette. Structure: While Loop Introduction to LabVIEW Hands-On 8 ni.com
13
LabVIEW Nodes While loop For loop Boolean logic PID Control Arrays
Signal processing Mathematics Timing LabVIEW contains many structures such as the While Loop, For Loop, Case, Sequence, Event, etc. LabVIEW can perform numeric, Boolean, string, and array manipulations. LabVIEW also has extensive libraries for mathematics, signal processing, timing, etc.
14
LabVIEW Data Types Floating point Integer Boolean String
Array – note wire thickness Cluster Note wire color, style, and thickness represent the different types
15
LabVIEW Tasks Multiple tasks in parallel Data flow still applies
Loops 1, 2, and 3 will run Loop 4 runs after 3 stops
16
FRC Vision and Robotics Palettes
Vision – manage and analyze images WPI Robotics – Robot Drive, Sensors, Actuators, I/O, Driver Station, Camera, Communications, Utilities. This contains most of what you will use to program your robot. Show these in LabVIEW. Briefly look at the WPI Robotics sub palettes. While these are FRC specific, other palettes are also useful: Structures, Array, Numeric, Boolean, String, Comparison, Timing, etc. In LabVIEW, do a palette search with context help window open. Notice how it shows individual VIs/functions as well as sub palettes.
17
Debugging Techniques Click on broken Run button.
Finding Errors Execution Highlighting Probes Click on broken Run button. Window showing error appears. Click on Execution Highlighting button; data flow is animated using bubbles. Values are displayed on wires. Right-click on wire to display probe and it shows data as it flows through wire segment. You can also select Probe tool from Tools palette and click on wire. When your VI is not executable, a broken arrow is displayed in the Run button in the palette. Finding Errors: To list errors, click on the broken arrow. To locate the bad object, click on the error message. Execution Highlighting: Animates the diagram and traces the flow of the data, allowing you to view intermediate values. Click on the light bulb on the toolbar. Probe: Used to view values in arrays and clusters. Click on wires with the Probe tool or right-click on the wire to set probes. Retain Wire Values: Used in conjunction with probes to view the values from the last iteration of the program. Breakpoint: Set pauses at different locations on the diagram. Click on wires or objects with the Breakpoint tool to set breakpoints. Introduction to LabVIEW Hands-On 15 ni.com
18
Context Help Window Help»Show Context Help or press <Ctrl+H>
Hover cursor over object to update window Additional Help Right-Click on the VI icon and choose Help, or Choose “Detailed Help.” on the context help window The Context Help window displays basic information about LabVIEW objects when you move the cursor over each object. Objects with context help information include VIs, functions, constants, structures, palettes, properties, methods, events, and dialog box components. To display the Context Help window, select Help»Show Context Help, press the <Ctrl+H> keys, or press the Show Context Help Window button in the toolbar Connections displayed in Context Help: Required – bold Recommended – normal Optional – dimmed Additional Help VI, Function, & How-To Help is also available. Help» VI, Function, & How-To Help Right-click the VI icon and choose Help, or Choose “Detailed Help.” on the context help window. LabVIEW Help – reference style help Help»Search the LabVIEW Help… Introduction to LabVIEW Hands-On 16 ni.com
19
FRC Version of LabVIEW RoboRIO custom designed for robot control
Vision and Robotics palettes FRC Getting Started Window Wizards to create robot and dashboard code FRC specific examples FRC specific tutorials Each topic is explained in following slides.
20
roboRIO New controller for FRC 2015-2019 USB Webcam / Flash drive …
Setup roboRIO New controller for FRC USB Programming / Deployment USB Webcam / Flash drive … Zip Tie Mounting Holes CAN Support RS-232 / I²C / SPI serial interfaces Eliminates Digital Sidecar Dual Core Processor MXP Custom Electronics Expansion Port roboRIO was designed by National Instruments specifically for FRC. It is packed with features that should make it easier for teams to build more advance robots with a larger variety of inputs. Every team should receive a donated roboRIO in the Kick Off Kit and spare controllers are available from AndyMark. If you have detailed questions or want to learn more about the specifications please visit the roboRIO page on ni.com/frc Built-In Accelerometer Designed for FRC User Button
21
Specs include cRIO, modules, and 2 digital sidecars
Setup roboRIO vs cRIO Controller cRIO FRC II roboRIO Processor Freescale 5125 400MHz PPC Xilinx Zynq 7020 667Mhz dual-core ARM Cortex-A9 OS VxWorks Linux with Real-Time Extensions RAM 128MB 256MB Disc 512MB Volume 110 in³ * 30 in³ Mass 60oz * 10oz Price $689 * $435 Compared with cRIO the roboRIO is significantly faster, smaller, lighter, and less expensive. Specs include cRIO, modules, and 2 digital sidecars
22
Part 2 What’s new for FRC LabVIEW 2016
23
What’s new for FRC LabVIEW 2016
Based on LabVIEW 2015 Robot Simulation Supports NI RoboRIO & cRIO II (not 8 bay cRIO) Updated Driver Station Joystick LED—lets you know if joysticks are not plugged in. Test Mode allows you to run custom test code. Driver Station Log Viewer improved to log more data. Also can now be run from the Start menu. Dashboard Type lets you choose the programming language of your dashboard. The default is LabVIEW. New WPI Robotics Library Vis Updated Driver Station Updated Dashboard New Examples New Tutorials Bullets 2, 3 and 4 are discussed in separate presentations The rest have slides
24
New Palette VIs Get Robot Battery Voltage Report Robot Code State
Kinect VIs Camera Loop VIs Compressor Loop VI For Kinect, the Joystick Open VI now has additional items Kinect 1 and Kinect 2 in the JoystickDevice list.
25
Driver Station Charts tab – performance and logging
Log Viewer – C:\Program Files\FRC Driver Station Driver Station Log File Viewer.exe Kinect Status Space bar = E-Stop Charts Tab—allows you to enhance your code performance, and therefore your robot performance, by showing how and when your robot code runs, how your code uses control system resources, and how your code responds to information sent from the FRC Field Management System (FMS). Driver Station Log Viewer—displays data logs from the driver station. You can open this viewer from the C:\Program Files\FRC Driver Station directory. The log files are saved in C:\Users\Public\Documents\FRC\Log Files Kinect Status—allows you to see whether the robot is connected to the Kinect device and the status of the Kinect device. Space bar E-Stop Functionality—requires you to use the keyboard space bar to immediately shut off all power to your robot. Use the <Enter> key to disable the robot. The old USB E-Stop button is no longer used.
26
Dashboard Kinect Skeleton Tab – displays skeleton image
Camera Image Tab – now uses mjpeg file type Kinect Skeleton Tab—displays the image from the Kinect device. Camera Image Tab—uses the .mjpeg file type for better image performance.
27
New Examples EZ1 MB1010 Sonar – Analog EZ1 MB1010 Sonar – Digital
CAN Motor CAN Speed Control CAN Tank Drive CAN Position Control CAN Current Control
28
Part 3 Block Diagram and Front Panel
29
Block Diagram and Front Panel
Indicator Indicator Control Control
30
Controls Palette
31
First Robotics Library
Functions Palette First Vision Library First Robotics Library
32
Position / Size / Select
Tools Palette Position / Size / Select Edit Text Operate Value Wire Tool Scroll Window Probe Data
33
Building the Block Diagram
Block Diagram Terminals Exchange data between the front panel and the block diagram Controls Front Panel Block Diagram Indicators Block Diagram Front Panel Data Types Floating Point Numeric Integer Numeric Enumerated Boolean String Array Etc Colors indicate data type
34
Building the Block Diagram
Block Diagram Nodes Functions – Built in execution elements, comparable to operators, functions, or statements. SubVIs — VIs used on the block diagram of another VI, comparable to subroutines. Express VIs—SubVIs designed to aid in common measurement tasks. You configure an Express VI using a configuration dialog box. Structures—Execution control elements, such as For Loops, While Loops, Case structures, Flat and Stacked Sequence structures, Timed structures, and Event structures.
35
Building the Block Diagram
Wires Color and size indicate data type Connect between terminals on nodes Cursor changes to wire spool Mouse over terminal to determine type Broken wires appear as dashed black line with red X Incompatible data types Mouse over wire to determine error Triple click wire and press delete to remove Right click wire for additional options
36
Building the Block Diagram
Block Diagram Data Flow The flow of data rather than the sequential order of commands determines the execution order of block diagram elements. create block diagrams that have simultaneous operations run two For Loops simultaneously and display the results on the front panel, as shown
37
Building the Block Diagram
Running Vis Run button - VI is ready to run Run button changes to a darkened arrow, shows that the VI is running. VI contains errors Click the broken Run button or select View»Error List to find out why a VI is broken
38
Building the Block Diagram
Loops and Structures graphical representations of the loops and case statements of text-based programming languages. distinctive, resizable border to enclose the section of the block diagram that executes For Loop—Executes a subdiagram a set number of times. While Loop—Executes a subdiagram until a condition occurs. Case structure—Contains multiple subdiagrams, only one of which executes depending on the input value passed to the structure.
39
Building the Block Diagram
For Loop A For Loop, shown as follows, executes a subdiagram a set number of times. The value in the count terminal (an input terminal), specifies how many times to repeat the subdiagram. Set the count explicitly by wiring a value from outside the loop to the left or top side of the count terminal, The iteration terminal (an output terminal), shown as follows, contains the number of completed iterations.
40
Building the Block Diagram
While Loop executes a subdiagram until a condition occurs. The While Loop executes the subdiagram until the conditional terminal, an input terminal, receives a specific Boolean value. The default behavior and appearance of the conditional terminal is Stop if True change the behavior and appearance of the conditional terminal by right-clicking the terminal or the border of the While Loop and selecting Continue if True
41
Building Arrays With Loops
Auto-Indexing Enabled Wire becomes thicker Loops can accumulate arrays at their boundaries with auto-indexing For Loops auto-index by default While Loops output only the final value by default Right-click tunnel and enable/disable auto-indexing 1D Array Auto-Indexing Disabled Wire remains the same size For Loops and While Loops can index and accumulate arrays at their boundaries. This is known as auto-indexing. The indexing point on the boundary is called a tunnel The For Loop is auto-indexing-enabled by default The While Loop is auto-indexing-disabled by default Examples Enable auto-indexing to collect values within the loop and build the array. All values are placed in the array upon exiting the loop. Disable auto-indexing if you are interested only in the final value. The index tunnels also work in reverse if you want to input an array and read one value on each iteration. Only one value (last iteration) is passed out of the loop 5
42
Shift Register: Access Previous Loop Data
Available at left or right border of loop structures Right-click the border and select Add Shift Register Right terminal stores data on completion of iteration Left terminal provides stored data at beginning of next iteration Use for next iteration Initial Value Shift registers transfer data from one iteration to the next: Right-click on the left or right side of a For Loop or a While Loop and select Add Shift Register. The right terminal stores data at the end of an iteration. Data appears at the left terminal at the start of the next iteration. A shift register adapts to any data type wired into it. An input of 0 results in an output of 5 on the first iteration, 10 on the second iteration, and 15 on the third iteration. Said another way, shift registers are used to retain values from one iteration to the next. They are valuable for many applications that have memory or feedback between states. See Help»Search the LabVIEW Help… for more information.
43
Building the Block Diagram
Case Structures two or more subdiagrams or cases. Only one subdiagram is visible at a time, and the structure executes only one case at a time. An input value determines which subdiagram executes. The case selector label at the top of the Case structure, contains the name of the selector value
44
Building the Block Diagram
Developing a program What do you want to accomplish? What do you want to outcome(s) to be? What resources (inputs) do you need? Develop a flowchart Write the code Observe the program to verify the operation
45
FRC 2016 Getting Started Window
Select FRC RoboRIO Project Wizards to create robot and Dashboard code (next slide) Message to update software if needed Find FRC Examples… We’ll look at what’s new in the next section of this presentation
46
Create Project Screen Make sure you know where your files are going!
Remember to enter your team number! Click Finish Select the type of drive your are using!
47
FRC Project Explorer Expand the Team Code to view individual VIs
Special Interest: Vision Processing Make note of the Teleop, Autonomous and Periodic Tasks
48
Basic Robot Main.vi Front Panel
Press <CTRL>-E to view Block Diagram Or Window “Show Block Diagram”
49
Basic Robot Main.vi Block Diagram
50
Choose between Jaguar, Victor or Talon motor controller
Basic Robot Begin.vi Boolean Constant Open 2 Motor Drive VI Enum Constant Choose between Jaguar, Victor or Talon motor controller Joystick open VI
51
Basic Teleop.vi Arcade Drive
Joystick – Get Axis (Read the joystick) Where is the loop? Arcade Drive VI Common Joystick reference Publish the Robot Drive Motor values to the dashboard Why is there no loop? Select the Axis to read from the joystick Axis 1 X Axis (Left / Right) Axis 2 Y Axis (Fwd / Rev)
52
Tank Drive Example Tank Drive VI Joystick open VI Open 2 Motor Drive
This is an example from the examples. It has all of the elements to open the devices (Joystick and motors) that would normally be found in the Begin VI. These examples can be used to build your Vis in the FRC framework. Joystick – Get Axis (Read the joystick)
53
PID PID is one method of closed loop control
Proportional integral derivative An algorithm used in a control feedback loop to regulate a process such as the motion of a motor or the flow through a valve Output feeds back into the input (closed-loop control) PID control is a fundamental engineering tool that you can use to control dynamic movements smoothly and efficiently. PID is a common form of “closed-loop feedback,” meaning the input is set based on the current output. To use PID, you need to be able to monitor the output, for instance, a potentiometer or encoder that can detect rotation.
54
PID in LabVIEW NI Example Finder»General PID Simulator.vi Setpoint
Shift register required for PID Coefficients set on front panel Here is an example from the NI Example Finder called General PID Simulator.vi. NI Example Finder»General PID Simulator.vi
55
PID Example Try the PID Simulator example.
Setpoint If you are new to the concept of pulse-width modulation (PWM), I recommend playing around with the PID Simulator example. Search “PID” in the example finder and select “General PID Simulator” to evaluate your ability to tune the P, I, and D coefficients to optimize the changes shown on the graph. PID coefficients NI Example Finder»General PID Simulator.vi
56
Building a Stand Alone Application to Deploy to the Robot
Program deployed to RoboRIO and available on power-up without computer 14 Step procedure – follow it carefully!!! Refer to Tutorial #4 within Labview Getting Started
57
Tutorials
58
Tutorials Set up RoboRIO Custom Dashboard Set up Axis Camera
Set up Robot Radio Develop Robot Project Editing Team Code Custom Dashboard Integrating Examples Integrating Vision Robot Simulation Getting started with CAN Many existing tutorials. Two new tutorials: Integrating Vision into Robot Code CAN Jaguar Fundamentals
59
FRC Examples Find FRC Examples
60
FRC Specific Examples !!! There are over 50 FRC specific examples – more added every year They tell you what to configure before running, and what can be changed while running. They all include wiring diagrams to aid in setting up and troubleshooting your electrical system – even if you don’t program in LabVIEW!
61
Radio Configuration tool
Utilities RoboRIO Imaging tool Setup Axis Camera tool Radio Configuration tool cRIO Imaging tool
62
RoboRIO Imaging tool Connect RoboRIO with a USB cable
Select “Format Target” and then choose which Image to load Then click “Reformat”
63
cRIO Imaging Tool Works for both: Same image for both
NI cRIO-FRC NI cRIO-FRC II Same image for both Shows installed modules cRIO switches: Read NI cRIO-FRC Read/Write NI cRIO-FRC II The cRIO Imaging Tool works for both the NI cRIO-FRC (8-slot) and the NI cRIO-FRC II (4-slot) controller. The same image is used for both controllers. The tool unzips the image and installs the appropriate files. The picture matches which controller is chosen. It also shows installed modules and whether or not they are in the correct slot. Hovering your mouse over each module gives more information. For the NI cRIO-FRC, the hardware switch values of the controller are read for convenience. They are greyed out and cannot be changed from the imaging tool. For the NI cRIO-FRC II, the controller switches are software based. They are read by, and can be set from the imaging tool. Notice that while the imaging tool shows 5 switches for each controller, they are not all the same. The USER1 switch is a physical switch that can be read by an RT application (your robot code), and it only exists on the 8-slot controller. The NO FPGA switch exists on both controllers, but its value cannot be read from the 8-slot controller – it is wired directly to the FPGA. Finally, the IP RESET switch is disabled for the 4-slot controller because turning it on would change the controller’s address on reboot causing the imaging tool to fail.
64
cRIO Imaging Tool Works for: Shows installed modules cRIO switches:
NI cRIO-FRC II Shows installed modules cRIO switches: Read/Write NI cRIO-FRC II The cRIO Imaging Tool works for both the NI cRIO-FRC (8-slot) and the NI cRIO-FRC II (4-slot) controller. The same image is used for both controllers. The tool unzips the image and installs the appropriate files. The picture matches which controller is chosen. It also shows installed modules and whether or not they are in the correct slot. Hovering your mouse over each module gives more information. For the NI cRIO-FRC, the hardware switch values of the controller are read for convenience. They are greyed out and cannot be changed from the imaging tool. For the NI cRIO-FRC II, the controller switches are software based. They are read by, and can be set from the imaging tool. Notice that while the imaging tool shows 5 switches for each controller, they are not all the same. The USER1 switch is a physical switch that can be read by an RT application (your robot code), and it only exists on the 8-slot controller. The NO FPGA switch exists on both controllers, but its value cannot be read from the 8-slot controller – it is wired directly to the FPGA. Finally, the IP RESET switch is disabled for the 4-slot controller because turning it on would change the controller’s address on reboot causing the imaging tool to fail.
65
Axis Camera Setup Tool Connection choice Directions Troubleshooting
The new Setup Axis Camera Tool allows you to configure your camera to be connected directly to the robot radio. This is the configuration that must be used for the NI cRIO-FRC II (4-slot) controller. It is also the default expected by the robot framework code. However, you can also configure your camera for Ethernet port 2 of the 8-slot cRIO controller. The new tool has directions on the front panel, so you don’t have to find them in a manual. The new tool includes troubleshooting information to make sure your PC and camera can communicate. The Camera not found? button brings up a dialog with a list of local IP configuration settings for your PC. This is useful if the Camera found LED is not on.
66
Part 5 References
67
References JOIN+VISIT: UserID and Pwd --- PLEASE --- BY JANUARY 5th!!!!!!! FIRST (FRC: First Robotics Competition) Chief Delphi National Instruments: Getting Started with the LabVIEW™ Worcester Polytechnic Institute (WPI) TRAIN: Labview Application Tutorials Labview Introduction videos (Classics: circa ;) (Classics: circa ;) Labview Code Snippets Technical Resources -> Control System (left hand side) -> FRC Control System – 2009-present -> Programming -> Labview Programming
68
FRCMastery / LVMastery Tipjars
69
Team 358
70
Team 358
71
NI Software on a Thumb Drive
NI LabVIEW for FRC installs from a thumb drive Extra 3.5 GB partition for team use
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.