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

Тема: Частота получения данных по RS232 СИ30 СИ8 owen_io.dll

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    можете приложить кусок кода, как опрос делаете, постараюсь посмотреть, м.б. дам рекомендации если увижу проблемные места (кстати какой конвертер интерфейсов используете? ).

  2. #2

    По умолчанию

    Цитата Сообщение от Трофимов Артем Посмотреть сообщение
    можете приложить кусок кода, как опрос делаете, постараюсь посмотреть, м.б. дам рекомендации если увижу проблемные места (кстати какой конвертер интерфейсов используете? ).
    Мы используем АС3 конвертер.

    В качестве приемника выступает 1С
    owen_io.dll завернута через visual studio c# в dll, добавлены классы, чтобы 1С могла ее подключать
    для общения через owen_io.dll созданы 3 класса
    OPCStartConnect(num) // открывает порт
    OPCReadData(adress,typedata,namevar) // читает данные
    OPCEndConnect(void) // закрывает порт

    вот класс для чтения данных (нужное имя я передаю цифрой, а то у 1С и C# нестыковка в текстовых переменных)

    public string OPCReadData(int Address, int typeD, int NameD)
    {
    float value=0;
    int dcnt = 0;
    int dcnt1 = 0;
    int timestamp = 0;
    float dataM = 0;

    string ret;

    string[] nameS = new string[10];
    nameS[0] = "DCNT";
    nameS[1] = "Rd.pF";
    nameS[2] = "DSPD";
    nameS[3] = "Ctr";
    nameS[4] = "CEU";

    IntPtr name = Marshal.StringToCoTaskMemAnsi(nameS[NameD]);

    if(typeD == 0)
    {
    res1 = NativeMethods.ReadSI8BCD(Address, 0, name,ref dcnt);
    dataM = dcnt;
    }
    if(typeD == 1)
    {
    res1 = NativeMethods.ReadIEEE32(Address, 0, name, ref value, ref timestamp, -1);
    dataM = value;
    }
    if(typeD == 2)
    {
    res1 = NativeMethods.ReadSInt(Address, 0, name, ref dcnt, -1);
    dataM = dcnt;
    }
    if(typeD == 3)
    {
    res1 = NativeMethods.ReadUInt(Address, 0, name, ref dcnt1, -1);
    dataM = dcnt1;
    }
    if (res1 == 0)
    ret = Convert.ToString(dataM);
    else
    ret = Convert.ToString(res1);

    return ret;

    }

    Это кусок кода в 1С, как бы все просто, открыл, считал, закрыл....

    OPCconnect = Новый COMОбъект("COMobjOPC.COMOCR");
    аб = OPCconnect.OPCStartConnect(1); // открываем порт (номер COM порта)
    ..............
    ЦИКЛ (пока не остановится траверса)
    .............
    ЗначениеДатчика = OPCconnect.OPCReadData(АдресДатчика,ТипДанных,ИмяП еременной);
    .............
    КОНЕЦЦИКЛА
    OPCconnect.OPCEndConnect();

  3. #3

    По умолчанию

    Цитата Сообщение от alfdivn Посмотреть сообщение
    Мы используем АС3 конвертер.

    В качестве приемника выступает 1С
    owen_io.dll завернута через visual studio c# в dll, добавлены классы, чтобы 1С могла ее подключать
    для общения через owen_io.dll созданы 3 класса
    OPCStartConnect(num) // открывает порт
    OPCReadData(adress,typedata,namevar) // читает данные
    OPCEndConnect(void) // закрывает порт

    вот класс для чтения данных (нужное имя я передаю цифрой, а то у 1С и C# нестыковка в текстовых переменных)

    public string OPCReadData(int Address, int typeD, int NameD)
    {
    float value=0;
    int dcnt = 0;
    int dcnt1 = 0;
    int timestamp = 0;
    float dataM = 0;

    string ret;

    string[] nameS = new string[10];
    nameS[0] = "DCNT";
    nameS[1] = "Rd.pF";
    nameS[2] = "DSPD";
    nameS[3] = "Ctr";
    nameS[4] = "CEU";

    IntPtr name = Marshal.StringToCoTaskMemAnsi(nameS[NameD]);

    if(typeD == 0)
    {
    res1 = NativeMethods.ReadSI8BCD(Address, 0, name,ref dcnt);
    dataM = dcnt;
    }
    if(typeD == 1)
    {
    res1 = NativeMethods.ReadIEEE32(Address, 0, name, ref value, ref timestamp, -1);
    dataM = value;
    }
    if(typeD == 2)
    {
    res1 = NativeMethods.ReadSInt(Address, 0, name, ref dcnt, -1);
    dataM = dcnt;
    }
    if(typeD == 3)
    {
    res1 = NativeMethods.ReadUInt(Address, 0, name, ref dcnt1, -1);
    dataM = dcnt1;
    }
    if (res1 == 0)
    ret = Convert.ToString(dataM);
    else
    ret = Convert.ToString(res1);

    return ret;

    }

    Это кусок кода в 1С, как бы все просто, открыл, считал, закрыл....

    OPCconnect = Новый COMОбъект("COMobjOPC.COMOCR");
    аб = OPCconnect.OPCStartConnect(1); // открываем порт (номер COM порта)
    ..............
    ЦИКЛ (пока не остановится траверса)
    .............
    ЗначениеДатчика = OPCconnect.OPCReadData(АдресДатчика,ТипДанных,ИмяП еременной);
    .............
    КОНЕЦЦИКЛА
    OPCconnect.OPCEndConnect();
    Добрый день, можете выложить обвертку для dll?

Похожие темы

  1. Ответов: 0
    Последнее сообщение: 31.03.2017, 19:51
  2. Ответов: 13
    Последнее сообщение: 21.02.2014, 09:28
  3. ПЛК100 + RS232 = Передача данных
    от DrKillJoy в разделе Помощь Разработчикам
    Ответов: 1
    Последнее сообщение: 10.03.2011, 20:51
  4. проблема получения данных с приборов
    от ольга в разделе ПЛК1хх
    Ответов: 0
    Последнее сообщение: 01.10.2009, 08:00
  5. проблема получения данных с приборов
    от ольга в разделе ПЛК1хх
    Ответов: 0
    Последнее сообщение: 01.10.2009, 07:51

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

Ваши права

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