Как правильно получать данные от Mbus в C#?
У меня действительно ужасная проблема, от которой меня почти тошнит. В течение 2-3 дней я занимался этим вопросом протокола, и я нахожусь здесь, чтобы получить некоторую помощь от вас, ребята. Я надеюсь, что буду решать. Заранее спасибо. У меня был код в Vb, который использует старую библиотеку MsComm. Поэтому я решил изменить все вещи с помощью C#. Я в порядке с открытием , закрытием порта и отправкой данных и т. д.
В Vb; у меня есть следующая часть кода, которая предназначена для получения данных от драйвера Mbus через RS485. Как только вы отправили это сообщение, оно ответит вам на получение данных. Это работает, и никаких проблем.
Dim SendData(19) As Byte Dim sending As String SendData(0) = &HFA SendData(1) = Mid(DriverNo, 1, 2) SendData(2) = Mid(DriverNo, 3, 2) SendData(3) = Mid(DriverNo, 5, 2) SendData(4) = Mid(DriverNo, 7, 2) SendData(5) = 210 SendData(6) = CheckSum_Temass(5) SendData(7) = &HFB sending = "" For i = 0 To 7 sending= sending + Chr(SendData(i)) Next SP.Output = sending
Итак , приведенный выше код отлично работает в Vb и Vb.Net. Однако, когда я конвертирую его в C#, как показано ниже ; я не могу получить ответ от драйвера mbus. При отправке данных через RS485 я вижу, что горит желтый светодиод. Обычно при получении данных вы можете видеть, что красный светодиод также горит. Код на языке Си# ;
string sending= ""; byte[] SendData = new byte[8]; SentData[0] = 0xfa; SendData[1] = Convert.ToByte((Strings.Mid(DriverNo, 1, 2))); SendData[2] = Convert.ToByte((Strings.Mid(DriverNo, 3, 2))); SendData[3] = Convert.ToByte((Strings.Mid(DriverNo, 5, 2))); SendData[4] = Convert.ToByte((Strings.Mid(DriverNo, 7, 2))); SendData[5] = 210 SendData[6] = CheckSum_Temass(5); SendData[7] = 0xfb; for (int i = 0; i <= 7; i++) { sending= sending+ ((char)SendData[i]); } sp.Write(sending);
Я не вижу никаких проблем с этим, но Vb-код работает, а C# - нет.
В c# следующая часть моей функции открытого порта ;
sp.PortName = portName; sp.BaudRate = baudRate; sp.DataBits = databits; sp.Parity = parity; sp.StopBits = StopBits.One;//stopBits; sp.PinChanged += SerialPinChangedEventHandler1; sp.ErrorReceived += SerialErrorReceivedEventHandler1; sp.DataReceived += new SerialDataReceivedEventHandler(DataReceived); sp.ReadTimeout = 1000; sp.WriteTimeout = 1000;
Все работает нормально. Я вижу, как я уже сказал, поток данных через Mbus через RS485. Я вижу это по светодиоду TX, который горит все время, когда я посылаю данные.Однако, как я уже сказал, RX led не срабатывает.
George Jonsson
Вы сравнивали содержимое переменной "отправка" между vb и c#?
Каково содержание "DriverNo"?
Не ВБ запустить показатель с 1?
В этом случае вы должны уменьшить индекс в c#
Преобразовать.ToByte((Strings.Mid(DriverNo, 0, 2))); // Начните с 0 вместо этого
Burak Demirsoy
Как вы можете видеть из строк.Середине какой микрофон.На языке VisualBasic.CompilerServices функции класса.Поэтому он не начинается с 0 в C#. DriverNo = "20021267" все они определены в коде.
Я сравнил отправленные данные с C# и Vb.Net, оба показывают один и тот же вывод в текстовом файле (я написал в тексте вывод). Итак, с этого момента я понял, что проблема должна быть связана с выходной функцией [sp.Output(VB.Net MSComm) sp.Write(C# Serial Com))
sakzu@hotmail.com
На моем канале каждый день Бурак бей, Бенде МБУС иль uğraşıyorum şuan ве не yaptıysam сведения alamadım. Tx ok ama rx te problem var bu konuda yardımcı olabilir misiniz?