Labview Automatic Measurement Examples
Hi I'm totally new to the Labview..
The Equipment I have are Signal Generator, Spectrum Analyser, Network Analyser, Oscilloscope and so on.. I have already connected the GPIB cables to all the equipment and the equipment are able to be reconised under the MAX.. My question is there any simple examples on the Labview that I can refer to so as to control the equipment from the laptop
Maybe for eg: changing the Frequency on the Spectrum Analyzer using the Labview program on the laptop and getting the results on the laptop screen..
This would be a great start for me
Thanks
I could only find drivers written for the E3631A and E4443A (from the instrument download section). You can use these as the template to write for the others. Another choice is to use the manuals. Take the command sections, and put them in a spreadsheet(tree format) each model having its on page. Then use a state machine to retrieve the correct command. See example
Attachments:
GPIB_Example.zip 540 KB
Similar Messages
-
IV measurement example for PCI-MIO-16XE-10
Is there Labview IV measurement examples for PCI-MIO-16XE-10 board ? I'm especially interested in producing the clean voltage out from the board. I'm seeing 10 meV noise in the analog voltage output.
Hello,
Reading the generated voltage with one of the anlaog input channels is the most recommended way to see if your board is giving an offset.
I would also recommend to run the E-Series Calibrate VI. You can find this VI in the LV Functions Palette: Data Acquisition>>Calibration and Configuration. In the following link you will find an example that shows how to do this.
Calibrate and E-Series Board using Internal Voltage Reference
Good luck with your application! -
Automatic measures only in 1 color ink (script modification)
Hi all,
I would need to modify this script so that put the measure already in es.. PANTONE Pantone 485 (solid coated),
I need to change this string, but do not know how...
thanks very much
// measurement line color
var color = new RGBColor; how to change it, to put ink pantone ....?
color.green = 255;
color.blue = 0;
* Description: An Adobe Illustrator script that automates measurements of objects. This is an early version that has not been sufficiently tested. Use at your own risks.
* Usage: Select 1 to 2 page items in Adobe Illustrator, then run this script by selecting File > Script > Other Scripts > (choose file)
* License: GNU General Public License Version 3. (http://www.gnu.org/licenses/gpl-3.0-standalone.html)
* Copyright (c) 2009. William Ngan.
* http://www.metaphorical.net
// Create an empty dialog window near the upper left of the screen
var dlg = new Window('dialog', 'Spec');
dlg.frameLocation = [100,100];
dlg.size = [250,250];
dlg.intro = dlg.add('statictext', [20,20,150,40] );
dlg.intro.text = 'First select 1 or 2 items';
dlg.where = dlg.add('dropdownlist', [20,40,150,60] );
dlg.where.selection = dlg.where.add('item', 'top');
dlg.where.add('item', 'bottom');
dlg.where.add('item', 'left');
dlg.where.add('item', 'right');
dlg.btn = dlg.add('button', [20,70,150,90], 'Specify', 'spec');
// document
var doc = activeDocument;
// spec layer
try {
var speclayer =doc.layers['spec'];
} catch(err) {
var speclayer = doc.layers.add();
speclayer.name = 'spec';
// measurement line color
var color = new RGBColor;
color.green = 255;
color.blue = 0;
// gap between measurement lines and object
var gap = 2;
// size of measurement lines.
var size = 10;
// number of decimal places
var decimals = 0;
// pixels per inch
var dpi = 72;
Start the spec
function startSpec() {
if (doc.selection.length==1) {
specSingle( doc.selection[0].geometricBounds, dlg.where.selection.text );
} else if (doc.selection.length==2) {
specDouble( doc.selection[0], doc.selection[1], dlg.where.selection.text );
} else {
alert('please select 1 or 2 items');
dlg.close ();
Spec the gap between 2 elements
function specDouble( item1, item2, where ) {
var bound = new Array(0,0,0,0);
var a = item1.geometricBounds;
var b = item2.geometricBounds;
if (where=='top' || where=='bottom') {
if (b[0]>a[0]) { // item 2 on right,
if (b[0]>a[2]) { // no overlap
bound[0] =a[2];
bound[2] = b[0];
} else { // overlap
bound[0] =b[0];
bound[2] = a[2];
} else if (a[0]>=b[0]){ // item 1 on right
if (a[0]>b[2]) { // no overlap
bound[0] =b[2];
bound[2] = a[0];
} else { // overlap
bound[0] =a[0];
bound[2] = b[2];
bound[1] = Math.max (a[1], b[1]);
bound[3] = Math.min (a[3], b[3]);
} else {
if (b[3]>a[3]) { // item 2 on top
if (b[3]>a[1]) { // no overlap
bound[3] =a[1];
bound[1] = b[3];
} else { // overlap
bound[3] =b[3];
bound[1] = a[1];
} else if (a[3]>=b[3]){ // item 1 on top
if (a[3]>b[1]) { // no overlap
bound[3] =b[1];
bound[1] = a[3];
} else { // overlap
bound[3] =a[3];
bound[1] = b[1];
bound[0] = Math.min(a[0], b[0]);
bound[2] = Math.max (a[2], b[2]);
specSingle(bound, where );
spec a single object
@param bound item.geometricBound
@param where 'top', 'bottom', 'left,' 'right'
function specSingle( bound, where ) {
// width and height
var w = bound[2]-bound[0];
var h = bound[1]-bound[3];
// a & b are the horizontal or vertical positions that change
// c is the horizontal or vertical position that doesn't change
var a = bound[0];
var b = bound[2];
var c = bound[1];
// xy='x' (horizontal measurement), xy='y' (vertical measurement)
var xy = 'x';
// a direction flag for placing the measurement lines.
var dir = 1;
switch( where ) {
case 'top':
a = bound[0];
b = bound[2];
c = bound[1];
xy = 'x';
dir = 1;
break;
case 'bottom':
a = bound[0];
b = bound[2];
c = bound[3];
xy = 'x';
dir = -1;
break;
case 'left':
a = bound[1];
b = bound[3];
c = bound[0];
xy = 'y';
dir = -1;
break;
case 'right':
a = bound[1];
b = bound[3];
c = bound[2];
xy = 'y';
dir = 1;
break;
// create the measurement lines
var lines = new Array();
// horizontal measurement
if (xy=='x') {
// 2 vertical lines
lines[0]= new Array( new Array(a, c+(gap)*dir) );
lines[0].push ( new Array(a, c+(gap+size)*dir) );
lines[1]= new Array( new Array(b, c+(gap)*dir) );
lines[1].push( new Array(b, c+(gap+size)*dir) );
// 1 horizontal line
lines[2]= new Array( new Array(a, c+(gap+size/2)*dir ) );
lines[2].push( new Array(b, c+(gap+size/2)*dir ) );
// create text label
if (where=='top') {
var t = specLabel( w, (a+b)/2, lines[0][1][1] );
t.top += t.height;
} else {
var t = specLabel( w, (a+b)/2, lines[0][0][1] );
t.top -= t.height;
t.left -= t.width/2;
// vertical measurement
} else {
// 2 horizontal lines
lines[0]= new Array( new Array( c+(gap)*dir, a) );
lines[0].push ( new Array( c+(gap+size)*dir, a) );
lines[1]= new Array( new Array( c+(gap)*dir, b) );
lines[1].push( new Array( c+(gap+size)*dir, b) );
//1 vertical line
lines[2]= new Array( new Array(c+(gap+size/2)*dir, a) );
lines[2].push( new Array(c+(gap+size/2)*dir, b) );
// create text label
if (where=='left') {
var t = specLabel( h, lines[0][1][0], (a+b)/2 );
t.left -= t.width;
} else {
var t = specLabel( h, lines[0][0][0], (a+b)/2 );
t.left += size;
t.top += t.height/2;
// draw the lines
var specgroup = new Array(t);
for (var i=0; i<lines.length; i++) {
var p = doc.pathItems.add();
p.setEntirePath ( lines[i] );
setLineStyle( p, color );
specgroup.push( p );
group(speclayer, specgroup );
Create a text label that specify the dimension
function specLabel( val, x, y) {
var t = doc.textFrames.add();
t.textRange.characterAttributes.size = 8;
t.textRange.characterAttributes.alignment = StyleRunAlignmentType.center;
var v = val;
switch (doc.rulerUnits) {
case RulerUnits.Inches:
v = val/dpi;
v = v.toFixed (decimals);
break;
case RulerUnits.Centimeters:
v = val/(dpi/2.54);
v = v.toFixed (decimals);
break;
case RulerUnits.Millimeters:
v = val/(dpi/25.4);
v = v.toFixed (decimals);
break;
case RulerUnits.Picas:
v = val/(dpi/6);
var vd = v - Math.floor (v);
vd = 12*vd;
v = Math.floor(v)+'p'+vd.toFixed (decimals);
break;
default:
v = v.toFixed (decimals);
t.contents = v;
t.top = y;
t.left = x;
return t;
function setLineStyle(path, color) {
path.filled = false;
path.stroked = true;
path.strokeColor = color;
path.strokeWidth = 0.5;
return path;
* Group items in a layer
function group( layer, items, isDuplicate) {
// create new group
var gg = layer.groupItems.add();
// add to group
// reverse count, because items length is reduced as items are moved to new group
for(var i=items.length-1; i>=0; i--) {
if (items[i]!=gg) { // don't group the group itself
if (isDuplicate) {
newItem = items[i].duplicate (gg, ElementPlacement.PLACEATBEGINNING);
} else {
items[i].move( gg, ElementPlacement.PLACEATBEGINNING );
return gg;
dlg.btn.addEventListener ('click', startSpec );
dlg.show();Sambaflex schrieb:
… ALL attributes with track and filling overprint …
use:
t.textRange.characterAttributes.overprintFill = true;
and:
path.strokeOverprint = true;
Sambaflex schrieb:
… Now I also need to put the words and two arrows in pantone .... is it possible? …
Partially.
You can change this lines:
function setLineStyle(path, color) {
path.filled = false;
path.stroked = true;
add this:
path.strokeColor = color;
path.strokeOverprint = true;
path.strokeWidth = 0.5;
return path;
and here:
function specLabel( val, x, y) {
var t = doc.textFrames.add();
t.textRange.characterAttributes.size = 8;
t.textRange.characterAttributes.alignment = StyleRunAlignmentType.center;
add this:
t.textRange.characterAttributes.fillColor = color;
t.textRange.characterAttributes.overprintFill = true;
Not so easy are IMHO the arrows.
You can apply a graphic style with arrows. (The style must be exist in your document.)
The other way is to draw an arrow (triangle) like this:
http://forums.adobe.com/message/5728992#5728992
and move it to the beginning of the line, then duplicate, rotate and move to the end of the line.
Hope, this will help you. -
LabVIEW/SignalExpress: How can I automate measuring the time between two pulses?
Hi everyone, bit of a newbie here so please bear with me.
I'm a student at a university conducting a muon decay experiment with an oscilloscope connected to some photomultipliers. To summarize, if a muon enters the detector it will create a very small width pulse (a few ns). Within a period of 10µs it may decay, creating a second pulse. The oscilloscope triggers on the main pulse 5-15 times per second, and a decay event happens roughly 1-2 times per minute. I am trying to collect 10 hours of data (roughly 1500-2000 decay events) and measure the time it takes for each decay.
I've been able to set recording conditions in SignalExpress that starts recording on the first pulse and stops recording on the last. The Tektronix TDS 1012 oscilloscope however feeds 2500 points of data from this snapshot into a text file (for use in excel or other software). Even if I perfectly collected the data, I would have 100,000+ data points and it would be too much to handle. I don't know how (or if it's possible) to reduce the sample size.
To conclude, using Labview or SignalExpress, I would like to be able to have the software
1. Differentiate between the single pulse detections and double pulse decay events
2. Record only when two pulses appear on the oscilloscope
3. Measure the time between these two pulses and ONLY that to minimize the amount of data recorded.
Any help would be GREATLY appreciated, thanks!Hi wdavis8,
I am not that familiar with Tektronix, but there should be a place in the dialog that you go through when you create the action step to acquire date to specify a sampling rate. That would allow you to reduce the number of data points you are seeing, but may reduce the quality of the data.
If it’s just a matter of that much data being hard to dig through when you have that many points, you could do some analysis on the data after the fact, and then create a new file with only the data you want to look at. For example, you could identify the peaks in the data, and based on the distance between them or the difference in magnitude, selectively write data to a new file.
Here is some information about peak detection in LabVIEW:
http://www.ni.com/white-paper/3770/en/
You could also do some downsampling on the data to get fewer data points:
https://decibel.ni.com/content/docs/DOC-23952
https://decibel.ni.com/content/docs/DOC-28976
Those are just a few quick ideas.
Kelsey J
Applications Engineer -
I have a usb-6363 DAQ and a J-type non-contact thermocouple that I am looking to connect and measure temperature through. However, the DAQ does not have any T/C inputs, which is needed to measure in the thermocouple temperature. I am connecting the thermouple to an analog input (+/-) and I am not looking to buy an amplifier, converter or any other hardware. I believe there is a way to program labview to read in the voltages of the thermocouple and convert it into accurate temperature readings. Any help/ideas?
Hello George,
This tutorial should step you through the basic process of configuring the device and connecting the thermocouple:
Tutorial: Connect Thermocouples to a Data Acquisition (DAQ) Device
http://www.ni.com/gettingstarted/setuphardware/dataacquisition/thermocouples.htm#Connecting a Thermocouple to Your Device
From there, there are a number of things you can do- I'd recommend taking a look at the LabVIEW shipping examples (Help>>Find Examples...) as well as the DAQmx getting started tutorials:
Getting Started with NI-DAQmx: Main Page
http://www.ni.com/white-paper/5434/en
At first glance, the 6363 you're using should have enough resolution to acquire usable data from a thermocouple- if you attempt reading raw voltages be sure that the acquisition range is configured for +/- 0.1V, though.
Regards,
Tom L. -
I was wondering is LabVIEW can be used to measure throughput of the ethernet connection between 2 computers. Data in Mbps such as uplink and downlink on the connection.
ThanksI've included a link to an article for determining the maximum TCP/IP transfer rate in LabVIEW. You can download the example that is included in the article. This example VI measures the communication from a real-time target to a host PC, so you'll need modify it for your application. Please let me know if you have anymore questions, thanks!
Measuring the Maximum Amount of Data Sent Out of a Real-Time Target Device -
Automation with labview - Frequency Measurements
I'm trying to automate capturing resonance of a material. My current setup is this:
I have a plate with magnets attached to a material. There are coils around the magnets.
I have an accelerometer attached to the plate
I have a sony 5 channel amp that gives voltage to the coils which then excite the magnets which excite the accelerometer.
I read the acceleration output on multimeter.
I have an analog Global Specialties function generator that I sweep with
I find the frequency with the FG, at the peak accelerometer voltage, and I get a resonant frequency.
In addition, I have:
I have a NI-9174 with 4 slots.
I have a NI-9104
I have a NI 9215
My question is. Can I take the analog FG out of the equation and use labview to produce a sinewave which will then be powered to the coils? I want to automate this process where I can set a schedule and it'll sweep and find my peak acceleration.
I'm A CLAD at best ,so a starting point would be nice. First, do I have the capabilty to automate this with the hardware I have? If I do, how would I go about setting up a virtual FG to replace my old dinosaur analog FG?
I'd appreciate any input! Thanks guys.
I have yet to get an AO module...my typical frequency range is 15-120hz while inputing 9mv-20v. The analog FG I have is a Global Specialites 200khz 2001a. Seeing that I'm trying to do this without it, I didn't think that was pertinent.
-
How to use labView to measure temperature using a thermistor
I'm trying to create a labView that will give a temperature reading based on a circuit using a thermistor. Any ideas on the VI or how to construct the circuit would be helpful!
Well, you need to generate a voltage. You also need a way to read that voltage. Do you have a meter, or a DAQ device?
Temperature Measurements with Thermistors: How-To Guide
As for other circuits, the internet is a good place to search. Have you tried? Here's a couple of places:
http://www.discovercircuits.com/T/therm.htm
http://www.facstaff.bucknell.edu/mastascu/elessonsHTML/Sensors/TempR.html
http://www.ecircuitcenter.com/Circuits/therm_ckt1/therm_ckt1.htm -
Error BFFF009E, using any Labview serial port example, on Windows 2000
I am using LabView 7 Express on a Windows 2000 computer. I have tried all the examples provided (loop back, Basic_Serial_Write_and-Read.vi, .... All the examples result in an immediate error of BFFF009E.
hello,
Check this link out:
How Do I Resolve VISA Error -1073807202 (0xBFFF009E)?
regards,
Cyril Bouton
Active LabVIEW Developper -
C++ in Labview 5.1 examples....
Hi all,
I'm after straight forward examples and code showing how to include C++
code in labview 5.1
I have access to MS Dev Studio 6 Pro, and am familliar with C++ but not DLL
creation.
The supplied "Hostname" example will not compile in a (C++) DLL workspace,
I've fixed some basic problems with variable types and linking to the
"LabVIEW\CINTOOLS\extcode.h" header but now I get:
LVDLL.cpp
Linking...
Creating library Debug/LVDLL.lib and object Debug/LVDLL.exp
LVDLL.obj : error LNK2001: unresolved external symbol _DSSetHandleSize
Debug/LVDLL.dll : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
LVDLL.dll - 2 error(s), 0 warning(s)
Any ideas?
commenting-out the offending line means the DLL will
compile, but it looks
kind of important!
Thanks in advance,
Peter Reeves-HallThere is a document in the National Intruments knowledge base at
http://www.ni.com that describes the particulars of this problem
Search for doc# 1QL9MVJ6
* Sent from RemarQ http://www.remarq.com The Internet's Discussion Network *
The fastest and easiest way to search and participate in Usenet - Free! -
Hello. My name is Alex here.
I am now facing a difficulty in creating a Labview diagram whereby the voltage that been created needed to be converted into centimeters.
I have been researching in the internet but to no avail. I need help in creating the diagram. Im using NI DAQ USB-6009 for the sensor and already wrote down the measurement.
Please help me. Thank youYou can use the attached VI as a sub-VI in your existing program.
I am not allergic to Kudos, in fact I love Kudos.
Make your LabVIEW experience more CONVENIENT.
Attachments:
Volts to Centimeters [LV 85].vi 13 KB -
Conflict between ActiveX from LabVIEW and Measurement Studio?
Hello
We're small software company from Poland. We're developing our product
(SCADA/HMI and integration system heavily based upon Measurement Studio
graphic controls) in C++ for Win32 environment (MSVC 2003 Edition C++
Compiler). Today we ran into serious problem: our client, one of the
biggest Polish companies that sell automation software and hardware, is
evaluating our product. Company staff members are using LabVIEW, too
and have various version of LabVIEW installed on their PCs. It turned
out that our program displays message that license is needed for
Measurement Studio ActiveX controls, and crashes, when ran on PC with
LabVIEW installed! (This one has LabVIEW 6.1, 7.0, 7.1 simultaneously
installed).
While I gues that crash is not Measurement Studio's fault (I guess that
control fails to create and throws exception which is not catched by
our code...we'll fix that) I'm pretty sure that this "license" stuff
is. Of course we have legal version of Measurement Studio 7.1, and all
controls used in our software have their respective licenses generated
and compiled into application (we create all controls dynamically). We
have never run into such problem before, and we're using Measurement
Studio for years...please help.
Some additional details: control that failed is CWBoolean in "3D Diode"
configuration. Other controls, including CWBoolean in another
configurations seem to work OK, at least I was told so (it's pity that
I don't have faulty configuratio here...will try to reproduce it using
some kind of LabVIEW evaluation version).
Best regards from Poland, and thanks for any help.
Michal
Michal Adamczak
Lead programmer, ANT ISS (http://www.ant-iss.com)Hi Michal,
This is actually an error message that is usually fixed pretty simply by using our License Fixer. Sometimes the licenses for the ActiveX controls can become broken in Measurement Studio. This usually happens if you install drivers after installing Measurement Studio or a program created using Measurement Studio. You can find the License Fixer here. Try this out and let us know if you still have any trouble.
Thanks,
Caroline Tipton
Data Management Product Manager
National Instruments -
Simulink to LabVIEW automatic conversion
I used the Tools>>Control Design and Simulation>>Simulation Model Converter to convert a Simulink file (.mdl) to a .vi (multiple files). The problem is that the converted files have a lot of errors and therefore are not executable. The most frequent error is "You have two terminals of different types. the type of the source is cluster of 2 elements. The type of the sink is 1-D array of double [64 bit real (15 digit precision)] " How to I resolve this error? Is there a difference between Bus Creator/Bus Selector and Bundle/Unbundle in Simulink and LabVIEW respectively? I attach a sample VI. Thanks.
Attachments:
Water Pump.vi 13 KBHello AAR,
I cannot speak as much to the exact functionality of the Bus Creater/Bus Selector, but I will see if I can describe the bundle/unbundle to help clear up any confusion.
The Bundle function creates a cluster in LabVIEW which can be a group of like or unlike data. This cluster can be passed around the diagram and then the Unbundle or Unbundle by Name functions can be used to pass out a particular value in the cluster.
I am not sure what your original model was doing, but it is easy to see why the VI you attached is broken. You can resolve the broken wires in some different ways, and it depends on your intention with your original model.
The attached file builds several scalars and an array into a 1-D array. This array is then Bundled with a second array. The cluster output of this bundle function is then being passed to an indicator called Water and a Global Variable called Inlet_water. The datatype of both Water and Inlet_water is an array of doubles. In LabVIEW the cluster datatype and array datatype or not interchangable. I am not sure how these arrays are used in the rest of the model, but here is where your options come in.
You could replace the Bundle with a Build Array(concatenate the inputs to make one 1-D array rather than a 2-D array). Then, wherever you need access to specific elements of the array you can use the Index Array function. For this modification you will need to know the index of the element you are interested in when using the Index Array. Either that or convert your global variable and indicator to be clusters. I think the first modification would probably be the simpler modification, but again it is dependent on how you intend to use the data in the rest of your model.
I hope this helps, please post back if you have further questions about this.
Regards,
Angela M
Product Support Engineer -
Switched from Chrome recently, and with that if you go to save a file and you already have a file with that name it will automatically rename it to whatever it was with a number in parentheses afterwards [so something like funnypic15(1).jpg]
Firefox just gives you a warning that a file with that name already exists after you try to save it. Anyway to get Firefox to behave like Chrome about this?I don't know if there is an option for this. The file rename is a system
element. Go to the '''[https://addons.mozilla.org/en-US/firefox/ Mozilla Add-ons Web Page]''' {web link}
(There’s a lot of good stuff here) and search for what you want. -
Has anyone else had problems getting used to their mouse and how the clicks work or don't work on the internet? I click and it doesn't automatically do what I click on. So frustrating!
Hi ndearborn0273!
This is most likely just a settings issue with your mouse that you are able to change through the System Preferences. I have an article for you that can help you set this back to default, and that article can be found right here:
Mac Basics: Set your preferences
http://support.apple.com/kb/ht2490
Specifically, you will want to pay close attention to this section of that article:
Customize your mouse
The Mouse preferences pane looks different depending on what kind of mouse you use. These settings let you set the sensitivity of the mouse to control how fast the pointer moves across your screen when you move your mouse, and adjust for your double-click reflexes. Other controls may be available, depending on the type of mouse you're using.
Open System Preferences.
Choose View > Mouse, or simply click Mouse.
To control how fast the pointer (cursor) moves across your screen when you move the mouse, click Point & Click and use the Tracking slider to adjust speed.
If Double-Click Speed appears, you can use the Double-Click slider to adjust speed.
If your mouse has a scroll wheel, you can use the Scrolling slider to adjust speed.
To change gesture settings, click the More Gestures tab. You can enable and disable gestures for swipe and Mission Control.
Judging by your post, I believe your secondary click setting is set to use the left side of the mouse. The default set up for a former Windows user to be most comfortable would be having the secondary click set to the right side of the mouse, as is shown in the picture I have inserted above. Note that these settings will be explained by the little video on the right hand side of this window as you hover over the description of the action on the left hand side.
Thanks for using the Apple Support Communities!
Cheers,
Braden
Maybe you are looking for
-
A parameter that filters and also 'Select ALL' at the same time
Hi All, I have a situation 1. I have a parameter @Param1 that accepts multiple values 2. I have to display data based on selected values of @Param1 Here comes the tricky part. 3. I have to aggregate on all the available values of the @Param1 Can any
-
Access the adobe form pdf data in abap or java programs
Hi, We created an adobe form, with few text boxes, and emailed to user for filing his data into the pdf file. He filled the text boxes and saved the pdf, and sent back the pdf file by mail. Now our requirement is: we need to read the values entered b
-
F.27 get message no data selected
When running F.27 , there is "no data selected". though we have configured sap13 correspondence. and maintained peridic statement in customer master data. also maintained variant for porgram RFKORD11. Is thera anythign i am missing? Do I need to main
-
Problem for Header text of Contracts
Hi guys, a suggest:I have created in customizing a new header text and I want display and manage it on header of contract but when I create the contract see always the standard header texts 'release order text', 'header text','header note' 'pricing t
-
Write keywords to the opened image
Hi The document "Photoshop JavaScript reference" tells the document.info.keywords is a read/write property. I opened an image in Photoshop that has 2 keywords. I can read it normally but it seems I cannot write or delete these keywords I need to del