Потому, что быстрее и не мешает др. устройствам
Потому, что быстрее и не мешает др. устройствам
понял, обдумаю
Почти для каждого языка программирования реализован modbusTCP, раз Вам придется реализовывать визуализацию то нужно же по какому то протоколу получать данные. Так же можно использовать для этих целей обычные ВЕБ-сервер, об этом тоже много написано и конечно в самом КДС есть примитивная визуализация
PS
У кого на ПК стоит ява, я бы предложил посмотреть вот эту страничку http://alexsentcha.wordpress.com/vis...s-with-javafx/ и запустить на ней эту ссылку http://pcplcdemos.googlecode.com/hg/...ist/Plant.jnlp
Последний раз редактировалось capzap; 31.01.2012 в 16:54.
В КДС хороший быстрый тонкий клиент, а не примитивная визуализация.
примитивный не в смысле плохой, а в смысле использование примитивов кружочки квадратики, кнопки и т.д.
Я сам написал ранее команды Modbus для RS232 в своих программах, без использвания библиотек, потом узнал, что он называется Modbus и что он существует в стандарте.
Может и использую библиотеки, посмотрим.
В принципе я решил вопрос с тензометрическим модулем. Модуль имел адрес 1-й, контроллер кстати тоже. Я просто поменял адрес тензометрического модуля на 2-й и теперь я просто передал команду на включение одного из выходов, ПЛК отлично отреагировал, включае, выключает.
Просто я не могу на данном этапе устанавливать адрес для AC3-M, который у меня интерпретирует команды с ПК, я не знаю, имеет ли он вообще такую функцию, как изменение адреса, но по крайней мере, если кроме ПЛК никакие устройства не имеют адреса1 вроде работает. Дальше посмотрим. Это что касается RS485, ну и конечно же я добавил модуль RS485-1 дополнительно в:
Конфигурация ПЛК -> PLC100.K -> ModBus (slave) [VAR] -> ModBus [FIX] -> RS-485-1[VAR] и дополнительно тут же -> Параметры модуля -> Frame Oriented = RTU
Ну а комманда, если интересно как я их делаю, выглядит так, например в среде VC++:
if (m_DlgSerialPort.m_Com.IsOpen())
{
BYTE AddrDev = 1;// адрес устройства ПЛК
BYTE Func = 5;// функция, запись
WORD AddrData = 0x0014;// адрес бита, какой вам надо
WORD Data = 0xFF00;// это означает установить, если 0x0000, то сбросить
WORD Crc;
BYTE Buffer[8];
int Size = 8;// размер буфера
Buffer[0] = AddrDev;
Buffer[1] = Func;
Buffer[2] = HIBYTE(AddrData);
Buffer[3] = LOBYTE(AddrData);
Buffer[4] = HIBYTE(Data);
Buffer[5] = LOBYTE(Data);
Crc = CalcCRC(Buffer, Size - 2);// функция вычисляет CRC, сам писал, надо будет разберетесь сами напишете
Buffer[6] = LOBYTE(Crc);// вот эта строчка меня подкумарила, не очень одаренный разработчик в полном смысле этого слова, когда писал Modbus интерфейс придумал все байты передавать старший сначала, а контрольную сумму с младшего, неужели нельзя сделать одинаково и аккуратно? не только в наших советских странах глупости встречаются, эта невнимательность мне стоила пару часов времени
Buffer[7] = HIBYTE(Crc);
m_DlgSerialPort.m_Com.Write(&Buffer, Size);// это мой класс, стандартная передача
}
Последний раз редактировалось danko; 31.01.2012 в 18:13.
http://ru.wikipedia.org/wiki/%D0%9F%...82%D0%BE%D0%B2
Абзац: Сравнение
так что те кто придумали разные порядки передачи данных прежде всего думали о разработчиках программ, включая и Вас
хорошая ссылка, но я никогда так много не читаю, теория практике мешает, извините ))))))
мозг сломать можно, это надо с утра, а не за 20минут до конца рабочего дня читать, тут мысли заняты как бы в переполненный автобус при -20 сесть, а тут всякие литл-эндиан и особенно словосочетание насмешило "...обычно предпочтительнее..."
Да если полагаться на такие обычно и предпочтительнее, то ничего не сделаешь, так и останешься на месте топтаться, гораздо нужнее слова, "только", "обязательно", "нельзя", слова должны точно доводить до разработчика что ему делать, это может в государственных институтах есть время теорию изучать и думать что предпочтительнее