ramen79 Ответов: 2

Регистрация данных Easymodbus


Я могу получить данные из регистратора данных интерфейса ethernet с помощью приведенного ниже кода, используя EasyModbus и ModbusTcp только в целочисленном типе.
Но мне нужно получить исходные данные, которые находятся в десятичном типе.

пожалуйста помочь....

Что я уже пробовал:

Dim ComError = 0

      Dim ModbusClient As EasyModbus.ModbusClient = New EasyModbus.ModbusClient(Me.TextBox1.Text, Me.TextBox2.Text)  'connecting using IP, port

      Try
          ModbusClient.Connect()
          TextBox3.Text = ComError
          TextBox3.ForeColor = Color.Green
          Label4.Text = "Connected to Slave"
          Label4.ForeColor = Color.Green
          If TextBox3.Text = 0 Then
              Label4.Text = "logging......"
              Dim Regs As Integer()
              Regs = ModbusClient.ReadHoldingRegisters(0, 5)

              Me.TextBox4.Text = Regs(0)
              Me.TextBox5.Text = Regs(1)
              Me.TextBox6.Text = Regs(2)
              Me.TextBox7.Text = Regs(3)
              Me.TextBox8.Text = Regs(4)


              ModbusClient.Disconnect()

          End If


      Catch ex As Exception
          TextBox3.Text = 1
          TextBox3.ForeColor = Color.Red
          Label4.Text = "Connection Error!"
          Label4.ForeColor = Color.Red
      End Try

2 Ответов

Рейтинг:
2

Graeme_Grant

Ты этим пользуешься? EasyModbusTCP/UDP/RTU .NET скачать | SourceForge.net[^]

Если я правильно понимаю проблему, вы смотрите на необработанный поток данных. Таким образом, вам нужно будет получить байты для десятичного значения и преобразовать их. Вот пример C# : c# - эффективное преобразование байтового массива в десятичный - переполнение стека[^]

VB.Net версия:

Public Shared Function ByteArrayToDecimal(src As Byte(), offset As Integer) As Decimal
	Dim i1 = BitConverter.ToInt32(src, offset)
	Dim i2 = BitConverter.ToInt32(src, offset + 4)
	Dim i3 = BitConverter.ToInt32(src, offset + 8)
	Dim i4 = BitConverter.ToInt32(src, offset + 12)

	Return New Decimal(New Integer() {i1, i2, i3, i4})
End Function

И использовать:
Dim bits As System.Int32() = Decimal.GetBits(CDec(10))


ramen79

Спасибо за Ваш быстрый ответ...
Я новичок в этом типе программ, не могли бы вы упомянуть, где изменить мой код..
Это будет для меня большим подспорьем.
заранее спасибо..

Graeme_Grant

Это зависит от принимаемого потока данных. Вы знаете, как устроен этот поток?

Рейтинг:
2

mewindy

the easymodbus does have built in functions to convert to decimal
static float ConvertRegistersToFloat(int[] registers)