|
|
|
Статистика сайта |
Всего статей:
Категорий/рубрик:
Комментариев:
Пользователей: |
33
7
239
2125 |
|
Юмор от "Городок" |
|
|
Для корректного отображения этого элемента вам необходимо установить FlashPlayer и включить в браузере Java Script.
|
|
|
|
Программа для управления частотным преобразователем PM-S540 фирмы LG c компьютера |
Автор: Рудаков Г. В.
Дата: 2010-01-05 |
На практике большинство частотных приводов оснащены коммуникационной платой ModBus-RTU (рисунок 1), которая позволяет посредством стандарта передачи данных по двухпроводному полудуплексному многоточечному последовательному каналу связи, RS485, с применением конвертора интерфейса USB/RS485, передавать на ПК большое количество данных.
Этими данными могут быть текущие значения напряжения, силы тока, частоты на клеммах двигателя, различная сервисная информация, например, аварии - все то, что помогает делать продукцию более понятной конечным пользователям.
Рисунок 1 – Электроника ЧП LG PM-S540. Плата связи MODBUS-RTU.
Для получения информации с частотного преобразователя, необходима коммутационная программа, которая умела обращаться к регистрам, считывая и записывая их состояние. На рисунке 2 представлен общий вид программы. За основу был взят код библиотеки с сайта http://www.codeproject.com/
Рисунок 2 – Окно программы "Modbus Poll for LG PM-S540".
Программа работает следующим образом:
Производим настройки связи, выбираем адрес ведомого устройства и устанавливаем связь кнопкой "Соединиться".
Выбираем требуемое действие: чтение или запись регистра, выбираем имя регистра из списка (его адрес автоматически появится в строке состояния) и нажимаем кнопку "Выполнить".
Результат операции чтения регистра отобразится в ListBox.
Рассмотрим исходный код основных функций библиотеки modbus.cs.
Функция создания сообщения
private void BuildMessage(byte address, byte type, ushort start, ushort registers, ref byte[] message)
{
byte[] CRC = new byte[2];
message[0] = address;
message[1] = type;
message[2] = (byte)(start >> 8);
message[3] = (byte)start;
message[4] = (byte)(registers >> 8);
message[5] = (byte)registers;
GetCRC(message, ref CRC);
message[message.Length - 2] = CRC[0];
message[message.Length - 1] = CRC[1];
}
Функция чтения нескольких регистров
public bool SendFc3(byte address, ushort start, ushort registers, ref short[] values)
{
if (sp.IsOpen)
{
sp.DiscardOutBuffer();
sp.DiscardInBuffer();
byte[] message = new byte[8];
byte[] response = new byte[5 + 2 * registers];
BuildMessage(address, (byte)3, start, registers, ref message);
try
{
sp.Write(message, 0, message.Length);
GetResponse(ref response);
}
catch (Exception err)
{
modbusStatus = "Ошибка при чтении: " + err.Message;
return false;
}
if (CheckResponse(response))
{
for (int i = 0; i < (response.Length - 5) / 2; i++)
{
values[i] = response[2 * i + 3];
values[i] <<= 8;
values[i] += response[2 * i + 4];
}
modbusStatus = "Чтение выполнено!";
return true;
}
else
{
modbusStatus = "Ошибка CRC";
return false;
}
}
else
{
modbusStatus = "Порт связи закрыт!";
return false;
}
}
#endregion
Функция записи нескольких регистров
public bool SendFc16(byte address, ushort start, ushort registers, short[] values)
{
if (sp.IsOpen)
{
sp.DiscardOutBuffer();
sp.DiscardInBuffer();
byte[] message = new byte[9 + 2 * registers];
byte[] response = new byte[8];
message[6] = (byte)(registers * 2);
for (int i = 0; i < registers; i++)
{
message[7 + 2 * i] = (byte)(values[i] >> 8);
message[8 + 2 * i] = (byte)(values[i]);
}
BuildMessage(address, (byte)16, start, registers, ref message);
try
{
sp.Write(message, 0, message.Length);
GetResponse(ref response);
}
catch (Exception err)
{
modbusStatus = "Ошибка при записи: " + err.Message;
return false;
}
if (CheckResponse(response))
{
modbusStatus = "Запись выполнена!";
return true;
}
else
{
modbusStatus = "Ошибка CRC";
return false;
}
}
else
{
modbusStatus = "Порт связи закрыт!";
return false;
}
}
#endregion
В ходе теста выяcилось, что имя регистра по даташиту, сооветсвенно и в программе, может быть со смешением относительно физического адреса. Величина этого смещения определялась опытным путем, и, похоже, зависит от версии программного обеспечения ЧП.
P.S. Полный код программы представлен в архиве..
Рейтинг: |
Просмотров: 71146 |
|
Гости не имеют права добавлять комментарии и проставлять рейтинг. |
|
Автор: Гришаня Рудаков (2010-04-21, 21:55)
Программной тишины нет. Предположу, что ответственность за ней лежит на конверторе USB/RS-485.. [Ответить]