raven_2022 Posted November 18, 2022 Share Posted November 18, 2022 всем добрый день! после 10 лет работы с MS SQL Srv/C#/Ms Office перебросили на МОХА. чтобы понять, что и как, нужно подключиться к контроллеру МОХА 1242 подать команду (зажечь лампочку) подать 2-ю команду (выключить лампочку) и отключиться. в общем, аналог "Hello, world!" нужна ссылка на пример. дальше - разберусь сам. заранее спасибо Link to comment
Знайка Posted November 18, 2022 Share Posted November 18, 2022 Добрый день! А какой пример ожидается? Запись нужного регистра по Modbus? Или что? Link to comment
raven_2022 Posted November 18, 2022 Author Share Posted November 18, 2022 Цитата Добрый день! А какой пример ожидается? Запись нужного регистра по Modbus? Или что? здравствуйте! мое руководство специализируется на программировании в MS SQL оно изложило задачу так: подключиться к устройству (контроллер МОХА1242 ) по известному ip-адресу/логину/паролю! записать в первый регистр 1 - есть ток, лампочка горит записать в то же регистр 0 - тока нет отключиться от устройства. Link to comment
Знайка Posted November 18, 2022 Share Posted November 18, 2022 Постановка задачи ясна А вы то, по какому протоколу собираетесь общаться с устройством? Link to comment
raven_2022 Posted November 18, 2022 Author Share Posted November 18, 2022 поскольку доступ по сети - скорее всего - TCP/IP Link to comment
Знайка Posted November 18, 2022 Share Posted November 18, 2022 Это хорошо Вообще всё поддерживаемые устройством протоколы приведены в datasheet https://moxa.ru/files/datasheets_2022/moxa-iologik-e1200-series-datasheet-v2_3.pdf, надо бы выбрать какой то из них Link to comment
raven_2022 Posted November 23, 2022 Author Share Posted November 23, 2022 всем добрый день! мне тут коллеги подтянули пример: судя по комментариям - из тех, что поставляется на компакт-диске вместе с устройствами МОХА если у кого похожая проблема - велкам: Цитата using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using MOXA_CSharp_MXIO; namespace WinFormsApp211 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { const UInt16 DO_DIRECTION_DO_MODE = 0; UInt16 Port = 502; int ret; Int32[] hConnection = new Int32[1]; string IPAddr = "192.168.91.42"; //string Password = ""; string Password = "root1234"; UInt32 Timeout = 5000; UInt32 i; UInt16 wIndex; UInt32 uiGetInput = 0; { ret = MXIO_CS.MXEIO_Init(); // Console.WriteLine("MXEIO_E1K_Connect IP={0}, Timeout={1}, Password={2}", IPAddr, Timeout, Password); ret = MXIO_CS.MXEIO_E1K_Connect(System.Text.Encoding.UTF8.GetBytes(IPAddr), Port, Timeout, hConnection, System.Text.Encoding.UTF8.GetBytes(Password)); byte[] bytCheckStatus = new byte[1]; ret = MXIO_CS.MXEIO_CheckConnection(hConnection[0], Timeout, bytCheckStatus); byte bytCount = 0, bytStartChannel = 0; //Get DIO Direction Status UInt16[] wGetDOMode = new UInt16[4]; //Get DO Direction Mode UInt16[] wSetDO_DOMode = new UInt16[2]; //Set DO Direction DO Mode UInt16[] wSetDO_PulseMode = new UInt16[2]; //Set DO Direction Pulse Mode UInt16[] wGetDIMode = new UInt16[8]; //Get DI Direction Mode UInt16[] wSetDI_DIMode = new UInt16[4]; //Set DI Direction DI Mode UInt16[] wSetDI_CounterMode = new UInt16[4];//Set DI Direction Counter Mode UInt16 wDI_DI_MODE = 0; //DI Direction DI Mode Value UInt16 wDO_DO_MODE = 0; //DO Direction DO Mode Value Int32 dwShiftValue; bytCount = 2; bytStartChannel = 0; bytCount = 2; bytStartChannel = 0; for (i = 0; i < bytCount; i++) wSetDO_DOMode[i] = DO_DIRECTION_DO_MODE; ret = MXIO_CS.E1K_DO_SetModes(hConnection[0], bytStartChannel, bytCount, wSetDO_DOMode); bytCount = 2; bytStartChannel = 0; ret = MXIO_CS.E1K_DO_GetModes(hConnection[0], bytStartChannel, bytCount, wSetDO_DOMode); UInt32 dwSetDOValue = 0x0003; ret = MXIO_CS.E1K_DO_Writes(hConnection[0], bytStartChannel, bytCount, dwSetDOValue); bytCount = 2; bytStartChannel = 0; UInt32[] dwGetDOValue = new UInt32[1]; ret = MXIO_CS.E1K_DO_Reads(hConnection[0], bytStartChannel, bytCount, dwGetDOValue); ret = MXIO_CS.MXEIO_Disconnect(hConnection[0]); MXIO_CS.MXEIO_Exit(); } } private void button2_Click(object sender, EventArgs e) { const UInt16 DO_DIRECTION_DO_MODE = 0; UInt16 Port = 502; int ret; Int32[] hConnection = new Int32[1]; string IPAddr = "192.168.91.42"; //string Password = ""; string Password = "root1234"; UInt32 Timeout = 5000; UInt32 i; UInt16 wIndex; UInt32 uiGetInput = 0; { ret = MXIO_CS.MXEIO_Init(); // Console.WriteLine("MXEIO_E1K_Connect IP={0}, Timeout={1}, Password={2}", IPAddr, Timeout, Password); ret = MXIO_CS.MXEIO_E1K_Connect(System.Text.Encoding.UTF8.GetBytes(IPAddr), Port, Timeout, hConnection, System.Text.Encoding.UTF8.GetBytes(Password)); byte[] bytCheckStatus = new byte[1]; ret = MXIO_CS.MXEIO_CheckConnection(hConnection[0], Timeout, bytCheckStatus); byte bytCount = 0, bytStartChannel = 0; //Get DIO Direction Status UInt16[] wGetDOMode = new UInt16[4]; //Get DO Direction Mode UInt16[] wSetDO_DOMode = new UInt16[2]; //Set DO Direction DO Mode UInt16[] wSetDO_PulseMode = new UInt16[2]; //Set DO Direction Pulse Mode UInt16[] wGetDIMode = new UInt16[8]; //Get DI Direction Mode UInt16[] wSetDI_DIMode = new UInt16[4]; //Set DI Direction DI Mode UInt16[] wSetDI_CounterMode = new UInt16[4];//Set DI Direction Counter Mode UInt16 wDI_DI_MODE = 0; //DI Direction DI Mode Value UInt16 wDO_DO_MODE = 0; //DO Direction DO Mode Value Int32 dwShiftValue; bytCount = 2; bytStartChannel = 0; bytCount = 2; bytStartChannel = 0; for (i = 0; i < bytCount; i++) wSetDO_DOMode[i] = DO_DIRECTION_DO_MODE; ret = MXIO_CS.E1K_DO_SetModes(hConnection[0], bytStartChannel, bytCount, wSetDO_DOMode); bytCount = 2; bytStartChannel = 0; ret = MXIO_CS.E1K_DO_GetModes(hConnection[0], bytStartChannel, bytCount, wSetDO_DOMode); UInt32 dwSetDOValue = 0x0000; ret = MXIO_CS.E1K_DO_Writes(hConnection[0], bytStartChannel, bytCount, dwSetDOValue); bytCount = 2; bytStartChannel = 0; UInt32[] dwGetDOValue = new UInt32[1]; ret = MXIO_CS.E1K_DO_Reads(hConnection[0], bytStartChannel, bytCount, dwGetDOValue); ret = MXIO_CS.MXEIO_Disconnect(hConnection[0]); MXIO_CS.MXEIO_Exit(); } } } } еще нужна библиотека MXIO_NET.dll версия 1,10,0,0 но уж очень здоровая. если можно, добавьте ссылку на скачивание MXIO.cs Link to comment
Знайка Posted November 23, 2022 Share Posted November 23, 2022 Ссылку добавить можно. Вот она, прям там рядышком, куда я вам уже давал https://moxa.ru/files/manuals_ioLogik/mxio_net1_10_build16101215.zip Link to comment
raven_2022 Posted November 1, 2023 Author Share Posted November 1, 2023 и снова, здравствуйте! вопрос. для определенности - private void button1_Click(object sender, EventArgs e) где в коде задается № порта МОХа, на которые подается сигнал? и какие допустимые значения для данной переменной? заранее спасибо Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now