2014-09-22 13 views
6

OK, tôi đã đấu tranh với điều này một thời gian. là những cách tốt nhất để thực hiện những điều sau:Đặt tên tín hiệu đến từ các liên kết thư viện độc đáo?

enter image description here

nơi Reaction Wheel 1-4 những liên kết đến cùng một khối trong thư viện. Khi Speed Counter, Speed DirectionCurrent tín hiệu được thêm vào sản lượng xe buýt cuối cùng như hiển thị, MATLAB (chính đáng) than phiền:

Cảnh báo: Tín hiệu 9, 10, 11, 12 vào Bus Đấng Tạo Hóa tên 'myAwesomeModel' đã nhân đôi 'Hiện hành'. Chúng được tạo ra độc đáo bằng cách thêm "(signal #)" vào các tín hiệu bên trong bus kết quả. Vui lòng cập nhật nhãn của các tín hiệu sao cho tất cả đều là duy nhất.

Cho đến bây giờ tôi đã sử dụng một "giải pháp" như thế này:

enter image description here

có nghĩa là, đặt một size-1-MUX/tăng-of-1/block khác-giả ở giữa, vì vậy các tín hiệu có thể được đổi tên thành một cái gì đó độc đáo. Tuy nhiên, tôi thực sự muốn tin rằng MathWorks đã nghĩ ra một cách tốt hơn để làm điều này ...

Cách "thích hợp" để xây dựng tín hiệu bus như thế này là gì? Nó cảm thấy giống như tôi đang bị đẩy để áp dụng một thiết kế/kiến ​​trúc cụ thể, nhưng những gì đó là chính xác, eludes tôi cho thời điểm này ...

+0

chỉ để hiểu câu hỏi, bạn đang tìm kiếm cách thay thế để đổi tên tín hiệu? Bạn có thể tạo một bộ chọn bus tùy chỉnh, một hệ thống con với một mặt nạ, nơi bạn có thể chọn số lượng đầu vào và đặt tên cho chúng. Nghe như thế nào? Tôi nghĩ rằng thực sự không có cách nào xung quanh dummys, bạn chỉ có thể làm cho họ trông đẹp hơn ... – thewaywewalk

+0

Một tùy chọn khác sẽ được tập hợp lại, chỉ cần tạo ra xe buýt "RW1", "RW2" ... và gán dòng điện. Sau đó, chúng sẽ có tên 'RW1.Current', 'RW2.Current' ... – thewaywewalk

+0

@thewaywewalk: trong ví dụ trên, mỗi mô hình' RW' xuất ra bus riêng của nó ('Dữ liệu đầu ra'). Từ mỗi chiếc xe buýt, tôi chỉ chọn 3 tín hiệu (vì vậy các tên tín hiệu được hiển thị trong bộ chọn bus thực sự là 'RW1.Current' và tương tự, như bạn nói). Tuy nhiên, nếu bạn muốn nhóm các tín hiệu này lại thành một bus mới, MATLAB than phiền về các tên tín hiệu giống nhau, trên đầu vào bus (với các bộ chọn bus riêng lẻ kết nối với một bộ tạo bus, như trong hình), hoặc trên đầu ra bus (nếu bạn kết nối 'RW1-4' trực tiếp với một người tạo ra bus, và kiểm tra "output as bus". Tôi thấy không có cách nào xung quanh nó mà không có núm vú ... –

Trả lời

1

Đó là một thách thức đối với tôi nhưng có vẻ như tôi đã sắp xếp nó ra . Matlab R2007a ở đây. Tôi sẽ làm ví dụ với hệ thống con đã hoàn thành, với các đầu vào, đầu ra, ...

1- Trong Thuộc tính khối, thêm thẻ vào khối. Điều này sẽ được thực hiện để xác định khối và "anh chị em" của nó trong hệ thống. MY_SUBSYSTEM cho ví dụ này.

2- Chặn thuộc tính một lần nữa. Thêm đoạn mã sau trong CopyFcn callback:

%Find total amount of copies of the block in system 

len = length(find_system(gcs,'Tag','MY_SUBSYSTEM')); 

%Get handle of the block copied/added and name the desired signal accordingly 

v = get_param(gcb,'PortHandles');          
set(v.Outport(_INDEX_OF_PORT_TO_BE_RENAMED_),'SignalNameFromLabel',['BASENAME_HERE' num2str(len)]); 

3- Trong _INDEX_OF_PORT_TO_BE_RENAMED_ bạn nên đặt chỉ số tín hiệu cổng (bắt đầu từ 1) mà bạn muốn đã đổi tên cho mỗi bản sao của khối. Đối với một khối đầu ra duy nhất, điều này nên là 1. BASENAME_HERE phải là tên cơ sở cổng, trong trường hợp này là "Hiện tại" cho bạn.

4- Thêm khối vào thư viện mong muốn và xóa cá thể bạn đã sử dụng để tạo ví dụ này. Từ đó, khi bạn thêm từ thư viện hoặc sao chép một khối hiện có, cổng ngoài sẽ đặt tên là Current1, Current2, Current3, v.v. Lưu ý rằng bạn có thể áp dụng bất kỳ quy ước hoặc định dạng nào.

Hy vọng điều này sẽ hữu ích. Nó làm việc cho tôi, đừng ngần ngại hỏi/phê bình!

Lưu ý: Rõ ràng, khi mô hình phát triển, phương pháp này có thể yêu cầu máy tính vì find_system sẽ phải lặp qua toàn bộ mô hình, tuy nhiên trông giống như một giải pháp tốt cho tôi trong các hệ thống cỡ vừa.

+0

Cảm ơn :) Tôi thích hack tốt, nhưng bạn sẽ phải thừa nhận rằng điều này không thể là những gì Mathworks nghĩ là cách tốt nhất để thiết kế hệ thống của bạn ... + 1 mặc dù nỗ lực và nụ cười trên khuôn mặt của tôi. –

+0

Vâng, nó chỉ là một hack dễ dàng đặt tên quy ước, tôi cho rằng tôi thiếu kinh nghiệm sâu sắc với tham chiếu mô hình lớn và công nghệ hiện đại hơn nữa ngoài R2007a ngăn cản tôi nhìn thấy thêm cạm bẫy ... :-) – Manex

1

Kết nối bộ chọn Bus với từng đầu ra dữ liệu. Chọn tín hiệu bạn muốn và đặt "Output as bus". Sau đó kết nối tất cả các Selectors Bus với Bus Creator.

simulink model

+0

Như đã thảo luận trong các ý kiến, không hoạt động: bạn vẫn đặt tên tín hiệu không phải là duy nhất vào một chiếc xe buýt duy nhất. Tốt nhất, nó sẽ chỉ trì hoãn vấn đề ở một nơi nào đó bên ngoài hệ thống con này (được cho là còn tệ hơn). –

+0

Nó tạo ra một xe buýt có cấu trúc với các tên tín hiệu như 'rw1.current', các tên là duy nhất. – Daniel

+2

OK, hãy để tôi nói lại rằng: bạn nói đúng, công trình này, nhưng chỉ ở cấp độ này. Tuy nhiên, khi bạn kết nối bus đầu ra này với một bộ chọn bus khác, chọn 'rw1.speed' và' rw2.speed' từ các tín hiệu và chọn tùy chọn 'Output as bus', cấu trúc sẽ không được chuyển sang bus mới, và bạn nhận được cảnh báo. Mô hình trên là nhỏ, các mô hình "thực" của tôi rất lớn và số lượng tín hiệu thực sự biện minh cho tùy chọn 'Đầu ra dưới dạng bus 'thứ hai. Vì vậy, nó thực sự có sở thích của tôi để có tên thật sự độc đáo, mà không có * bất kỳ * nguy cơ đặt tên xung đột. –

Các vấn đề liên quan