2012-02-15 2 views
2

Я создаю простую программу для управления двумя моторами и, по соображениям безопасности, световой завесой. В программе пользователь попадет в «Run» и (в новом потоке) двигатели перейдут в различное положение, если ничто не попадет в световую занавеску. Если что-то входит в световую завесу, возникает событие, которое должно немедленно остановить все движения (т. Е. Остановить другой поток).Какой тип нити использовать, правильный останов/прерывание?

Какой тип резьбы следует использовать для этой ситуации? Я смутно знаком с System.Threading.Thread и использовал ThreadPool для небольших, числовых задач расчета.

Кроме того, каким образом можно безопасно остановить аппаратное обеспечение (то есть нить), если должна быть нарушена световая завеса? Я слышал, что метод Abort() - это не путь.

Спасибо!

EDIT

Я использую .NET 2.0.

+1

Я бы сделал это на аппаратном уровне - запустил выделенный кабель от контроллера световой завесы, который закрыл силовое реле в корпусе управления двигателем. Также должен быть программный сигнал, так что операции могут быть перезагружены безопасно и без ущерба для незавершенного производства или двигателей/редукторов/инструментов и т. Д. От разрыва управления двигателем. –

+0

@MartinJames На самом деле, двигатели являются линейными приводами, поэтому, если они перемещают нагрузку с максимальной скоростью и мощность обрезается, они будут продолжать скользить, пока не захлопнутся в конце. Я хотел бы получить сигнал, привести их к быстрому, контролируемому почти остановке, а затем сократить всю мощность. – john

+0

Держу пари, что приводы не будут скользить далеко, если реле закорочило их или подключило к манекен-нагрузке с низким полным сопротивлением. Тем не менее, я считаю, что остановка с программным управлением может быть более безопасной. –

ответ

4

Не только самое безопасное для вашего кода, но и не похоже на способ гарантировать остановку двигателей. Если нить-код не находится в какой-то петле, постоянно нажав кнопку «мертвец». Другими словами,

безопасно остановить оборудование (т.е. нить)

они не кажутся то же самое.

Ваши двигательные нити должны взаимодействовать, то есть непрерывно опросать флаг отмены. Это справедливо для всех решений (Thread, TPL).

+0

Это лучший ответ. Отмена _must_ будет действовать по нескольким причинам. – usr

Смежные вопросы