1) есть ли какие-нибудь методы с оным в линуксе?
2) если есть, то как?
3) если овен подключить через MOXA, то можно ли получить данные по реалком порту, или же по TCP/IP ?
есть ли какие-нибудь наработки или мануалы по данной тематике?
1) есть ли какие-нибудь методы с оным в линуксе?
2) если есть, то как?
3) если овен подключить через MOXA, то можно ли получить данные по реалком порту, или же по TCP/IP ?
есть ли какие-нибудь наработки или мануалы по данной тематике?
1) Работа по протоколу ОВЕН в Линукс ничем не отличается от форточек.
2) в соответствии с протоколом
3) почему бы и нет?
примеры на перле можете продемонстрировать?
так как интересует именно перл.
1) есть ли какие-нибудь методы с оным в линуксе?
C онным методы работы есть, особенно если написать
ОННЫЙ = ПЛК/ТРМ/СИ/РМ/... модификация ....
хотя бы для чего прибор нужен
Линукс = сервер, дескотоп, модификация ...
вообще на вскидку большинство приборов овен поддерживает модбас протокол. для него можно нагуглить кучу всего
Часто задаваемые вопросы по кодесис
1) Почему программа не работает - Следует выполнить "Онлайн ->Старт"
2) Где скачать CoDeSys, таргеты, прошивки, библиотеки - http://www.owen.ru/catalog/codesys_v3/opisanie
В целом задача такая: есть MOXA NPort 5150 которая создаёт RealCOM порт, с которым можно работать и снимать данные в моём случае с мв110-8ас.
Задача состоит лишь в том, чтобы собрать данные с овена, по заданному адресу.
Принципиальной разницы нет по ком порту это сделать или же по TCP/IP...
Последний раз редактировалось miko; 03.03.2011 в 13:23.
Ну вот у нас с топикстартером чё-то не получается нагуглить ничего юзабельного.
1. Работает только modpoll (http://www.focus-sw.com/fieldtalk/modpoll.html), но он не-open_source, библеотека его стОит 300 баксов. Нам в ТЗ указали чтобы совсем бесплатно было. Ещё его раздают только 32-битный.
2. Есть в перле модуль Modbus::Client, он не то чтобы совсем не работает, но данные пока с него получить не удалось. Если указать парвильный адрес девайса, то скрипт на этом модуле просто молча ничего не делает(считыветпустоту), если указать неправильный адрес, то ругается.
3. Ещё пытался заюзать rmodbus (модуль для ruby), но ничего не получилось, что-то с самим руби или модулем.
4. libmodbus - пробовал его примеры, но тоже безуспешно.
5. Можно использовать *SCADA, что сейчас и делается, но это ядерный удар по шайке воробьёв - датчиков всего несколько десятков.
Хотелось бы найти открытую реализацию библеотеки или модуля modbus, которая бы работала с OWEN. Есть странное ощущение, что почти все перечисленные реализации могут работать, но не с любыми устройствами на modbus - для чего-то же их написали люди.
jamod.jar работает как с СОМ-портами, так и с ТСР и примеры есть достаточно дружественны для начинающих
С libmodbus вроде бы чё-то получилось. Нет нормального описания функций и их назначения, всё по наитию ... и гуглу :-).
По крайней мере выдаёт почти то же самое, что и modpoll (запускаются не одновременно, поэтому младжий регистр отличается)
антиэталонный код:
---------------<cut>----------------
#include [stdio.h] // треугольные скобки считаются тегами
#include [modbus.h] // и фильтруются форумом![]()
#include [errno.h]
int main () {
int i;
modbus_t *mb;
uint16_t tab_reg[32];
// Inicialization!
for (i = 0 ; i < 32 ; i++) { tab_reg[i] = 0; }
mb = modbus_new_rtu("/dev/ttyS0", 38400, 'N', 8, 1);
if (mb == NULL) {
fprintf(stderr, "Unable to allocate libmodbus context\n");
return -1;
}
// set address
modbus_set_slave(mb, 71);
if (modbus_connect(mb) == -1) {
fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
modbus_free(mb);
return -1;
}
/* Read registers from the address */
modbus_read_registers(mb, 287, 3, tab_reg);
for (i = 0 ; i < 32 ; i++) {
if (tab_reg[i] != 0) {
printf ("i = %d %X \n", i, tab_reg[i]);
}
}
modbus_close(mb);
modbus_free(mb);
} //main
---------------<cut>----------------
Потом gcc test.c `pkg-config --libs --cflags libmodbus`
и потом:
C]# ./a.out ; /root/src/modbus/modpol/linux/modpoll -m rtu -a 71 -r 288 -c 3 -t 3:hex -1 -b 38400 -p none /dev/ttyS0
i = 0 F007
i = 1 4754
i = 2 A300
modpoll - FieldTalk(tm) Modbus(R) Polling Utility
Copyright (c) 2002-2006 FOCUS Software Engineering Pty Ltd
Visit http://www.modbusdriver.com for Modbus libraries and tools.
Protocol configuration: Modbus RTU
Slave configuration...: Address/Id = 71, start reference = 288, count = 3
Communication.........: /dev/ttyS0, 38400, 8, 1none
Data type.............: 16-bit register (hex), input register table
Polling slave ...
[288]: 0xF007
[289]: 0x4754
[290]: 0xA300
Первые два регистра совпадают всегда, третий - редко, наверное из-за неодновременности снятий показаний отличается. Ещё непонятно. почему регистр 288 в libmodbus стал 287. Наверное надо считать с нуля как программисты :-).
Теперь новая проблема: как из регистров и их значений
[288]: 0xF007
[289]: 0x4754
получить 54512.027344 ? Что-то никак не получается. Я не знаю, где какой endian и как "соединять" регистры. Вопрос наверное уже 1000 раз на форуме задавался, но всё же: как получить с девайса те же данные, которые выдаёт программа калибровки ? Ярык программирования С, ОС linux.
Ну и второй вопрос: в процессе юстировки прибор запоминает значения корректировки или нужно записывать значения корректировки и использовать их в софте ?
float a;
char *from;
char *to;
to=&a;
to[1]=from[0];
// ну и т д согласно модбас
Часто задаваемые вопросы по кодесис
1) Почему программа не работает - Следует выполнить "Онлайн ->Старт"
2) Где скачать CoDeSys, таргеты, прошивки, библиотеки - http://www.owen.ru/catalog/codesys_v3/opisanie