Archive for the 'Uncategorized' Category

Using Eclipse with Arduino Duemilanove

The Arduino IDE is good for simple projects, but as soon as you start building more complext mulit file projects it just not up to the job. Eclipes on the other hand is free, powerful, and full-featured development environment that can be set up to work with AVR and Arduino. Arduino’s website has some decent instructions on how to compile with Eclipse for Arduino but its has some missing/confusing steps and is meant for C development not C++. It still has some good reference meterial that you should review.

In this tutorial we will be showing you how to set up the eclipse environment, Build the Arduino library, Create a Arduino project, Compiling C/C++ code, Uploading code to the Arduino, FAQ. This Tutorial was created in response to VHS Hack Challenge.

Setting up the Eclipse environment

Download
You may not be able to find the exact versions that are used in this tutorial, just you the most updated versions.

Installation
  • Install Java runtime. Most computers will already have Java installed as it is used for many other applications.
  • Install Arduino software. The Arduino software comes with the Arduino library and source code examples that will be useful when developing your own projects.
  • Install Eclipse. This should be pretty strait forward. You can install Eclipse in any directory you want. For this tutorial we installed it in C:\Dev\eclipse-cpp
  • Install WinAVR, You can install WinAVR in any directory you want. For this tutorial we installed it in C:\Dev\WinAVR-20100110
  • Install Eclipse AVR plugin. You will have to manually copy this “plugin” into the the Eclipse installation. Move the folder which begins with the name “de.innot.avreclipse” to the “dropins” folder located within the eclipse folder. Restart Eclipse if you have it already running. There should now be a new “AVR” toolbar button in your workspace.

Build the Arduino library

Before we can create our first Arduino project we have to link in the Arduino library for Eclipse. There are several different ways of doing this described on Eclipse for Arduino tutorial but for this tutorial we will be creating a static library.

You can download the project and the library directly and skip this step.

  1. Open Eclipse and start a new C++ project.
  2. C++ Project
    • Project Name: ArduinoCore
    • Project Type: AVR Cross Target Static Libary
    • Toolchains: AVR-GCC Toolchain
  3. Select Configurations, Uncheck debug we will not be using the debug version of this library in this tutorial.
  4. Set the MCU type and frequency for your Arduino board. For example, for the Diecimila, use ATmega168 running at 16000000 Hz. For new versions of the Duemilanove, use ATmega328P running at 16000000 Hz. If you look closely at the Arduino board, you can see the target platform written on the main processor. Click Finish.
  5. In Eclipse, click Project->Properties.
  6. Select C/C++ Build and expand the category (e.g., click the diamond to the left of “C/C++ Build”).
  7. Select Settings under C/C++ Build.
  8. In the right pane, Click AVR Compiler
    • Debugging. Set “Generate Debugging Info” to No debugging info.
    • Optimization. Set the Optimization Level to “Size Optimizations”.
    • Directories, Add the path to the Arduino IDE’s Hardware folder “Arduino-0018\hardware\arduino\cores\arduino”
  9. In the right pane, Click AVR C++ Compiler
    • Debugging. Set “Generate Debugging Info” to No debugging info.
    • Optimization. Set the Optimization Level to “Size Optimizations”.
    • Directories, Add the path to the Arduino IDE’s Hardware folder “Arduino-0018\hardware\arduino\cores\arduino”
  10. Right click on the ArduinoCore project in the project explorer on the right and select Import.
  11. On the Import dialog, select General => File System and click next.
  12. On the File system dialog click browse and select the Arduino IDE’s hardware folder  “Arduino-0018\hardware\arduino\cores\arduino”
  13. Select all the files except main.cpp. Click finish
  14. Build the project, On the mail dialog click the hammer in the too bar or by selecting Project =>Build All.

Congratulations you have created the Arduino C/C++ library for Eclipse.  The library ( libArduinoCore.a ) can be found in the projects release folder. It should be around 26k

Path: \workspace\ArduinoCore\Release\libArduinoCore.a

Creating a Arduino project

Now that we have the Arduino library we can build our first Arduino project. We are going to start with the Blink tutorial from Arduino.cc its one of the simplest tutorials and should be a good building block for future projects.

You can download the project for this tutorial from our website.

  1. Create a new Eclipse C++ project, File => New => C++ project
  2. C++ Project
    • Project Name: Blinky
    • Project Type: AVR Cross Target Application => Empty project
    • Toolchains: AVR-GCC Toolchain
  3. Select Configurations, Uncheck debug we will not be using the debug version in this tutorial.
  4. Set the MCU type and frequency for your Arduino board. For example, for the Diecimila, use ATmega168 running at 16000000 Hz. For new versions of the Duemilanove, use ATmega328P running at 16000000 Hz. If you look closely at the Arduino board, you can see the target platform written on the main processor. Click Finish.
  5. In Eclipse, click Project =Properties.
  6. Select C/C++ Build and expand the category (e.g., click the diamond to the left of “C/C++ Build”).
  7. Select Settings under C/C++ Build.
  8. In the right pane, Click Additional Tools in Toolchain
    • Check Generate HEX file for flash memory
    • Check Print size
  9. In the right pane, Click AVR Compiler
    • Debugging. Set Generate Debugging Info to “No debugging info”.
    • Optimization. Set the Optimization Level to “Size Optimizations”.
    • Directories, Add the path to the Arduino IDE’s Hardware folder “Arduino-0018\hardware\arduino\cores\arduino”
  10. In the right pane, Click AVR C++ Compiler
    • Debugging. Set Generate Debugging Info to “No debugging info”.
    • Optimization. Set the Optimization Level to “Size Optimizations”.
    • Directories, Add the path to the Arduino IDE’s Hardware folder “Arduino-0018\hardware\arduino\cores\arduino”
  11. In the right pane, Click AVR C++ Linker
    • Command: avr-gcc
    • Command line pattern: ${COMMAND} –cref -s -Os ${OUTPUT_FLAG}${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} -lm ${FLAGS}
  12. In the right pane, Click AVR C++ Linker => Libraries
    • Add your Arduino library created above “ArduinoCore“, The name of the library does not include the extension or the pretext of ‘lib’.  Note: In this project I copied the library in to the base folder of the Blinky project for simplicity.
  13. Create a new source file,  File => New => Source file, Call it main.cpp
  14. Copy the contents of this file main.cpp in to main.cpp
  15. Build the project, On the mail dialog click the hammer in the too bar or by selecting Project =>Build All.

Uploading code to the Arduino

Lucky there is already a tool for this built in to AVR plugin for Eclipse called AVRDude. It should already be included with the AVR plugin for Eclipse so you shouldn’t have to download or install anything else.

  1. In Eclipse, click Project =>Properties.
  2. On the left hand side AVR => AVRDude
  3. You will need to create a new programmer configuration for your board but you only have to do this once.  Click New
  4. New programmer configuration
    • Configuration Name: Arduino Duemilanove
    • Programmer Hardware: Atmel STK500 Version 1.x Firmware
    • Override default port: //./COM14
      Note:  you will have to change this to your comport.)
    • Override default baudrate: 57600
  5. Click OK,
  6. On the AVRDude dialog select Advanced
  7. Check “Disable Device signature check” and click OK
  8. Highlight Blinky in the project explorer and click AVR => Upload to target device or the AVR icon with the green downward arrow.
  9. The results will be printed in the console.

Launching C:\Dev\WinAVR-20100110\bin\avrdude -pm16 -cstk500v1 -P//./COM14 -b57600 -F -Uflash:w:Blinky.hex:a
Output:

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.05s

avrdude: Device signature = 0×1e950f
avrdude: Expected signature for ATMEGA16 is 1E 94 03
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file “Blinky.hex”
avrdude: input file Blinky.hex auto detected as Intel Hex
avrdude: writing flash (1158 bytes):

Writing | ################################################## | 100% 0.61s

avrdude: 1158 bytes of flash written
avrdude: verifying flash memory against Blinky.hex:
avrdude: load data flash data from input file Blinky.hex:
avrdude: input file Blinky.hex auto detected as Intel Hex
avrdude: input file Blinky.hex contains 1158 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.52s

avrdude: verifying …
avrdude: 1158 bytes of flash verified

avrdude done. Thank you.

Congratulation you have uploaded your source code to the Arduino.

FAQ

Q: I keep getting this error message when I upload code with AVRDude to the Arduino.

avrdude: stk500_getsync(): not in sync: resp=0×00
avrdude done.  Thank you.

A: Disconnect and reconnect your Arduino and try again

More help

For more help with setting up Eclipse to work with Arduino see these two posts on the subject

If you have any other questions or suggestion on how to improve this article, please leave a comment.

Did you like this post?

Subscribe To The RSS Feed!
To catch many more articles like this in the future, make it easy on yourself and subscribe to me via RSS. You will not regret it!

Do you have a question?
We will do our best to try and solve any building automation, protocol, integration problem you may have

Chipkin – BACnet Vendor ID

ASHRAE has allocated Chipkin Automation Systems Inc a ASHRAE Vendor ID of 389.

Did you like this post?

Subscribe To The RSS Feed!
To catch many more articles like this in the future, make it easy on yourself and subscribe to me via RSS. You will not regret it!

Do you have a question?
We will do our best to try and solve any building automation, protocol, integration problem you may have

Unpacking Bits from a 16bit Register in a FieldServer Configuration

Introduction

What happens if you want to serve some/all of the bits that form a 16 bit register. ie. Your client reads a 16bit register but you want to serve those bits as separate binary objects.

Here is an example

Lets say the client reads 40001 data into DA_REG[0] (Data Array = DA_REG Offset=0)

The 1st Move copies 1x 16 bit number from DA_REG[0] to DA_PACKED[0].

DA_Packed’s offsets can be interpreted in two ways:

  • A series of 16 bit numbers
  • A series of bits

It depends on what kind of operation access the Data Array. If it’s a 16 bit or analog number type operation then it addesses 16 bit numbers. If the operation is a bit operation like for a binary data point then the operation addresses each bit.

Therefore DA_PACKED[0] is ambiguous.

If you connected a server Map Descriptor to that point and the type is an Analog In/output then it means the 16bit number found at DA_PACKED[0].

If you connected a server Map Descriptor to that point and the type is an Binary In/output then it means the bit number found at DA_PACKED[0] and DA_PACKED[15] is the 16th bit. DA_PACKED[16] is the 1st bit of the next 16 bit number…

If that seems to complicated then add one more move:

Data_Arrays

Move_Only DA_PACKED 0 DA_BIT 0 16

This move moves the 16 bits for DA_PACKED[0] to 16 separate bits with unambiguous offsets and you can use those in the server map descriptors.

Heads Up

Some Modbus server devices number the bits in reverse order. You can only be sure when you test.
Data_Arrays
Data_Array_Name Data_Format Data_Array_Length
DA_REG UINT16 20
DA_PACKED Packed_Bit 100
DA_BIT BIT 1200

Preloads

Data_Array_Name Preload_Data_Index Preload_Data_Value
DA_REG 0 33

Moves

Function Source_Data_Array Source_Offset Target_Data_Array Target_Offset Length
Move_Only DA_REG 0 DA_PACKED 0 1
Move_Only DA_PACKED 0 DA_BIT 0 16
Did you like this post?

Subscribe To The RSS Feed!
To catch many more articles like this in the future, make it easy on yourself and subscribe to me via RSS. You will not regret it!

Do you have a question?
We will do our best to try and solve any building automation, protocol, integration problem you may have

Some of the controls on this property sheet are disabled…

While attempting to change the IP address on my network card I get the following error message.

“Some of the controls on this property sheet are disabled because one or more other Network property sheets are already open”

Steps to reproduce:

  1. Open “network connections” from the control panel.
  2. Right click on “Local Area Connection” and click “properties”

Resolution:

  1. Download drivers for your current network card.
  2. Uninstall all your networks cards from (Control panel->System->Device manager)
  3. Restart your computer.
  4. Let windows attempt to install your network card for you. If windows can not find the correct network card drivers use the one you downloaded in step 1.

If you are still having problems you could try;

Did you like this post?

Subscribe To The RSS Feed!
To catch many more articles like this in the future, make it easy on yourself and subscribe to me via RSS. You will not regret it!

Do you have a question?
We will do our best to try and solve any building automation, protocol, integration problem you may have

Node Offline Responses

When a Client Node on the FieldServer goes offline the corresponding data objects on the FieldServer are also marked offline. If a client polls a virtual FieldServer node for this particular data, an offline response will be returned by the FieldServer. If the client then requests the FieldServer to identify itself, a valid response will be provided in spite of the data being offline. This results in status toggle, with the Server side Client receiving no replies to data requests and marking the Node offline and then again marking the node online after a successful identification poll, then again receiving no replies to data requests and marking the node offline and so on.

The Server Node must therefore be capable of deciding the nature of its response based on the status of relevant Client Nodes. This can be accomplished using responsible Map Descriptors (RDBC, WRBX, and WRBC). In case no acknowledgement of these functions is received, the device is identified as offline and a flag is placed at the data array offset. The virtual FieldServer can be configured using the Offline_Method option to respond to identification requests in one of the following ways:

  1. Ignore_Clients/No Setting (default) – The kernel ignores the status of Client side Nodes and uses only the online/offline status of relevant data objects to decide on the type of response.
  2. Any_Offline – If any relevant Client Node is offline the Server Node will respond with a node offline message as defined by the Server protocol. This option is available for selected drivers only.
  3. All_Offline – If all relevant Client Nodes are offline the Server Node will respond with a node offline message as defined by the Server protocol. This option is available for selected drivers only.
  4. Always_Respond – A response with data currently in the FieldServer is always sent, without considering the online/offline status of the relevant Client Nodes. This option is available for all drivers.

Offline Server Nodes are treated differently by different protocols. Some protocols will have an explicit offline response, while others will simply not respond.

If configured, the node offline response will take priority over the data offline response.<-->

Did you like this post?

Subscribe To The RSS Feed!
To catch many more articles like this in the future, make it easy on yourself and subscribe to me via RSS. You will not regret it!

Do you have a question?
We will do our best to try and solve any building automation, protocol, integration problem you may have

Tags v/s Categories

Earlier, WordPress.com used only categories and no tags. A tag is a new breed of search engine optimization i.e. SEO. Tags are fundamentally keywords for each page or article created by us. It is a non-hierarchical keyword or term assigned to a piece of information such as an internet bookmark, digital image, or computer file. This type of metadata helps depict an item and facilitates it to be found again by browsing or searching. Tags are chosen easily and personally by the item’s creator or by its viewer, depending on the system. Tags are “free-form” words means there is no formal restriction on tags we attach.

Long tag lists should be generally avoided. Tag pages are somewhat like category pages.  We can assign related posts the same tag, and then all those posts appear on the same tag page. During the design stages of the site, make a list on a piece of paper of all the tags we want to use on our site.  These will be the most important keywords for the niche, but they should be keywords that are different to the categories which we have setup for the site.  Tags can be considered as additional pages that Wordpress will create offering us a secondary way of filing our posts.

Although, usage of tags made broad grouping of post topics possible yet to describe a post in more specific terms, more categories are needed. A category is an exclusively defined division in a system of classification. A system of classification here refers to a highly structured, possibly hierarchical system. For example, to borrow from the classification system for living things, we have a tree like “Animals -> Vertebrates -> Mammals -> Horses”. Any of these terms can be considered to be a category, and they fall into a strict structure.

The basic difference between categories and tags is that categories are structured and tags are unstructured. Categories organize, hierarchically. Tags need not. Tags provide meta-information, Categories need not. Tags cross-connect, Categories do not. <–>

Did you like this post?

Subscribe To The RSS Feed!
To catch many more articles like this in the future, make it easy on yourself and subscribe to me via RSS. You will not regret it!

Do you have a question?
We will do our best to try and solve any building automation, protocol, integration problem you may have

Google Page Rank

PageRank is a link analysis algorithm used by the Google Internet search engine that assigns a numerical weighting to each element of a hyperlinked set of documents, such as the World Wide Web. The purpose behind this is to measure the relative importance of the element within the set. It is a probability distribution check which represents the possibility that a person randomly clicking on links will arrive at any particular page.

Did you like this post?

Subscribe To The RSS Feed!
To catch many more articles like this in the future, make it easy on yourself and subscribe to me via RSS. You will not regret it!

Do you have a question?
We will do our best to try and solve any building automation, protocol, integration problem you may have

Get to know your Power Meter – What is Real, Apparent and Reactive Power

First – a simple question

  Right or Wrong? Power = Voltage x Current

That statement is correct for DC systems but there are two major complications for AC systems.

  • The value of current and voltage keeps changing. Which value do you use ?
  • The voltage and the current may not be in phase. Multiplying the current and the voltage when they are not in phase requires and adjustment to compensate for the phase. It is this phase shift that forces us to define Real, Apparent and Reactive Power.
    This phase shift occurs when a power source feeds an inductive or capacitve load”. Most loads are either inductive (motors) or resistive (heaters) and therefore the phase shift is typically in one direction.

    • A motor has a winding. A wound conductor essentially defines an inductor. Thus the winding presents the resistance of the wound wire and the inductance resulting from the winding.

 

 

 

RMS or Effective Value

  Peak values in the alternating voltage or current curves only lasts a short instant. They are not really representative of the ability of the voltage and current to do work and thus they are not used in Power Calculations.Scientists use a statistical method to define the effective values. It is called the RMS or Root-Mean-Square values. The result of the definition is that:Veff / rms = 0.707 x Vpeak

The same applies to current too.

TIP: You can reasonably assume that all the Voltages and Currents reported by a Power Meter are reported as RMS or Effective values unless otherwise indicated.

TIP: Most multi meters report RMS values

 

 

 

Apparent Power

  Apparent Power is the power delivered by a power source to a load like a motor. In almost all real world situations that use AC, you need to supply more power (Apparent Power) to a device than it will do work (Real Power).The (vector) difference between the two represents the work done to overcome the inductive and capacitive effects of the load.Apparent Power is measured in units of VA – Volt-amperes. These are actually Watts but we use the new unit name to reduce confusion. Thus when you see VA on a data sheet you can reasonably conclude that they are talking about Apparent Power.

Apparent Power is calculated:

S(Common symbol for Apparent Power) = Veff / rms x Ieff / rms – Single Phase Calc

 

 

Power Factor and Phase

  Power Factor is calculated: PF = Cosine ( phase angle in radians)Power factor has no engineering units.The value of PF ranges from -1 to 0 to 1 (lagging – none – leading)

Loads that only present a resistive load (no capacitance or inductance) have a PF of 1.

Inductive Loads

 
Current phase lags the VoltageTypical – Transformers and motors (wound conductors) 

Capacitive Loads

 
Current phase leads the VoltageTypical – Buried Cables, capacitor banksThere is nothing ‘wrong’ with having a power factor that isn’t 1.0.

 

 

Real Power and Reactive Power

  Think of Real Power as useful power – a measure of how much work is being done.The units of Real Power are Watts.Real Power is calculated : P(Real) = S(Apparent Power) x pf

Reactive Power is the (vector) difference between Apparent Power and Real Power. The energy used to produce the Reactive Power is stored in the magnetic/electrical field of the Inductive Load. In the case of the capacitive load the magnetic/electrical field of the Inductive Load produces the Reactive Power. Reactive Power cannot be harnessed to do useful work.

Reactive Power is identified by the symbol : Q

The engineering units of Reactive Power are VAR – Volt-amperes Reactive. These are also Watts but we use VAR so that we know we are talking about Reactive Power.

 

 

Diagram: RMS measurement

diag11

Diagram: Leading / Lagging

diag21

THD – Total harmonic Distortion (also called Distortion)

  In simple terms THD is a measure of distortion reported as %. If a device (any active device but think of rectifiers, variable speed drives … as practical examples) is given a sine wave as in input the output is never a faithful 100% reproduction of the input. A series of harmonics of the original wave distort the original wave form. The THD % is an attempt to ‘numberize’ the degree of distortion to allow for comparison. The % number is somewhat controversial because some harmonics are more important than others and there is no weighting.THD(%) = 100 * SQRT[(V22 + V32 + V42 + ... + Vn2)] / VtWhere V2, V3 are the RMS values of each voltage harmonic and Vt is the total RMS output voltage.

 

 

 

Sag / Swell or Dip / Surge

  Duration is 0.5 cycle and greater. Voltage sags are the most common power disturbance. Voltage sags can arrive from the utility. In most cases, sags are generated inside a building. For example, in residential wiring, the most common cause of voltage sags is the starting current drawn by refrigerator and air conditioning motors.Sags do not generally disturb incandescent or fluorescent lighting. motors, or heaters. However, some electronic equipment lacks sufficient internal energy storage and, therefore, cannot ride through sags in the supply voltage. Equipment may be able to ride through very brief, deep sags, or it may be able to ride through longer but shallower sags. 

 

 

Under / Over Voltage

  Over Voltage is an increase in effective voltage to more than 110% for longer than one minute. Under Voltage is a decrease in effective voltage to less than 90% for longer than one minute. Take care with this definition because it tends to change from vendor to vendor.  

 

Transient Voltages / Spikes / Surges

  Refers to short duration (less than 1 cycle) events. Low frequency transients are often called “capacitor switching transients”. High frequency transients are often called impulses, spikes, or surges. They can be caused when a discharged power-factor-correction capacitor is switched on across the line.High frequency transients are caused by lightning, and by inductive loads turning off. Typical rise times are on the order of a microsecond; typical decay times are on the order of a tens to hundreds of microseconds. Often, the decay will be an exponential damped ringing waveform, with a frequency of approximately 100 kHz.Extremely fast transients, or EFT’s, have rise and fall times in the nanosecond region. They are caused by arcing faults, such as bad brushes in motors, and are rapidly damped out by even a few meters of distribution wiring. Standard line filters, included on almost all electronic equipment, remove EFT’s.

 

 

 

Did you like this post?

Subscribe To The RSS Feed!
To catch many more articles like this in the future, make it easy on yourself and subscribe to me via RSS. You will not regret it!

Do you have a question?
We will do our best to try and solve any building automation, protocol, integration problem you may have

Hubs vs Switches – Using WireShark to sniff network packets

Gotcha #1 : Use a hub not a switch

 
Why: Switches don’t copy all messages to all ports. They try and optimize traffic so when they learn which port a device is connected to they send all messages intended for that device to that port and stop copying to all ports. (The jargon they use for this function is ‘learning mode’)

How do you know it’s a hub: Just because it calls itself a hub doesn’t mean it is one.

  • If it says full-duplex in the product description it’s probably not a hub.
  • A switch that allows you to turn off the learning mode is effectively a hub.  
  • A switch with a monitored port copies all messages to the monitored port and thus you can use that port as if it were a hub. 
  • If it says ‘switch’ and you cant turn off learning mode and it doesn’t have a monitor port then it is not a hub. 
  • A router is never a hub.

 

Gotcha #2 : Mixing 10 and 100 mbits/sec can cause problems.

 
Not all hubs copy 10mbit messages to 100mbit ports and vice versa.Use a 10mbit/sec hub if you are on a mixed network – almost all other faster devices are speed sensing and will downgrade themselves to 10mbits/sec and thus you will see all the packets. This is not true of some building automation engines where the speed of the port is configured.

You can work around this problem by connecting higher speed devices to a self sending switch/hub and then connect that switch/hub to the 10mbit hub.

Recommended Hubs

  • 10Mbit/sec Networks – DX-EHB4 – 4 Port 10 Mbps HUB
  • Netgear – DS104 Dual Speed HUB
  • 10Mbit/sec Networks – D-LINK DE-805TP
Did you like this post?

Subscribe To The RSS Feed!
To catch many more articles like this in the future, make it easy on yourself and subscribe to me via RSS. You will not regret it!

Do you have a question?
We will do our best to try and solve any building automation, protocol, integration problem you may have

The dangers of XML for System Intergators

Just because a system has an XML interface does not mean you can use it. There are some very important questions you must ask in evaluating the usefulness of an XML interface.
XML provides a syntax and structure but imposes no obligation on how it must be used.

Consider the example of spoken language. English imposes rules on syntax and structure but does not oblige you to say anything useful or comprehensible to other people.

Data Transfer using English

  • “Give me the data!” is a valid instruction in English
  • “Please email me the 2007 sales figures, grouped by territory with a monthly breakdown in tabular format” is also a valid instruction.

Your assistant is likely to respond well to the 2nd instruction and not know how to respond to the first.

 

The same considerations apply to XML. Now consider an XML example:

Data Transfer using XML

Format example 1

	< Data Xfer >
		< Send data now ! >
	< /Data Xfer >

Format example 2

	< poll >
		< source >
			< nodeId > 22 < /nodeId >
		< dest >
			< nodeId > 11 < /nodeId >
			< nodeName > node_A < /nodeName >
		< /dest >
		< responseRequirement > dataOnly < /responseRequirement >
		< query >
			< action > read < /action >
			< tableName > Setpoints < /tableName >
			< address > 10 < /address >
			< length > 3 < /length >
		< /query >
	< /poll >

 

Its not hard to see that the success of the query is dependent on the ability of the system to understand the query. Just because it complies with the rules of the XML syntax does not mean the interface will understand it.

Here are some key questions to ask:

1. Is the XML interface implemented using TCP/IP or UDP?

2. What is the XML Schema? The schema provides the structure of the XML packets used to query and respond with system data. It shows how the messages must be formatted and defines the data types of the various message fields (in the world or protocols the schema is equivalent to the protocol specification).

3. All the other normal questions you would ask of an interface – What data is available? How much can be transferred at once? What is the scaling? How are data objects addressed? etc…

Did you like this post?

Subscribe To The RSS Feed!
To catch many more articles like this in the future, make it easy on yourself and subscribe to me via RSS. You will not regret it!

Do you have a question?
We will do our best to try and solve any building automation, protocol, integration problem you may have