Просмотр полной версии : Частота получения данных по RS232 СИ30 СИ8 owen_io.dll
На испытательном стенде установлены 3 пробора OWEN
СИ30, СИ8, МВ110-224.1ТД
Все сидят на 1ой шине RS485 и через конвертер АС3 заведены в ПК.
Программа самописная работает, используя библиотеку owen_io.dll.
Работает исправно и данные получаются, но (собственно почему и появилась тема)
На испытательном стенде высокие требования к частоте получения данных.
Все приборы последовательно опрашиваются один за другим
Скорость шины стоит 38400
Частота получения данных от 60-50 Гц по каждому отдельному прибору, но проблема в том, что данные не изменяются, т.е.
спрашиваем датчик СИ30
1 - 1мм
2 - 1мм
3 - 1мм
4 - 1мм
5 - 2мм
Получаются такой набор значений (просто для примера).
Т.е. частота опроса датчика выше на много чем частота получения разных циферок с прибора. Нас это не устраивает, но я пока не пойму с чем это может быть связано. Если вы можете помочь я буду очень благодарен.
Из-за такой вот ситуации вместо 20 Гц получения набора данных с 3х приборов, фактически получается 4.5 Гц - что печально.
Трофимов Артем
27.07.2018, 10:47
а какая частота импульсов на входе счётчика?
на экране счётчик показывает правильное значение?
СИ30, СИ8, МВ110-224.1ТД - вместо всего этого надо было поставить ПЛК110[М02].
а какая частота импульсов на входе счётчика?
на экране счётчик показывает правильное значение?
На экране показывает правильные значения. Как бы проблем с пропуском импульсов нет.
Частота там значительно менее 10 кГц на входе, порядка 2-4 кГц.
СИ30, СИ8, МВ110-224.1ТД - вместо всего этого надо было поставить ПЛК110[М02].
Я программист, а шкаф собирал местный народ - электронщики. Мне дали уже набор готовый. А сейчас нужен совет, что сделать чтобы стало хорошо и лучше :)
Трофимов Артем
28.07.2018, 19:24
у меня встаёт вопрос актуальности такого пулинга со стороны компа, а оно вообще требуется? что Вы хотите сделать с таким массивом данных?
если выводить на визуализацию - 24 FPS , больше человеческий глаз не тянет, отчёты и данные в БД с такой периодичностью тоже вызывают вопрос - для чего?
СИ - автономные утройства которые сами выключат станок по уставке. я просто пытаюсь понять , для чего такие требования пулить с ПК данные раз 60 в секунду
у меня встаёт вопрос актуальности такого пулинга со стороны компа, а оно вообще требуется? что Вы хотите сделать с таким массивом данных?
если выводить на визуализацию - 24 FPS , больше человеческий глаз не тянет, отчёты и данные в БД с такой периодичностью тоже вызывают вопрос - для чего?
СИ - автономные утройства которые сами выключат станок по уставке. я просто пытаюсь понять , для чего такие требования пулить с ПК данные раз 60 в секунду
Автоматизировали разрыв-машину, которая снимает усилие и перемещение траверсы + скорость перемещения, это с одной стороны, с другой хочется весь этот бутерброд аккредитовать, тогда с другой стороны нужно соответствовать ГОСТ, который устанавливает требования к частоте опроса при определенных скоростях перемещения. После обработки данных строятся графики испытаний и расчитываются автоматически результирующие параметры (сейчс не достает дискретности для расчета). Вот оттуда и такое требование.
То есть событие (испытание) короткое по времени и данных получается даже с большой частотой - не много. Сейчас самое долгое испытание - это всего 1000-2000 точек. А короткое, где и нужна высокая частота всего 30-50 точек - это мало уж поверьте.
Вопрос в чем, если это ограничение этого оборудования, то я буду тогда рекомендовать его заменить на что-то более быстро-отдающие данные в ПК.
Трофимов Артем
31.07.2018, 10:04
можете приложить кусок кода, как опрос делаете, постараюсь посмотреть, м.б. дам рекомендации если увижу проблемные места (кстати какой конвертер интерфейсов используете? ).
можете приложить кусок кода, как опрос делаете, постараюсь посмотреть, м.б. дам рекомендации если увижу проблемные места (кстати какой конвертер интерфейсов используете? ).
Мы используем АС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();
Трофимов Артем
01.08.2018, 11:25
обмен идёт в одном потоке? не создаются ли конкурирующие? есть возможность поднять скорость опроса (СИ8 поддерживает до 57600)
обмен идёт в одном потоке? не создаются ли конкурирующие? есть возможность поднять скорость опроса (СИ8 поддерживает до 57600)
Обмен идет в одном потоке, пока не удается достичь скорости которая уже есть, так как при запросе прибор не отдает других данных:
0.1 - 0.1 - 0.1 - 0.1 - 0.1 - 0.2 - 0.2 - 0.2 - 0.2 - 0.3 и т.д., хотя процесс идет непрерывно и с гораздо большей частотой...
Если бы удалось победить это, может настройкой прибора или еще как-то, то потом можно и скорость опроса поднять, а сейчас скорость поднять будет тот же ряд, только число повторов вырастет :(.
Трофимов Артем
02.08.2018, 15:06
Обмен идет в одном потоке, пока не удается достичь скорости которая уже есть, так как при запросе прибор не отдает других данных:
0.1 - 0.1 - 0.1 - 0.1 - 0.1 - 0.2 - 0.2 - 0.2 - 0.2 - 0.3 и т.д., хотя процесс идет непрерывно и с гораздо большей частотой...
Если бы удалось победить это, может настройкой прибора или еще как-то, то потом можно и скорость опроса поднять, а сейчас скорость поднять будет тот же ряд, только число повторов вырастет :(.
мне для понимания более детального проблемы.
у Вас получаются данные
0.1 - 0.1 - 0.1 - 0.1 - 0.1 - 0.2 - 0.2 - 0.2 - 0.2 - 0.3 и т.д
а на приборе по факту
0.1-0.2-0.3-0.3-0.4-0.5 ? (повтор специально добавил мол реальная физическая задержка)
правильно понимаю?
В общем разобрались в чем было дело, дело в том, что электронщики при сборке шкафа и настройке приборов, установили округление на СИ30 до 0.1, когда Артем написал опять ряд цифр и меня осенила мысль что перемещение в данных ед. гораздо медленнее проходит чем значение меняется на 0.1, увеличили точность до 0.01 и все встало на свои места.
Если в СИ8 считываем число имп. и потом их разницу переводим с определенным коэф. в милиметры, там такой проблемы не оказалось.
С тензодатчиком и модулем ввода еще веселее получилось, зачем то поставили два МВ110-224.1ТД в шкаф, один основной другой дублирующий, перепутали адреса и настраивали один, а тот что в работе был не трогали, в итоге исправили обновление данных и все тоже заработало, для СИ30 при скорости шины 38400 вышли на 60 Гц получения данных в программе и для МВ110-224.1ТД 45Гц.
В общем тему можно закрывать спасибо участникам, за то что натолкнули на нужные мысли :)
Как так получилось,что у Вас все получилось. Просто интересно. Какой у Вас датчик стоит для измерения усилия. Неужели
тензодатчик? Если да ,то как его можна опрашивать с частотой 60 Гц. Просветите.
Мы используем АС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?
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot