Accessing custom device FIFO array element by name
Hi,
Some of my custom devices have a large number if I/Os. Because the FIFOs are arrays, my custom device RT driver VI has been referencing them by indexing the arrays. Is there a recommended method to reference FIFO I/Os by name, and preferably the same name as the channel names that are created by the initialization VI? Referencing array elements by index can get very confusing and not very flexible if I need to add or remove custom device I/Os. Thanks.
You could use an enum diagram constant to wire to the index terminal of index array. Make the item name correspond to the element name.
LabVIEW Champion . Do more with less code and in less time .
Similar Messages
-
Question again about custom device.
If there are 200 output channels but every 100ms only 40 of them get updated by the driver.
Is it possible to write only those 40 channel data to the device output FIFO at a time?
What is the RT FIFO write speed when writing 200 channel data at a time?
Thanks.
Solved!
Go to Solution.If your custom device is an inline custom device you may update only dedicated channels per iteration.
In case of a asynchronous (parallel) custom device, you are forced to write always the entire stack of channels no matter what happend to the values. (if none of the values have changed, then it is ok to not call the FIFO Write function).
The FIFO Write doesn't cause a huge overhead.
You can easily benchmark that yourself though.
Tom
http://www.newgistics.com -
Referencing Array element by name
Hi, I've got an array containing various sprites... I'm
wanting to reference the sprite I want by its name rather than its
index in the array, and was wondering if theres a simple way of
doing this? I know I could do a for loop through all the array
elements and see which one has a name that is equal to the name im
looking for, but is something along the lines of
myArray[elementName] possible?It can be a sprite.
var testSprite:Sprite = new Sprite();
addChild(testSprite);
var myObject =
{valueOne:"one",valueTwo:"Two",valueThree:testSprite};
myObject.valueThree.x = 200;
trace(myObject.valueThree.x); -
More questions on asynchronous custom device
I am trying to create an asynchronous custom device for VeriStand and have the following questions:
a) At what rate is input channel being scanned and data pushed into the input FIFO of the custom device? Is the scan rate affected by whether the input channel is mapped to a Workspace control object or whether it is mapped to a simulation model (.dll file) output?
b) At what rate is the asynchronous custome device real-time VI being executed? Is it at the same rate as the primary control loop rate? Can I change the execution rate of a custom device and how?
c) I have a quad-core PXI real-time platform. How can I assign the custom device to a specific processor, like what you do with a simulation model (.dll file) in the system definition file?
Thank you in advance.
Solved!
Go to Solution.Data FIFO
The rate at which data is pumped to your Custom Device is static, and has nothing to do with whether the Workspace is connected, or whether a model is mapped to any of your channels. By default, data is pushed into your Custom Device's input FIFO every iteration of the Primary Control Loop. If the FIFO is full, the oldest data packet will be overwritten. Also, by default your outputs FIFO is checked ever iteration of the Primary Control Loop. You can, however, use the function NI VeriStand - Set Custom Device Decimation to tag a property on your custom device that will indicate to the system its expected decimation. If you set a decimation of 10, for example, the Primary Control Loop will only send new data every 10 iterations and only check for new data from your outputs FIFO every 10 iterations. This can help reduce the CPU load of your system if you don't need updates that often.
Similarly, you can use the function NI VeriStand - Set FIFO Depth to control the FIFO depths of your inputs and outputs FIFO respectively. By default both have depth 1.
Execution Rate
The rate at which your Custom Device executes depends entirely on how you set it up. You can, for instance, have your asynchronous Custom Device use its own timing and run at a completely independent rate from the system. Your VI could have a regular while loop with a 10ms timer in it, for instance, or it could be based off some hardware device timing.
You can also choose to tightly synchronize yourself with the Primary Control Loop. You do this by registering using a property that your Custom Device has a Timed Loop that will use the Device Clock. The Device Clock is a timing source that is ticked every iteration of the Primary Control Loop after Custom Device FIFOs have been updated. You register for this simply by calling the property NI VeriStand - Set Loop Type and specifying Timed Loop for loop type and Use Device Clock to be True. Then, as the template VI does, just wire the Device Clock into your timing source input for the Timed Loop. If you have specified a decimation factor, as mentioned above, you should probably also use this factor as your dt. This means if you have a decimation of 10, you should only execute your Timed Loop every 10 ticks of the Device Clock timing source.
Another easy way to synchronize yourself tightly with the Primary Control Loop with little hassle is to simply base your timing off the availability of new data in your Inputs or Outputs FIFO. To do this, you could just use a regular while loop, and then just wire -1 to the FIFO timeouts. Then your Custom Device will run as fast as data is being produced and consumed by the system.
Specifying a Processor
There is no built-in property for processor assignment, but it will be very easy for you to implement this yourself. You can specify the Processor to execute on in System Explorer by creating a custom property using NI VeriStand - Set Item Property. For instance, you could set an I32 property called "Processor", with -2 meaning auto-assign, and any non-negative value indicating a specific processor index. Set this property in one of your Custom Device configuration pages in System Explorer and then read the property in the Driver VI in the engine using NI VeriStand - Get Item Property. Then just wire the property value to the processor affinity input on your Timed Loop. You should, however, always check that that processor exists on the target. Otherwise the Timed Loop will report an error and abort. This is exactly what we do for models internally.
Jarrod S.
National Instruments -
Accessing a user array elements in Captivate 6
Hi guys I have a piece of code that's not working I was hoping someone had any clue as to why, I've wasted too many hours trying to figure this out. Here's the code, explanation below.
var objCP = document.Captivate;
objCP.cpEISetValue("m_VarHandle.questionList", new Array(7));
objCP.cpEISetValue("m_VarHandle.questionList[0]", 1);
objCP.cpEISetValue("m_VarHandle.questionList[1]", 2);
objCP.cpEISetValue("m_VarHandle.questionList[2]", 1);
objCP.cpEISetValue("m_VarHandle.questionList[3]", 2);
objCP.cpEISetValue("m_VarHandle.questionList[4]", 1);
objCP.cpEISetValue("m_VarHandle.questionList[5]", 2);
var cat1Len = 0;
var cat2Len = 0;
for (var i=0;i<objCP.cpEIGetValue("m_VarHandle.questionList.length");i++){
var value = objCP.cpEIGetValue("m_VarHandle.questionList[i]");
if (value == 1)
{cat1Len++;}
if (value) == 2)
{cat2Len++;}
alert(i);
alert(objCP.cpEIGetValue("m_VarHandle.questionList[2]"));
alert(value);
I'm attempting to create a list using a captivate variable I've created called "questionList".
I fill questionList with data and and then use that data to count, in this instance with cat1Len and cat2Len.
After that I attempt to verify that the data is being returned correctly with a series of alerts.
Here's the problem:
alert(i) correctly reports the number my incrementer should be at.
alert(objCP.cpEIGetValue("m_VarHandle.questionList[2]")) correctly reports the data in cell [2] of questionList
but...
alert(value) reports undefined. How can this be? I know that I can access array elements from inside this loop and I know that I my incrementer is at the correct location so what's the deal?
Thanks for any help!should be:
var objCP = document.Captivate;
objCP.cpEISetValue("m_VarHandle.questionList", new Array(7));
objCP.cpEISetValue("m_VarHandle.questionList[0]", 1);
objCP.cpEISetValue("m_VarHandle.questionList[1]", 2);
objCP.cpEISetValue("m_VarHandle.questionList[2]", 1);
objCP.cpEISetValue("m_VarHandle.questionList[3]", 2);
objCP.cpEISetValue("m_VarHandle.questionList[4]", 1);
objCP.cpEISetValue("m_VarHandle.questionList[5]", 2);
var cat1Len = 0;
var cat2Len = 0;
for (var i=0;i<objCP.cpEIGetValue("m_VarHandle.questionList.length");i++){
var value = objCP.cpEIGetValue("m_VarHandle.questionList["+i+"]");
if (value == 1)
{cat1Len++;}
if (value) == 2)
{cat2Len++;}
alert(i);
alert(objCP.cpEIGetValue("m_VarHandle.questionList[2]"));
alert(value);
i is only defined local to the javascript eval, not a global variable. You have to pass the value, not the name of the index...
(I just realized that this question was from 2012, but maybe it might still benefit someone... I saw it while I was looking for something else) -
How to access XML elements by name in Extendscript??
I'm almost done the script that I've been working on, but something has been nagging me since I started. When I did start, I looked at the JS Tools Guide CS5 that comes with the extendscript ide to check how to access XML elements, children, attributes etc. It says this:
The XML object represents an XML element node in an XML tree. The topmost XML object for an XML file
represents the root node. It acts as a list, which contains additional XML objects for each element. These in
turn contain XML objects for their own member elements, and so on.
The child elements of an element tree are available as properties of the XML object for the parent. The
name of the property corresponds to the name of the element. Each property contains an array of XML
objects, each of which represents one element of the named type.
So basically it converts the XML into JSON. And you can access the properties like so:
<book category="COOKING">
<title lang="en">The Boston Cooking-School Cookbook</title>
<author>Fannie Merrit Farmer</author>
<year>1896</year>
<price>49.99</price>
</book>
The Javascript statement bookstoreXML.book; returns the entire list of books.
The statement bookstoreXML.book[0]; returns the XML object for the first book.
The statement bookstoreXML.book[0].author; returns all authors of the first book.
A couple pages down it talks about Retrieving contained elements using children(), elements(), descendants().
So now I look through the XML Object properties and I see that I can use:
xmlObj.child (which) which A String, the element name, or a Number, a 0-based index into this node’s child array.
or
xmlObj.descendants ([name])
name Optional. A String, the element name to match. If not provided, matches all
elements.
or
xmlObj.elements (name);
name Optional. A String, the element name to match. If not provided, matches all
elements.
This is an excerpt of an XML I was working with:
<ROW xmlns="http://www.filemaker.com/fmpdsoresult"
MODID="16"
RECORDID="11128">
<Sign_Type>251.dr</Sign_Type>
<fm:Location xmlns:fm="http://www.filemaker.com/fmpdsoresult" xmlns="">5-5024</fm:Location>
<Line1>Zone
Floor
3
Patient Rooms
R532 - R436 even
Patient Rooms
R522 - R446 even
Xavier Elevators
Zone
Patient Rooms
R537 - 5757 odd
Main Elevators
Zone</Line1>
</ROW>
Extendscript will not give me an anything when I try to access elements by name. Instead I have to access by index, which works, but I'd rather search for names!
Actually the console log returns: <![CDATA[]]>
What am I doing wrong!?First, those E4X XML objects are definitely no JSON (plain data) - they have a multitude of methods, even for tasks that would easily be implemented as property (e.g. the length() function), and they also bind xml element and attribute names onto the objects, allowing to target a multitude of XML nodes with a single statement. Or did you mean your script with that "it"?
Anyway, as you found out the ExtendScript XML object handles namespaces mostly by hiding them from you.
You could play around with global namespace settings, see the JavaScript tools guide.
You could also explicitly specify a namespace. This works for me:
$.writeln(myXML["fm:Location"]);
For simple use I had most success with a brute force approach that just strips the namespaces.
function removeAllNamespace(xml)
var ns =new Namespace();
var d=xml.descendants();
for (var i=0;i<d.length();i++)
d[i].setNamespace(ns); -
How to use XSLT for mapping feild names one by one to array element
I have a XSLT case to map all the attributes feild name(not value) which has no child to the target, which is array loop.
I give an sample below.
source:
<Items xmlns="http://www.example.org/sample">
<SourceSystem>SourceSystem2573</SourceSystem>
<TimeStamp>2010-01-17T20:54:08.234</TimeStamp>
<Item>
<ID>2574</ID>
<Type>2575</Type>
<Name>2576</Name>
</Item>
</Items>
source XSD like:
<element name="Items" type="tns:ItemsType"></element>
<complexType name="ItemsType">
<sequence>
<element name="SourceSystem" type="string" maxOccurs="1"
minOccurs="1">
</element>
<element name="TimeStamp" type="dateTime" maxOccurs="1"
minOccurs="1">
</element>
<element name="Item" type="tns:ItemType"
maxOccurs="unbounded" minOccurs="1">
</element>
</sequence>
</complexType>
<complexType name="ItemType">
<sequence>
<element name="ID" type="string" maxOccurs="1"
minOccurs="1">
</element>
<element name="Type" type="string" maxOccurs="1"
minOccurs="1">
</element>
<element name="Name" type="string" maxOccurs="1"
minOccurs="1">
</element>
</sequence>
</complexType>
target need to be like:
<ns1:AttributesCollection>
<ns1:Attributes>
<ns1:fieldname>SourceSystem</ns1:fieldname>
</ns1:Attributes>
<ns1:Attributes>
<ns1:fieldname>TimeStamp</ns1:fieldname>
</ns1:Attributes>
<ns1:Attributes>
<ns1:fieldname>ID</ns1:fieldname>
</ns1:Attributes>
<ns1:Attributes>
<ns1:fieldname>Type</ns1:fieldname>
</ns1:Attributes>
<ns1:Attributes>
<ns1:fieldname>Name</ns1:fieldname>
</ns1:Attributes>
</ns1:AttributesCollection>
target XSD:
<xs:element name="AttributesCollection" type="AttributesCollection"/>
<xs:complexType name="AttributesCollection">
<xs:sequence>
<xs:element name="Attributes" type="Attributes" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Attributes">
<xs:sequence>
<xs:element name="fieldname" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
I know we can use local-name() to get the tag/field name,
but I have not idea how to get these leaf field names one by one and then mapping to every array elements.
I tried whole day but no successful
Does anyone have some idea?
Thanks very much!
Keith
Edited by: user1065212 on 17-Jan-2010 22:50
Edited by: user1065212 on 17-Jan-2010 22:53
Edited by: user1065212 on 17-Jan-2010 22:59can you paste source xsd and the correct xml output, the current one isn't really valid
<ID>2574</TotalNumOfItems> -
Accessing Element's name in Message mapping
Hi,
I need to Access the Element's name in Message mapping (Using graphical tool or in user defined function).
For Example:
Element: <Company_Name>XYZ Co </Company_Name>
I need to access the Element's name(i.e.)<b>"Company_Name"</b>. So that I can map it as
<Element>Company_Name</Element>
<Element_Value>XYZ Co </Element_Value>
in the target message.
Kindly provide your inputs.Hi Santhosh,
I am not sure if this can be done using your Graphical Mapping, but this is possible using JAVA mapping. Your SAX and DOM parsers for JAVA mapping provides methods like getChildNodes, getElementName using which you can get the name of the element.
Check this link for the methods available for Java Mapping,
http://java.sun.com/j2se/1.4.2/docs/api/javax/xml/parsers/package-summary.html
I think the same can also be done using XSL mapping. Though, I am not sure what method should be used for the same.
Hope this helps,
Regards,
Bhavesh -
How do I access array elements in one method from another method?
Hi all!
How do I access the array's elements from another method so that method 2 can have access to method 1's array elements? Thanks for any help!
I am trying to create a simply program that will use a method to create an array and a SEPARATE method that will sort the array's elements (without using java's built in array features). I can create the program by simply having one method and sorting the array within that same method, BUT I want to sort the array from another method.
Here's my code so far:
public class ArraySort {
public static void createArray(int size){
double myArray[] = new double[size]; //create my new array
for(int j=0; j < myArray.length; j++)
myArray[j] = (200.0 * Math.random() + 1.0); //fill the array with random numbers
public static void sortArray(){
// I WANT THIS METHOD TO ACCESS THE ARRAY ELEMENTS IN THE METHOD ABOVE, BUT DON'T KNOW
// HOW???? Please help!
public static void main(String[] args) {
createArray(4); //call to create the array
}Thanks again!
- JohnnyThanks for the help all! I ve managed to get the program working, using java's built in array sort, but when i try to call on the array sort method from WITHIN my main method, nothing happens!
Can somebody please tell me why I am not able to call on the sort method from within my main class???? Thanks!
public class ArraySort {
public void createArray(double[] arrayName, int size){
double myArray[] = new double[size]; //create new array
for(int j=0; j < myArray.length; j++)
myArray[j] = (200.0 * Math.random() + 1.0); //populate array with
} //random Numbers
sortArray(myArray);
} //Sort array(if I delete this & try to use it in Main method --> doesn't work???
public void sortArray(double[] arrayName){
DecimalFormat time = new DecimalFormat("0.00");
Arrays.sort(arrayName); //sort array using Java's built in array method
for(int i = 0; i <arrayName.length; i++)
System.out.println(time.format(arrayName)); //print arary elements
public static void main(String[] args) {
ArraySort newArray = new ArraySort(); //create a new instance
double myArray[] = new double[0]; //create a new double array
newArray.createArray(myArray,4); //build the array of indicated size
//newArray.sortArray(myArray); //This will not work???? WHY?????// -
How to access custom labels in Table?
In IDML I have set up custom lables inside Table element. How can I access those labels?
Thx!Hi Michael,
If you just want to retrieve the data, you could use the following code.
//Get the node which the table is bound to
IWDNode node = wdContext.nodeTable();
//iterate thru the elements
for(int i = 0 ; i<node.size();i++)
IWDNodeElement ne = node.getElementAt(i);
Object value = ne.getAttributeValue("<column name>");
//Here you have the data in the value variable
//and you can manipulate this now
Regards,
Sudeep -
Label TS array elements from LV
Hi,
How can I change the Label of a TS array element from my LabVIEW code??? Se picture added.
It is done when you insert at ”Multiple Numeric Limit Test” step in a test sequence and select “Edit Limits…” you get the “Edit Multiple Numeric Limit Test” dialog box. When this is closed with OK the Names of the Measurement Set is applied to the elements in Step.Result.Measurement. How can I do this from LabVIEW???
I am looking forward to hear from you.
Best Regards,
Morten Pedersen
CIM Industrial Systems A/S
Attachments:
ArrayElementsNames.jpg 98 KBYou can access the name of an object by using ActiveX to get to the step's Property Object. Once there, you can use a property node for the name and change it to write.
Let me know if you need more information about this.
Regards
Anders M.
National Instruments DK -
Retrieve captivate array elements in Captivate 6
Hi guys I have a piece of code that's not working I was hoping someone had any clue as to why, I've wasted too many hours trying to figure this out. Here's the code, explanation below.
var objCP = document.Captivate;
objCP.cpEISetValue("m_VarHandle.questionList", new Array(7));
objCP.cpEISetValue("m_VarHandle.questionList[0]", 1);
objCP.cpEISetValue("m_VarHandle.questionList[1]", 2);
objCP.cpEISetValue("m_VarHandle.questionList[2]", 1);
objCP.cpEISetValue("m_VarHandle.questionList[3]", 2);
objCP.cpEISetValue("m_VarHandle.questionList[4]", 1);
objCP.cpEISetValue("m_VarHandle.questionList[5]", 2);
var cat1Len = 0;
var cat2Len = 0;
for (var i=0;i<objCP.cpEIGetValue("m_VarHandle.questionList.length");i++){
var value = objCP.cpEIGetValue("m_VarHandle.questionList[i]");
if (value == 1)
{cat1Len++;}
if (value) == 2)
{cat2Len++;}
alert(i);
alert(objCP.cpEIGetValue("m_VarHandle.questionList[2]"));
alert(value);
I'm attempting to create a list using a captivate variable I've created called "questionList".
I fill questionList with data and and then use that data to count, in this instance with cat1Len and cat2Len.
After that I attempt to verify that the data is being returned correctly with a series of alerts.
Here's the problem:
alert(i) correctly reports the number my incrementer should be at.
alert(objCP.cpEIGetValue("m_VarHandle.questionList[2]")) correctly reports the data in cell [2] of questionList
but...
alert(value) reports undefined. How can this be? I know that I can access array elements from inside this loop and I know that I my incrementer is at the correct location so what's the deal?
Thanks for any help!should be:
var objCP = document.Captivate;
objCP.cpEISetValue("m_VarHandle.questionList", new Array(7));
objCP.cpEISetValue("m_VarHandle.questionList[0]", 1);
objCP.cpEISetValue("m_VarHandle.questionList[1]", 2);
objCP.cpEISetValue("m_VarHandle.questionList[2]", 1);
objCP.cpEISetValue("m_VarHandle.questionList[3]", 2);
objCP.cpEISetValue("m_VarHandle.questionList[4]", 1);
objCP.cpEISetValue("m_VarHandle.questionList[5]", 2);
var cat1Len = 0;
var cat2Len = 0;
for (var i=0;i<objCP.cpEIGetValue("m_VarHandle.questionList.length");i++){
var value = objCP.cpEIGetValue("m_VarHandle.questionList["+i+"]");
if (value == 1)
{cat1Len++;}
if (value) == 2)
{cat2Len++;}
alert(i);
alert(objCP.cpEIGetValue("m_VarHandle.questionList[2]"));
alert(value);
i is only defined local to the javascript eval, not a global variable. You have to pass the value, not the name of the index...
(I just realized that this question was from 2012, but maybe it might still benefit someone... I saw it while I was looking for something else) -
TestStand2.0 generates for each result property ( data, limits, status...) of each array element in a NumericArrayTest an extra line in the test report.
How can I change this to display all result properties of one array element in a single line?
How can I reduce the spaces between the property name and its value in the report?
How can I delete the message: "Measurement[x]" and display only the Measurement Alias (named in the Edit Limits menu)?
This means I like to change my report from:
Measurement[0] (ADC1):
Data: 5000
Status: Passed
Measurement[1] (AD
C2):
To:
ADC1: Data: 5000 Status: Passed
ADC2: ...Hi,
What you can do, is use the Override Callbacks for Modify the Report that is Generated.
Also you can also change the report sequence 'reportgen_txt.seq' to achieve the desired affect. If you go for modifying the report sequence then copy this to the User folder and then make your changes.
In the Resources Library you can find simple examples were the report has been modified by either using the Override Callbacks or by modifying the actual sequence.
One other item in the Report Options you will have to set the 'Select a Report Generator for Producing the Report Body' control to use the Sequence instead of the DLL.
Hope this helps
Ray Farmer
Regards
Ray Farmer -
My situation is that I have an array of clusters on the front panel. Each element is used for a particular test setup, so if the array size is three, it means we have three identical test setups that can be used. The cluster contains two string controls and a button: 'device ID' string, 'start' button and 'status' string.
In order to keep the diagrams simple, I would like to use a reference to the array as input into a subvi. This subvi will then modify a particular element in the array (i.e. set the 'status' string).
The first problem I encounter is that I can not select an array element to write to by using the reference. I have tried setting the 'Selection s
tart[]' and 'Selection size[]' properties and then querying the 'Array element' to get the proper element.
If I do this, the VI always seems to write to the element which the user has selected (i.e. the element that contains the cursor) instead of the one I am trying to select. I also have not found any other possible use for the 'Selection' properties, so I wonder if I am doing something wrong.
Of course I can use the 'value' property to get all elements, and then use the replace array element with an index value, but this defeats the purpose of leaving all other elements untouched.
I had hoped to use this method specifically to avoid overwriting other array elements (such as happens with the replace array element) because the user might be modifying the second array element while I want to modify the first.
My current solution is to split the array into two arrays: one control and one indicator (I guess that's really how it should be done ;-) but I'd still like to know ho
w to change a single element in an array without affecting the others by using a reference in case I can use it elsewhere.> My situation is that I have an array of clusters on the front panel.
> Each element is used for a particular test setup, so if the array size
> is three, it means we have three identical test setups that can be
> used. The cluster contains two string controls and a button: 'device
> ID' string, 'start' button and 'status' string.
>
> In order to keep the diagrams simple, I would like to use a reference
> to the array as input into a subvi. This subvi will then modify a
> particular element in the array (i.e. set the 'status' string).
>
It isn't possible to get a reference to a particular element within an
array. There is only one reference to the one control that represents
all elements in the array.
While it may seem better to use references to update
an element within
an array, it shouldn't really be necessary, and it can also lead to
race conditions. If you write to an element that has the
possibility of the user changing, whether you write with a local, a
reference, or any other means, there is a race condition between the
diagram and the user. LV will help with this to a certain extent,
especially for controls that take awhile to edit like ones that use
the keyboard. In these cases, if the user has already started entering
text, it will not be overwritten by the new value unless the key focus
is taken away from the control first. It is similar when moving a slider
or other value changes using the mouse. LV will write to the other values,
but will not rip the slider out of the user's hand.
To completely avoid race conditions, you can split the array into user
fields and indicators that are located underneath them. Or, if some
controls act as both, you can do like Excel. You don't directly type
into the cell. You choose w
hich cell to edit, but you modify another
location. When the edit is completed, it is incorporated into the
display so that it is never lost.
Greg McKaskle -
VPN Connects but unable to access internal devices
Thank you in advance for any assistance that can be provided.
I am using AnyConnect to create a VPN with an ASA 5505. Once connected, the client needs to access a device behind a 1941 router.
Internally, (not using VPN), all my routing is working correctly. My VPN client can connect and when I put a route on my 1941 router, I am able to ping that particular device. But my VPN client cannot appear to ping anything else, either the devices on the same internal range as the ASA 5505 or anything past the 1941.
VPN Client ASA 5505 Workstation 1941 Router Far Device
192.168.201.20 -----> Outside IP x.x.x.x // Internal 192.168.101.1 192.168.101.56 192.168.101.2 // 192.168.8.1 192.168.8.150
Client connects and get IP from ASA
Cannot ping this Cannot ping this
Can ping internal IP of 1941
*(after creating a static route)
I have been playing around with my configuration extensively to try and make this work. Split-tunneling is enabled and is required.
Here is my current config:
hostnameMYHOST
enable password mUUvr2NINofYuSh2 encrypted
passwd UNDrnIuGV0tAPtz2 encrypted
names
interface Ethernet0/0
switchport access vlan 2
interface Ethernet0/1
interface Ethernet0/2
interface Ethernet0/3
interface Ethernet0/4
interface Ethernet0/5
interface Ethernet0/6
interface Ethernet0/7
switchport access vlan 7
interface Vlan1
nameif inside
security-level 100
ip address 192.168.101.1 255.255.255.0
interface Vlan2
nameif outside
security-level 0
ip address x.x.x.x 255.255.0.0
interface Vlan7
no forward interface Vlan1
nameif DMZ
security-level 20
ip address 137.57.183.1 255.255.255.0
ftp mode passive
clock timezone MST -7
dns domain-lookup outside
object-group network obj_any_dmz
access-list nonat extended permit ip 192.168.101.0 255.255.255.0 any
access-list nonat extended permit ip 192.168.201.0 255.255.255.0 any
access-list split-tunneling standard permit 192.168.101.0 255.255.255.0
pager lines 24
logging enable
logging buffered debugging
logging asdm informational
mtu inside 1500
mtu outside 1500
mtu DMZ 1500
ip local pool Internal_Range 192.168.101.125-192.168.101.130 mask 255.255.255.0
ip local pool vpn_pool 192.168.201.20-192.168.201.30 mask 255.255.255.0
icmp unreachable rate-limit 1 burst-size 1
no asdm history enable
arp timeout 14400
global (outside) 10 interface
nat (inside) 0 access-list nonat
nat (inside) 1 0.0.0.0 0.0.0.0
nat (DMZ) 10 137.57.183.0 255.255.255.0
route outside 0.0.0.0 0.0.0.0 x.x.x.x 1
route inside 192.168.8.0 255.255.255.0 192.168.101.2 1
timeout xlate 3:00:00
timeout conn 1:00:00 half-closed 0:10:00 udp 0:02:00 icmp 0:00:02
timeout sunrpc 0:10:00 h323 0:05:00 h225 1:00:00 mgcp 0:05:00 mgcp-pat 0:05:00
timeout sip 0:30:00 sip_media 0:02:00 sip-invite 0:03:00 sip-disconnect 0:02:00
timeout sip-provisional-media 0:02:00 uauth 0:05:00 absolute
timeout tcp-proxy-reassembly 0:01:00
timeout floating-conn 0:00:00
dynamic-access-policy-record DfltAccessPolicy
aaa authentication ssh console LOCAL
http server enable 64000
http 0.0.0.0 0.0.0.0 inside
no snmp-server location
no snmp-server contact
snmp-server enable traps snmp authentication linkup linkdown coldstart
crypto ipsec security-association lifetime seconds 28800
crypto ipsec security-association lifetime kilobytes 4608000
crypto ca trustpoint ASDM_TrustPoint1
enrollment self
subject-name CN=MYHOST
keypair ClientX_cert
crl configure
crypto ca certificate chain ASDM_TrustPoint1
certificate 0f817951
308201e7 30820150 a0030201 0202040f 81795130 0d06092a 864886f7 0d010105
05003038 31173015 06035504 03130e41 494d452d 56504e2d 42415455 53311d30
1b06092a 864886f7 0d010902 160e4149 4d452d56 504e2d42 41545553 301e170d
31333036 32373137 32393335 5a170d32 33303632 35313732 3933355a 30383117
30150603 55040313 0e41494d 452d5650 4e2d4241 54555331 1d301b06 092a8648
86f70d01 0902160e 41494d45 2d56504e 2d424154 55533081 9f300d06 092a8648
86f70d01 01010500 03818d00 30818902 818100c9 ff840bf4 cfb8d394 2c940430
1887f25a 49038aa0 1299cf10 bda2a436 227dcdbf f1c5566b c35c2f19 8b3514d3
4e24f5b1 c8840e8c 60e2b39d bdc0082f 08cce525 97ffefba d42bb087 81b9adb9
db0a8b2f b643e651 d17cd6f8 f67297f2 d785ef46 c3acbb39 615e1ef1 23db072c
783fe112 acd6dc80 dc38e94b 6e56fe94 d59d5d02 03010001 300d0609 2a864886
f70d0101 05050003 8181007e 29e90ea0 e337976e 9006bc02 402fd58a a1d30fe8
b2c1ab49 a1828ee0 488d1d2f 1dc5d150 3ed85f09 54f099b2 064cd622 dc3d3821
fca46c69 62231fd2 6e396cd1 7ef586f9 f41205af c2199174 3c5ee887 42b684c9
7f4d2045 4742adb5 d70c3805 4ad13191 8d802bbc b2bcd8c7 8eec111b 761d89f3
63ebd49d 30dd06f4 e0fa25
quit
crypto isakmp enable outside
crypto isakmp policy 40
authentication pre-share
encryption aes-256
hash sha
group 5
lifetime 86400
telnet timeout 5
ssh 0.0.0.0 0.0.0.0 inside
ssh 0.0.0.0 0.0.0.0 DMZ
ssh timeout 10
console timeout 0
threat-detection basic-threat
threat-detection statistics access-list
no threat-detection statistics tcp-intercept
ssl encryption rc4-md5 rc4-sha1 aes128-sha1 aes256-sha1 3des-sha1
ssl trust-point ASDM_TrustPoint1 outside
webvpn
enable outside
svc image disk0:/anyconnect-win-2.4.1012-k9.pkg 1
svc enable
group-policy ClientX_access internal
group-policy ClientX_access attributes
dns-server value 4.2.2.2
vpn-tunnel-protocol svc
split-tunnel-policy tunnelspecified
split-tunnel-network-list value split-tunneling
default-domain value access.local
address-pools value vpn_pool
ipv6-address-pools none
webvpn
svc mtu 1406
svc rekey time none
svc rekey method ssl
username ClientX password ykAxQ227nzontdIh encrypted privilege 15
username ClientX attributes
vpn-group-policy ClientX_access
service-type admin
tunnel-group ClientX type remote-access
tunnel-group ClientX general-attributes
address-pool Internal_Range
default-group-policy ClientX_access
tunnel-group SSLClientProfile type remote-access
tunnel-group SSLClientProfile general-attributes
default-group-policy ClientX_access
tunnel-group ClientX_access type remote-access
class-map inspection_default
match default-inspection-traffic
policy-map type inspect dns preset_dns_map
parameters
message-length maximum client auto
message-length maximum 512
policy-map global_policy
class inspection_default
inspect dns preset_dns_map
inspect ftp
inspect h323 h225
inspect h323 ras
inspect rsh
inspect rtsp
inspect esmtp
inspect sqlnet
inspect skinny
inspect sunrpc
inspect xdmcp
inspect sip
inspect netbios
inspect tftp
inspect ip-options
service-policy global_policy global
prompt hostname context
no call-home reporting anonymous
Cryptochecksum:da38065247f7334a5408b7ada3af29ae
: endok, lets go on ... ;-)
Split-Tunneling: The ACL must include all networks you want to reach through the VPN:
access-list split-tunneling standard permit 192.168.101.0 255.255.255.0
access-list split-tunneling standard permit 192.168.8.0 255.255.255.0
NAT: Don't use "any" in the nat-exemption, but specify all traffic that should not be natted:
access-list nonat extended permit ip 192.168.101.0 255.255.255.0 192.168.201.0 255.255.255.0
access-list nonat extended permit ip 192.168.8.0 255.255.255.0 192.168.201.0 255.255.255.0
Routing: The 1941 needs a route for the vpn-pool pointing to the ASA (just in case there is no default route to the ASA)
Don't stop after you've improved your network! Improve the world by lending money to the working poor:
http://www.kiva.org/invitedby/karsteni
Maybe you are looking for
-
I need to fix my ipod and i don't know how, i am hoping that if i leave it alone over night that it will fix itself, its on the lock screen and i cant do anything with the screen, i tried restarting it and it didnt work, so because i restarted it, it
-
Need to display seqno along with his superior number
Hi friends, I have a table adm_menus It's DDL is CREATE TABLE "ADM_MENUS" ( "MENU_ID" NUMBER, "MENU_NAME" VARCHAR2(60 BYTE), "PARENT_MENU_ID" NUMBER, "SEQ_NO" NUMBER, "DISP_SEQ_NO" VARCHAR2(250 BYTE), "MENU_ACTION_TYPE" V
-
Can not seem to connect to an HTTPS with a port number
Hello, I am building an application that needs to connect to an https with a port number... If the url is 'https://xxx.yyy.zzz' and the port is 5000 what would I use? I have found examples with out a port number but not with a port number...
-
I downloaded the 815shipstd.tgz file. I read and followed the PDF file. I had to buy some extra MBs of Ram. I set up the oracle8i user and oinstaller and dba groups. OUI started up real nice. Then... the "Source" field wants a products.jar file. It d
-
i´ve already checked my compilation albums as "part of acompilation" but still seeing the one song artist in my artist list, anyone suffering the same?