Welcome to my World Вторник, 26.11.2024, 06:55
Любое использование материалов, их подборки, дизайна и элементов дизайна может осуществляться лишь с разрешения автора (правообладателя) и только при наличии ссылки на ресурс
Приветствую Вас Гость | RSS


Меню сайта

Категории раздела
Работа с контролами [3]
(Button)
Forms [1]
Работа с формами
Сеть [1]
Работа с сетью
Compact Framework [1]
Compact Framework
Внешние устройства [1]
Работа с внешними устройствами

Главная » Статьи » CSharp » Внешние устройства

ModBus Reader
 
 
Программа считывает показания преобразователя давления СДВ с интерфейсом RS485
по протоколу ModBus через USB-адаптер "Меркурий 221".
 
Настройки порта выглядат так:
 
SerialPort SPort;
SPort = new SerialPort(lstPorts.Text);
SPort.BaudRate = Convert.ToInt32(lstBaudrate.SelectedItem.ToString());
SPort.Parity = Parity.Even;
SPort.DataBits = 8;
SPort.StopBits = StopBits.One;
SPort.ReadTimeout = 2000;
SPort.WriteTimeout = 1000;
 
Далее заполняем массив байт для отправки сообщения на устройство:
 
byte device_address=Convert.ToByte(txtDeviceAddress.Text);
byte data_type = 0x03;
Int64 start_address = Convert.ToInt64(txtStartAddress.Text);
//start_address = 0x28;
Int64 amount_bytes = 2;
start_address=start_address -1;

Int64 start_address_higer=start_address/256;
Int64 start_address_lower=start_address % 256;

Int64 amount_bytes_higer=amount_bytes/256;
Int64 amount_bytes_address_lower=amount_bytes % 256;


byte[] toSend = new byte[8];

toSend[0] = device_address;
toSend[1] = data_type;
toSend[2] = (byte)start_address_higer;
toSend[3] = (byte)start_address_lower;
toSend[4] = (byte)amount_bytes_higer;
toSend[5] = (byte)amount_bytes_address_lower;

int crc_result=CRC.crc16(toSend, 6);
byte[] crc_bytes=BitConverter.GetBytes(crc_result);
toSend[6]= crc_bytes[1];
toSend[7]= crc_bytes[0];
 
где CRC - класс расчета контрольной суммы.
Ну и сама функция считывания данных с устройства выглядит так:
 
byte[] buf = new byte[5 + 2*(amount_bytes)];
str_out = Convert.ToString(toSend);
SPort.Write(toSend, 0, 8);
int btor = SPort.BytesToRead;

for (int i = 0; i < (5 + 2*(amount_bytes)); i++)
{
buf[i] = (byte)(SPort.ReadByte());
}
 
Категория: Внешние устройства | Добавил: dev (11.01.2010)
Просмотров: 7817 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Поиск

Наш опрос
Оцените мой сайт
Всего ответов: 91

Друзья сайта
alsproject.ru

Статистика

Copyright MyCorp © 2024Сайт управляется системой uCoz