Począwszy od wersji API 2.7.0.0, możliwe jest otwarcie połączenia MATES bez zewnętrznego pliku konfiguracyjnego. Dane konfiguracyjne podawane są jako tekst bezpośrednio z poziomu kodu źródłowego. Dla API w C wygląda to następująco:
#include <stdio.h>
#include "mates.h"
static char *conf = \
"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
"<uOS_monitor_configuration>"
" <local_address>1</local_address>"
" <named_pipe map=\"1\">"
" <name>\\\\RAKIETA\\pipe\\MATES_PROXY_PIPE</name>"
" <timeout>5000</timeout>"
" </named_pipe>"
"</uOS_monitor_configuration>";
int main(void)
{
int success = 0;
char buf[0x200];
int node = mates_ucc_mk1_1;
MATES_HANDLE h = mates_open_buffer(conf, 1);
if (mates_discover_single_node(h, node) == UOS_STATUS_OK)
{
if (mates_node_info(h, node, buf, sizeof(buf)) == UOS_STATUS_OK)
{
success++;
printf("Found node #%d:\n", node);
printf("%s\n", buf);
}
else
{
mates_print_errors();
}
mates_close(h);
return (success == 1 ? 0 : -1);
}
else
{
return (0);
}
}
W C# dodatkowo możemy korzystać z klasy reprezentującej konfigurację uOS_monitor:
using System;
using System.IO;
using System.Xml;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Viresco.Mates;
using Viresco.uOS_monitor.Config;
using Viresco.Utils.Xml;
namespace unit_tests
{
[TestClass]
public class mates_test_15
{
[TestMethod]
public void TestMethod()
{
Configuration cfg = new Configuration();
cfg.LocalAddress = 1;
var pipe = new NamedPipe();
pipe.Name = @"\\RAKIETA\pipe\MATES_PROXY_PIPE";
pipe.Timeout = 5000;
pipe.Map = 1;
cfg.NamedPipe.Add(pipe);
using (Mates mates = Mates.FromBuffer(Serialization.ClassToXmlString(cfg), 1))
{
try
{
UccNode ucc = mates.NewUccNode(NodeId.mates_ucc_mk1_1);
ucc.AlcdWrite(0, 0, "mates_open_buffer");
}
catch (Exception ex)
{
Console.Write("Cannot discover node: " + ex + "\n");
}
}
}
}
}