Цитата(Kitsok @ Feb 4 2010, 11:02)

Добрый день!
Имеется задача: обеспечить интерфейс между ПО на компьютере и большим количеством дискретных вводов и выводов(около 300 вводов и примерно столько-же выводов), некоторого количества 7-сегментных индикаторов (12 штук по 5 разрядов), небольшим (8) - аналоговых входов, и десятка ШИМов (управление электромоторами).
Требования по таймингу - от нажатия на кнопку до срабатывания функции ПО на компьютере - макс. 100 мс, в обратную сторону - то-же.
Основная разница между CAN и RS485+модбас в том, что при работе по модбас имеется ведущий, который должен постоянно опрашивать все "а не случилось ли у тебя чего?" и в 99% получать в ответ "у меня всё так же". А CAN подразумевает, что тот у кого случилось к.л. событие сам передаёт в сеть сообщение об этом. Причём событие может быть и сообщение "я жив", "я появился в сети" и т.п., но об этом потом - если вам будет интересно...
В итоге, если в сети 2..3 устройства, то большой разницы между модбас и CAN нет. Но если больше, то в случае модбас время цикла опроса увеличивается пропорционально кол-ву устройств и при формировании модбас на компе при 4-х устройствах уже вы не уложитесь в 100 mS. В случае CAN кол-во устройств сети не имеет значения (до 100 шт.), а имеет значение частота возникновения событий у них. Реально, чтобы гарантировать 100 mS при 125 кбод, и получится порядка 100 устройств в сети. Кроме того в случае CAN легко решается проблемма горячей замены и т.д.
Вобщем выбор зависит от задачи. RS485 - для самых простейших.
Есть ещё вариан использовать USART, но с приёмопередатчиками CAN, или с RS485 приёмопередатчиками, но в другом включении - см. автомобильный стандарт J1708. Кстати, для вашей задачи вероятно будет оптимально сделать именно по стандарту J1708/J1587. Всё замечательно работает в жёстких автомобильных условиях... Там получается общая сеть как в CAN, но при использовании USART (собственно CAN из J1708 то и произошёл). И модбасоподобный протокол, но без ведущего (все равноправны). Кстати, не удивлюсь, если модбас тоже оттуда... Но тайминги в J1708 очень жёсткие, поэтому без контроллера не обойтись.