delta DVP28SV2+овен мв110-224.1тд+тензодатчик

gallyamov_mm_91
Сообщения: 16
Зарегистрирован: 18 фев 2023, 12:27

Re: delta DVP28SV2+овен мв110-224.1тд+тензодатчик

Сообщение gallyamov_mm_91 »

тут как раз таки стоит задача справиться без ОПС сервера. построить опрос через ПЛК.
спецификацию читал. пробовал следующим образом:
ushort[] holding_register = master.ReadHoldingRegisters(16, 4099, 4);

// Отображаем текст на форме
this.Invoke(new EventHandler(textBox1_TextChanged));
}
// Обновляем текст на форме
private void textBox1_TextChanged(object sender, EventArgs e)
{
this.txtReceived.Text = master;
}
теперь столкнулся с ошибкой Ошибка CS0029 Не удается неявно преобразовать тип "Modbus.Device.ModbusSerialMaster" в "string".
пробовал BitConverter.ToString() но не помогает

pkl
Сообщения: 1468
Зарегистрирован: 23 ноя 2010, 10:08

Re: delta DVP28SV2+овен мв110-224.1тд+тензодатчик

Сообщение pkl »

gallyamov_mm_91 писал(а):
15 мар 2023, 09:35
тут как раз таки стоит задача справиться без ОПС сервера. построить опрос через ПЛК.
Я вас не отговариваю. Просто предлагаю использовать ОПС для проверки связи с ПЛК.
В данный момент причин отсутствия чтения море. Начиная от вашего приложения, заканчивая проводами, протоколом, и т.д.
Наладите опрос ПЛК через ОПС, потом уже спокойно терзайте C#.

gallyamov_mm_91
Сообщения: 16
Зарегистрирован: 18 фев 2023, 12:27

Re: delta DVP28SV2+овен мв110-224.1тд+тензодатчик

Сообщение gallyamov_mm_91 »

Связь с плк фиксируется же при подключение когда мы открываем порт, да и в самом ПЛК я вижу индикацию обмена по 232 интерфейсу

Олег
Сообщения: 795
Зарегистрирован: 18 янв 2011, 23:06

Re: delta DVP28SV2+овен мв110-224.1тд+тензодатчик

Сообщение Олег »

Код: Выделить всё

holding_register = master.ReadHoldingRegisters(16, 4099, 4);
Нормально, поставьте точку останова в отладке и посмотрите что в массиве holding_register будет (должны быть значения регистров ответа от Дельты). Объёкт master на ASCII настроить не забыли? если RTU используете, тогда и Дельту на этот сорт протокола настроить нужно ( Модбас аски у Дельты по умолчанию) У вашей Дельты сетевой адрес точно 16? по умолчанию 1.

Код: Выделить всё

this.txtReceived.Text = master;
Вы точно умеете проги рисовать? с какого бодуна стрингу объект пытаетесь присвоить? В вашем случае нужно преобразовать массив holding_register в нужные вам значения.
--
nmodbus хорошая библиотека под Net.
ftp://ftp.icpdas.com/pub/cd/8000cd/napd ... dbus/demo/
тут есть хорошие примеры под неё

gallyamov_mm_91
Сообщения: 16
Зарегистрирован: 18 фев 2023, 12:27

Re: delta DVP28SV2+овен мв110-224.1тд+тензодатчик

Сообщение gallyamov_mm_91 »

на данный момент программа практически готова. идет непрерывный опрос, данные идут единственное не устраивает формат данных.
когда я опрашиваю ОПС сервером один и тот же регистр (рис4) я могу указать в настройках тип данных. по умолчанию там идет INT16, когда я ставлю FLOAT я получаю данные в том виде как и должно быть(52.5206) как реализовать это в программе. пытался конвертировать но что то не выходит. может метод считывания другой выбрать
Вложения
WindowsFormsApp8.7z
(131 КБ) 43 скачивания
4.jpg
4.jpg (29.56 КБ) 1048 просмотров
3.jpg
3.jpg (44.39 КБ) 1048 просмотров

gallyamov_mm_91
Сообщения: 16
Зарегистрирован: 18 фев 2023, 12:27

Re: delta DVP28SV2+овен мв110-224.1тд+тензодатчик

Сообщение gallyamov_mm_91 »

using Modbus.Device;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp8
{
public partial class Form1 : Form
{
SerialPort port = new SerialPort();
private bool is_running = false;
public Form1()
{
InitializeComponent();
label1.Text = "Порт закрыт";
label2.Text = "опроса остановлен";
}

private void Form1_Load(object sender, EventArgs e)
{

}

// Открытие COM-порта
private void button1_Click(object sender, EventArgs e)
{
if (port.IsOpen == false)
{
port = new SerialPort("COM2", 9600, Parity.Even, 7, StopBits.One);
port.Open();
label1.Text = "Порт открыт";
}
}

// Закрытие COM-порта
private void button2_Click(object sender, EventArgs e)
{
if (port.IsOpen == true)
{
port.Close();
label1.Text = "Порт закрыт";
}
}

// Начало опроса
private void button3_Click(object sender, EventArgs e)
{
label2.Text = "опроса идет";
is_running = true;
ThreadPool.QueueUserWorkItem((useless) =>
{
while (is_running)
{
if (port.IsOpen == true)
{
ModbusSerialMaster master = ModbusSerialMaster.CreateAscii(port);
ushort startAddress = 4099; // Начальный адрес
ushort numInputs = 1; // Количество регистров для запроса
ushort[] inputs;
try
{
inputs = master.ReadHoldingRegisters(16, startAddress, numInputs);
}
catch (Exception ex)
{
textBox1.Text = ex.Message;
break;
}
foreach (ushort input in inputs)
{
this.Invoke((System.Action)(() =>
{
textBox1.Clear();
textBox1.Text += input.ToString() + "\t";
chart1.Series["Series1"].Points.Add(input);
}));
}
Thread.Sleep(1000);
}
}
});
}

// Остановка опроса
private void button4_Click(object sender, EventArgs e)
{
is_running = false;
textBox1.Clear();
label2.Text = "опроса остановлен";
}
}
}

pkl
Сообщения: 1468
Зарегистрирован: 23 ноя 2010, 10:08

Re: delta DVP28SV2+овен мв110-224.1тд+тензодатчик

Сообщение pkl »

Команды преобразования типов в вашей среде программирования есть? Нужно просто преобразовать Int во Float. Имейте в виду, что Float 32 бита.
Вариант 2 произвести перестановку в вашей программе : 2.1 побайтно.( 8 бит) 2.2 - пословно ( 16 бит).

gallyamov_mm_91
Сообщения: 16
Зарегистрирован: 18 фев 2023, 12:27

Re: delta DVP28SV2+овен мв110-224.1тд+тензодатчик

Сообщение gallyamov_mm_91 »

а можно не много по подробнее, я просто новичок в этом деле и пока не сильно понимаю

gallyamov_mm_91
Сообщения: 16
Зарегистрирован: 18 фев 2023, 12:27

Re: delta DVP28SV2+овен мв110-224.1тд+тензодатчик

Сообщение gallyamov_mm_91 »

есть команды на подобии Convert.ToFloat. но это несовсем то что мне надо.
у меня на входе 16977 на выходе, в идеале должно стать 52,5206.
а при помощи Convert.ToFloat я из 16977 получаю 16977,0

pkl
Сообщения: 1468
Зарегистрирован: 23 ноя 2010, 10:08

Re: delta DVP28SV2+овен мв110-224.1тд+тензодатчик

Сообщение pkl »

Данные в ПЛК в каком формате?

Ответить