Просмотр полной версии : Сбор данных с приборов OWEN через System.IO.Ports.SerialPort
Кто-нибудь пробовал собирать данные с приборов OWEN через System.IO.Ports.SerialPort? Если да, то как, например, мне выяснить значение какой-либо переменной?
Тоже очень интересует этот вопрос!
Что именно не получается?
Не знаю что именно отправлять в порт для запроса информации. Хотелось бы увидеть что-то в этом роде.
17393
Соответственно, такая реализация отправки сообщения-запроса (для данного датчика, а не для ТРМ-200, конечно же):
...
private void SendMsg(Byte SensorAdr)
{
Byte[] OUTMessege = {0x68, 4, 0, 4, 8};
OUTMessege[2] = SensorAdr;
int CheckSum = SensorAdr + 8;
OUTMessege[4] = (Byte)CheckSum;
_serialPort.Write(OUTMessege, 0, 5);
}
...
Это уже другой вопрос. Если вам «ехать», то есть готовая библиотека NModbus. Вот тут параллельная тема пошла: http://owen.ru/forum/showthread.php?t=20888&p=166343&viewfull=1#post166343
Если вам «шашечки» (в смысле узнать, что нужно голыми руками отправлять в порт и как разбирать ответ), то берите любое описание протокола (хоть даже примеры из Википедии (https://ru.wikipedia.org/wiki/Modbus)) и подставляйте туда номера регистров из руководства к ТРМ.
Параллельная тема, это моя) не совсем понимаю как именно подключить эту библиотеку (NModbus)
В курсе, что ваша. Зачем темы плодить? Вы бы хоть сказали для начала, с какой студией сидите.
17394
Теперь буду писать только в эту тему.
Зачем изобретать велосипед (https://code.google.com/p/nmodbus/)? Если студия с нюгетом, то открыть менеджер нюгетов и тупо добавить NModbus. Если нет, то добавить в солюшн как обычно ручками. Дальше просто
using System;
using Modbus.Device;
using System.IO.Ports;
namespace NModbusExample
{
class Program
{
static void Main(string[] args)
{
using (var port = new SerialPort("COM1") { BaudRate = 115200 })
{
port.Open();
var mbus = ModbusSerialMaster.CreateRtu(port);
var reg = mbus.ReadHoldingRegisters(1, 0, 1);
Console.WriteLine(reg[0]);
}
}
}
}Естественно, подставить свои параметры порта, адрес устройства и номер нужного регистра.
Спасибо за терпение, но ещё хотелось бы узнать по-подробнее по поводу последних двух строчек кода, а именно: что значат параметры "mbus.ReadHoldingRegisters(1, 0, 1);" (с первым понятно - адрес устройства).
Собственно, вот и ответ зачем нужно изобретать велосипед, на более низком уровне всё просто и понятно и не надо разбираться с тем как пользоваться какими-то чужими наработками.
Номер регистра и число регистров. В модбасе данные устройств размазаны по этим 16-битным регистрам. Допустим, где-нибудь в руководстве к ТРМ написано, что температура лежит 32-битным числом формата IEEE754 в регистрах 16 и 17. Тогда вы можете запросить это значение как ReadHoldingRegisters(1, 16, 2). В ответ вам приходит массив из двух 16-битных чисел, которые вы сами должны интерпретировать как 32-битный float. Википедию открывайте кароч.
Да, спасибо, я уже изучил и википедию, и вот это. (http://www.lammertbies.nl/comm/info/modbus.html) В общем огромное спасибо за помощь. Кажется что-то получил. Сейчас буду дальше разбираться.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot