PDA

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



alfdivn
26.07.2018, 18:31
На испытательном стенде установлены 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
а какая частота импульсов на входе счётчика?
на экране счётчик показывает правильное значение?

IVM
27.07.2018, 11:22
СИ30, СИ8, МВ110-224.1ТД - вместо всего этого надо было поставить ПЛК110[М02].

alfdivn
27.07.2018, 19:40
а какая частота импульсов на входе счётчика?
на экране счётчик показывает правильное значение?
На экране показывает правильные значения. Как бы проблем с пропуском импульсов нет.
Частота там значительно менее 10 кГц на входе, порядка 2-4 кГц.


СИ30, СИ8, МВ110-224.1ТД - вместо всего этого надо было поставить ПЛК110[М02].
Я программист, а шкаф собирал местный народ - электронщики. Мне дали уже набор готовый. А сейчас нужен совет, что сделать чтобы стало хорошо и лучше :)

Трофимов Артем
28.07.2018, 19:24
у меня встаёт вопрос актуальности такого пулинга со стороны компа, а оно вообще требуется? что Вы хотите сделать с таким массивом данных?
если выводить на визуализацию - 24 FPS , больше человеческий глаз не тянет, отчёты и данные в БД с такой периодичностью тоже вызывают вопрос - для чего?
СИ - автономные утройства которые сами выключат станок по уставке. я просто пытаюсь понять , для чего такие требования пулить с ПК данные раз 60 в секунду

alfdivn
31.07.2018, 05:58
у меня встаёт вопрос актуальности такого пулинга со стороны компа, а оно вообще требуется? что Вы хотите сделать с таким массивом данных?
если выводить на визуализацию - 24 FPS , больше человеческий глаз не тянет, отчёты и данные в БД с такой периодичностью тоже вызывают вопрос - для чего?
СИ - автономные утройства которые сами выключат станок по уставке. я просто пытаюсь понять , для чего такие требования пулить с ПК данные раз 60 в секунду

Автоматизировали разрыв-машину, которая снимает усилие и перемещение траверсы + скорость перемещения, это с одной стороны, с другой хочется весь этот бутерброд аккредитовать, тогда с другой стороны нужно соответствовать ГОСТ, который устанавливает требования к частоте опроса при определенных скоростях перемещения. После обработки данных строятся графики испытаний и расчитываются автоматически результирующие параметры (сейчс не достает дискретности для расчета). Вот оттуда и такое требование.

То есть событие (испытание) короткое по времени и данных получается даже с большой частотой - не много. Сейчас самое долгое испытание - это всего 1000-2000 точек. А короткое, где и нужна высокая частота всего 30-50 точек - это мало уж поверьте.

Вопрос в чем, если это ограничение этого оборудования, то я буду тогда рекомендовать его заменить на что-то более быстро-отдающие данные в ПК.

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

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

Мы используем АС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)

alfdivn
02.08.2018, 14:57
обмен идёт в одном потоке? не создаются ли конкурирующие? есть возможность поднять скорость опроса (СИ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 ? (повтор специально добавил мол реальная физическая задержка)
правильно понимаю?

alfdivn
07.09.2018, 16:31
В общем разобрались в чем было дело, дело в том, что электронщики при сборке шкафа и настройке приборов, установили округление на СИ30 до 0.1, когда Артем написал опять ряд цифр и меня осенила мысль что перемещение в данных ед. гораздо медленнее проходит чем значение меняется на 0.1, увеличили точность до 0.01 и все встало на свои места.
Если в СИ8 считываем число имп. и потом их разницу переводим с определенным коэф. в милиметры, там такой проблемы не оказалось.
С тензодатчиком и модулем ввода еще веселее получилось, зачем то поставили два МВ110-224.1ТД в шкаф, один основной другой дублирующий, перепутали адреса и настраивали один, а тот что в работе был не трогали, в итоге исправили обновление данных и все тоже заработало, для СИ30 при скорости шины 38400 вышли на 60 Гц получения данных в программе и для МВ110-224.1ТД 45Гц.

В общем тему можно закрывать спасибо участникам, за то что натолкнули на нужные мысли :)

Одесса
07.09.2018, 18:15
Как так получилось,что у Вас все получилось. Просто интересно. Какой у Вас датчик стоит для измерения усилия. Неужели
тензодатчик? Если да ,то как его можна опрашивать с частотой 60 Гц. Просветите.

Batden
17.06.2019, 10:43
Мы используем АС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?