Jump to content
Форум по продукции MOXA

Соединение с МОХА1242 из C# и подача команды на регистр


Recommended Posts

всем добрый день!

после 10 лет работы с MS SQL Srv/C#/Ms Office перебросили на МОХА.

чтобы понять, что и как, нужно подключиться к контроллеру МОХА 1242 подать команду (зажечь лампочку)

подать 2-ю команду (выключить лампочку) и отключиться.

в общем, аналог "Hello, world!" 

нужна ссылка на пример.

дальше - разберусь сам.

заранее спасибо

 

Link to comment
Цитата

Добрый день! А какой пример ожидается? Запись нужного регистра по Modbus? Или что?

здравствуйте!

мое руководство специализируется на программировании в MS SQL

оно  изложило задачу так:

подключиться к устройству (контроллер МОХА1242 ) по известному ip-адресу/логину/паролю!

 записать в первый регистр  1 - есть ток, лампочка горит

записать в то же регистр 0 - тока нет

отключиться от устройства.

 

 

Link to comment

всем добрый день!

мне тут коллеги подтянули пример:

судя по комментариям - из тех, что поставляется на компакт-диске вместе с устройствами МОХА

если у кого  похожая проблема - велкам:

Цитата

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
  • 11 months later...

и снова, здравствуйте!

вопрос. для определенности -  private void button1_Click(object sender, EventArgs e)

где в коде задается № порта МОХа, на которые подается сигнал?

и какие допустимые значения для данной переменной?

заранее спасибо

 

 

Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...