Показано с 1 по 10 из 18

Тема: Чтение битовой маски в коде c#

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь Аватар для k119_55524
    Регистрация
    24.04.2024
    Адрес
    Темиртау
    Сообщений
    7

    По умолчанию Чтение битовой маски в коде c#

    Подключил через конвертер АС4(usb<->rs485) МУ110-32Р к компьютеру.
    Изображение WhatsApp 2024-04-24 в 20.53.01_a8709bc1.jpg

    Использую код в с# для управления дискретными выходами:
    Код:
    using System;
    using Modbus.Device;
    using System.IO.Ports;
    using System.Threading;
    using System.Diagnostics;
    
    namespace Experience
    {
    	internal class Program
    	{
    		static void Main(string[] args)
    		{
    			string[] portNames = SerialPort.GetPortNames();
    
    			if (portNames.Length > 0)
    			{
    				SerialPort port = new SerialPort(portNames[0], 9600, Parity.None, 8, StopBits.One);
    
    				// Установка параметров порта
    				port.Handshake = Handshake.None;
    				port.ReadTimeout = 500; // Таймаут чтения (ms)
    				port.WriteTimeout = 500; // Таймаут записи (ms)
    
    				const byte addrDevice_MU110_32 = 1;
    				const ushort countReg = 32;
    				const ushort valReg = 1000;
    				ushort[] data = new ushort[countReg];
    				try
    				{
    					port.Open();
    					ModbusSerialMaster modbusMaster = ModbusSerialMaster.CreateRtu(port);
    
    					for (ushort i = 0; i < countReg; i += 2)
    					{
    						data[i] = valReg;
    						data[i + 1] = 0;
    					}
    
    					modbusMaster.WriteMultipleRegisters(addrDevice_MU1  10_32, 0, data);
    
    					ushort startAddress = 0;
    					Stopwatch stopwatch = new Stopwatch();
    					while (true)
    					{
    						Thread.Sleep(1000);
    
    						stopwatch.Restart();
    						stopwatch.Start();
    						data = modbusMaster.ReadHoldingRegisters(addrDevice_MU110  _32, startAddress, countReg);
    						stopwatch.Stop();
    						Console.WriteLine("<<<<< Время получения данных: " + stopwatch.Elapsed.TotalSeconds + "(sec).");
    
    						for (ushort i = 0; i < data.Length; i++)
    						{
    							data[i] = (ushort)(valReg - data[i]);
    						}
    
    						bool[] values = modbusMaster.ReadCoils(addrDevice_MU110_32, 0, countReg);
    
    						stopwatch.Restart();
    						stopwatch.Start();
    						modbusMaster.WriteMultipleRegisters(addrDevice_MU1  10_32, 0, data);
    						stopwatch.Stop();
    						Console.WriteLine(">>>>> Время отправки данных: " + stopwatch.Elapsed.TotalSeconds + "(sec).\n");
    					}
    				}
    				catch (Exception ex)
    				{
    					Console.WriteLine(">>>>> Error: " + ex.Message);
    					Console.ReadKey();
    				}
    				finally
    				{
    					if (port.IsOpen)
    						port.Close();
    				}
    			}
    		}
    	}
    }
    По сути программа бесконечно, с задержкой переключает выхода из включенного в выключенное, при этом чётные выхода в своем состоянии противоположны нечётным(смысл только в тестировании управления выходами).


    Используемые пакеты NUGET:
    Screenshot_10.png

    Всё работает, проблем нет, за исключением:
    попытка прочитать/записать битовую маску выходов приводит к exeptions по превышению времени ожидания запроса.
    Screenshot_2.png

    Команда запроса(в примере кода присутствует):
    Код:
    bool[] values = modbusMaster.ReadCoils(addrDevice_MU110_32, 0, countReg);
    Варианты проблемы:
    1. Код NeGet пакетов нормально не поддерживает команду чтения маски.
    2. Я не правильно чтото делаю в коде.

    Что я понимаю под битовой маской:
    Screenshot_1.png

    Вопрос: как мне, при моей схеме, в коде c# получить битовую маску?
    Последний раз редактировалось k119_55524; 24.04.2024 в 19:13.

Похожие темы

  1. Ответов: 15
    Последнее сообщение: 26.03.2023, 16:06
  2. Добавление выходных переменных в коде ST
    от Илья563 в разделе Программируемые реле
    Ответов: 10
    Последнее сообщение: 10.06.2022, 16:25
  3. Разбор битовой маски в ПР-200
    от Р.Александр в разделе Программируемые реле
    Ответов: 9
    Последнее сообщение: 31.12.2021, 13:20
  4. Чтение битовой маски TRM-1032
    от SergeyGushchin в разделе Эксплуатация
    Ответов: 2
    Последнее сообщение: 15.12.2021, 08:44
  5. Распаковка битовой маски в Мастер скада
    от Александр N в разделе Master SCADA 3
    Ответов: 10
    Последнее сообщение: 02.09.2021, 08:04

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •