Сеть DeviceNet представляет собой один или несколько приборов, каждый из которых однозначно идентифицируется в сети по присвоенному ему адресу – MAC ID. С каждым из приборов возможно два типа обмена – обмен явными (explicit) сообщениями и обмен I/O пакетами.
При explicit-обмене контроллер представляется в виде объектно-ориентированной модели, и состоит из набора классов, объектов этих классов, атрибутов и методов объектов. Атрибуты могут быть как простыми (BYTE, WORD, REAL) так и составными из простых типов. Драйвер поддерживает два метода классов: Get_Attribute_Single() и Set_Attribute_Single(). Подробнее про объектную модель см. документацию DeviceNet.
В протоколе DeviceNet также предусмотрел специальный тип обмена – I/O Messaging. При данном типе обмена после установки соединения master и slave устройства обмениваются блоками данных произвольной длины – размеры принимаемого и отправляемого буфера задаются при программировании контроллера. Блок данных, посланный ведущим компьютером, интерпретируется контроллером согласно заложенной программе, он может иметь нулевую длину или игнорироваться. В ответ на запрос контроллер формирует свой блок данных и отправляет ведущему.
Список файлов драйвера протокола DeviceNet:
Canbus_stub.dll – интерфейс CAN-bus;
DN_Editor.dll – редактор объектной модели устройств DeviceNet;
canXXmacYY.adn – файлы с объектной моделью подключенных приборов, XX – номер интерфейса шины CAN, YY – MAC ID прибора;
DeviceNetSettings.dat – двоичный файл с настройками параметров DeviceNet;
device_net_editor_plugin.dll – библиотека для работы в среде разработки TM6;
media9.dll – модуль описания носителя;
t12s9.dll – библиотека драйвера, обеспечивают обмен между МРВ и устройствами DeviceNet.
Файлы должны находиться в корневой директории Trace Mode.
Библиотека интерфейса шины CAN canbus_stub.dll должна находиться в директории Trace Mode. Эта библиотека должна экспортировать следующий набор функций:
int CAN_Init(int channel, eCIBR baud_rate);
int CAN_Send(int channel, unsigned short id, unsigned char* data, unsigned char data_len);
int CAN_Recv(int channel, unsigned short* pId, unsigned char* data, unsigned char* pLen);
void CAN_Close(int channel);
Первым параметром каждой функции является номер канала CAN, в функции отправки и приема пакетов передаются/принимаются также идентификатор пакета, массив байт и его длина (до 8 байт). При инициализации скорость обмена задается в виде константы, согласно перечислению:
enum eCIBR
{
CIBR_10K, // 0
CIBR_20K, // 1
CIBR_50K, // 2
CIBR_125K, // 3
CIBR_250K, // 4
CIBR_500K, // 5
CIBR_800K, // 6
CIBR_1000K // 7
};
Драйвер поставляется с библиотекой для платы – интерфейса шины CAN производства ООО "Марафон" ( http://can.marathon.ru/ ).
При использовании других плат пользователь должен написать библиотеку с реализацией перечисленных функций самостоятельно.