Пример расчета рамы методом сил
Пример расчета рамы методом сил
Расчетная схема рамы показана на рисунке 1. Требуется построить эпюры изгибающих моментов, поперечных и продольных сил.
1 Степень статической неопределимости. Мысленно соединив опоры рамы, получим один замкнутый контур (К = 1), содержащий два шарнира (Ш = 2). Следовательно .
2 Основная система. Отбрасываем вертикальный опорный стержень и заменяем его реакцией (рисунок 2).
Рисунок 1 Рисунок 2
3 Каноническое уравнение. Так как s = 1, составляем одно уравнение
, где – единичное и грузовое перемещения в основной системе.
4 Единичная и грузовая эпюры в основной системе.
Формируем состояние «1» основной системы, прикладывая к ней единичную силу по направлению . Строим единичную эпюру Далее формируем состояние «p» основной системы, прикладывая к ней внешнюю нагрузку.
Рисунок 3
5 Вычисление единичного и грузового перемещений. В соответствии с методом Мора
При перемножении соответствующих эпюр мы пользовались способом Симпсона для прямолинейных эпюр.
6 Решение канонического уравнения. Из канонического уравнения выражаем неизвестную силу:
.
7 Построение эпюры изгибающих моментов M. На основании принципа суперпозиции
.
Строим эпюру , умножая ординаты эпюры на (рисунок 4), и складываем ее с . Получаем эпюру изгибающих моментов M в заданной системе (рисунок 5).
Рисунок 4 Рисунок 5
8 Проверка эпюры M. Выполняем деформационную проверку, умножая по методу Мора эпюру M на единичную эпюру :
Проверка выполняется.
9 Построение эпюр Q, N. Выполняем построения в статически определимой основной системе, приложив к ней известную силу (рисунок 6).
Рисунок 6
Таким образом, расчет рамы выполнен.
Пример расчета рамы методом перемещений
Расчетная схема рамы показана на рисунке 1. Требуется построить эпюры изгибающих моментов, поперечных и продольных сил.
1 Степень кинематической неопределимости. Рама имеет один жесткий узел, поэтому количество независимых угловых перемещений . Образуем шарнирную схему (рисунок 2). Мысленно соединим ее опоры – получим один замкнутый контур (К = 1), содержащий три шарнира (Ш = 3). Следовательно, количество независимых линейных перемещений . Степень кинематической неопределимости .
2 Основная система. Вводим дополнительную связь – плавающую заделку в жесткий узел и задаем ей угловое перемещение (рисунок 3).
Рисунок 1 Рисунок 2 Рисунок 3
3 Каноническое уравнение. Так как , составляем одно уравнение
, где – единичная и грузовая реакции введенной связи.
4 Единичная и грузовая эпюры в основной системе.
Формируем состояние «1» основной системы, задавая поворот плавающей заделки на единичный угол в направлении . Пользуясь таблицей, строим единичную эпюру Далее формируем состояние «p» основной системы, прикладывая к ней внешнюю нагрузку. Строим грузовую эпюру (рисунок 4).
Рисунок 4
5 Вычисление единичной и грузовой реакций. В соответствии со статическим методом определения реакций вырезаем жесткий узел и рассматриваем его равновесие в двух состояниях – единичном и грузовом (рисунок 5). Составляя уравнение моментов, находим реакции:
Рисунок 5 |
|
6 Решение канонического уравнения. Из канонического уравнения выражаем неизвестное перемещение:
.
7 Построение эпюры изгибающих моментов M. На основании принципа суперпозиции
.
Строим эпюру , умножая ординаты на (рисунок 6), и складываем ее с . Получаем эпюру изгибающих моментов M в заданной системе (рисунок 7).
Рисунок 6 Рисунок 7
8 Проверка эпюры
Проверка выполняется. | Рисунок 8 |
9 Построение эпюры Q. Эпюру поперечных сил строим по готовой эпюре М. На участке AB (см. рисунок 1), используя дифференциальную зависимость Q от M, получаем
.
Участок BC рассматриваем отдельно, приложив к его сечениям искомые силы и момент , взятый из эпюры М (рисунок 9, а). Составив уравнения моментов относительно точек С и В, получаем:
;
.
Строим эпюру Q (рисунок 10).
Рисунок 9 Рисунок 10
В сечении, где эпюра Q пересекла ось на участке BC, момент будет иметь экстремальное значение. Определим расстояние из условия равенства нулю поперечной силы в данном сечении (рисунок 9, б):; .
Экстремальный момент
Отмечаем это значение на эпюре М (см. рисунок 7).
10 Построение эпюры N. Вырезаем жесткий узел (рисунок 11), прикладываем к его сечениям поперечные силы Q с учетом знака (положительная сила совершает вращение по часовой стрелке), а также искомые продольные силы N (от сечения в сторону отброшенной части). Из условий равновесия
Строим эпюру N (рисунок 12).
Рисунок 11 Рисунок 12
11 Проверка равновесия рамы
Рисунок 13 | Рама в равновесии, следовательно, расчет выполнен верно. |
python — Как построить график в реальном времени в цикле while с помощью matplotlib?
Я знаю, что немного опоздал с ответом на этот вопрос. Тем не менее, я некоторое время назад сделал код для построения графиков в реальном времени, которым я хотел бы поделиться:
Код для PyQt4:
################## ################################################### # # # ПОСТРОИТЬ РЕАЛЬНЫЙ ГРАФИК (PyQt4) # # ----------------------------- # # ВСТАВЬТЕ АНИМАЦИЮ MATPLOTLIB ВНУТРИ ВАШЕГО # # СОБСТВЕННЫЙ ГРАФИЧЕСКИЙ ИНТЕРФЕЙС! # # # ################################################### ################# импорт системы импорт ОС из PyQt4 импортировать QtGui из PyQt4 импортировать QtCore импортировать инструменты импортировать numpy как np импортировать случайный как rd импортировать matplotlib matplotlib. use("Qt4Agg") из matplotlib.figure импорт Рисунок из matplotlib.animation импортировать TimedAnimation из matplotlib.lines импортировать Line2D из matplotlib.backends.backend_qt4agg импортировать FigureCanvasQTAgg как FigureCanvas время импорта импорт потоков def setCustomSize (x, ширина, высота): sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(x.sizePolicy().hasHeightForWidth()) x.setSizePolicy(sizePolicy) x.setMinimumSize(QtCore.QSize(ширина, высота)) x.setMaximumSize(QtCore.QSize(ширина, высота)) '''''' класс CustomMainWindow(QtGui.QMainWindow): защита __init__(сам): super(CustomMainWindow, self).__init__() # Определяем геометрию главного окна self.setGeometry(300, 300, 800, 400) self.setWindowTitle("мое первое окно") # Создать FRAME_A self.FRAME_A = QtGui.QFrame(я) self.FRAME_A.setStyleSheet("QWidget {цвет фона: %s}" % QtGui.QColor(210,210,235,255).name()) self.LAYOUT_A = QtGui.QGridLayout() self.FRAME_A.setLayout(self.LAYOUT_A) self.setCentralWidget(self.FRAME_A) # Разместите кнопку масштабирования self.zoomBtn = QtGui.QPushButton (текст = 'масштаб') setCustomSize(self.zoomBtn, 100, 50) self.zoomBtn.clicked.connect(self.zoomBtnAction) self.LAYOUT_A.addWidget (self.zoomBtn, * (0,0)) # Поместите фигуру matplotlib self.myFig = CustomFigCanvas() self.LAYOUT_A.addWidget (self.myFig, * (0,1)) # Добавьте callbackfunc в .. myDataLoop = threading.Thread(name = 'myDataLoop', target = dataSendLoop, daemon = True, args = (self.addData_callbackFunc,)) myDataLoop.start() самовыражение() '''''' Def zoomBtnAction (я): распечатать("увеличить") self.myFig.увеличить (5) '''''' def addData_callbackFunc (я, значение): # print("Добавить данные: " + str(value)) self. myFig.addData(значение) ''' Конец класса ''' класс CustomFigCanvas (FigureCanvas, TimedAnimation): защита __init__(сам): self.addedData = [] печать (matplotlib.__версия__) # Данные селф.xlim = 200 self.n = np.linspace(0, self.xlim - 1, self.xlim) а = [] б = [] а. добавить (2.0) а. добавить (4.0) а. добавить (2.0) б. добавить (4.0) б. добавить (3.0) б. добавить (4.0) селф.у = (селф.п * 0,0) + 50 # Окно self.fig = Рисунок (figsize = (5,5), dpi = 100) self.ax1 = self.fig.add_subplot(111) # настройки self.ax1 self.ax1.set_xlabel('время') self.ax1.set_ylabel('необработанные данные') self.line1 = Line2D([], [], color='синий') self.line1_tail = Line2D([], [], цвет='красный', ширина линии=2) self.line1_head = Line2D([], [], color='красный', marker='o', markeredgecolor='r') self.ax1.add_line(self.line1) self. ax1.add_line(self.line1_tail) self.ax1.add_line(self.line1_head) self.ax1.set_xlim(0, self.xlim - 1) self.ax1.set_ylim(0, 100) FigureCanvas.__init__(self, self.fig) TimedAnimation.__init__(self, self.fig, interval = 50, blit = True) определение new_frame_seq (я): вернуть iter (диапазон (self.n.size)) защита _init_draw (сам): строки = [self.line1, self.line1_tail, self.line1_head] для л в строках: л.set_data([], []) def addData (я, значение): self.addedData.append (значение) def zoomIn(я, значение): дно = self.ax1.get_ylim()[0] топ = self.ax1.get_ylim()[1] внизу += значение верх -= значение self.ax1.set_ylim(внизу,вверху) самовытягивание() def _step(я, *аргументы): # Расширяет метод _step() для класса TimedAnimation. пытаться: TimedAnimation._step(self, *args) кроме Исключения как e: self.abc += 1 печать (ул (самостоятельно. abc)) TimedAnimation._stop(я) проходить def _draw_frame (я, данные кадра): маржа = 2 в то время как (len (self.addedData) > 0): self.y = np.roll (self.y, -1) self.y[-1] = self.addedData[0] del(self.addedData[0]) self.line1.set_data(self.n[0: self.n.size - поле], self.y[0: self.n.size - поле]) self.line1_tail.set_data(np.append(self.n[-10:-1 - поле], self.n[-1 - поле]), np.append(self.y[-10:-1 - поле] , self.y[-1 - поле])) self.line1_head.set_data(self.n[-1 - маржа], self.y[-1 - маржа]) self._drawn_artists = [self.line1, self.line1_tail, self.line1_head] ''' Конец класса ''' # Вам нужно настроить механизм слота сигнала, чтобы # отправлять данные в ваш графический интерфейс потокобезопасным способом. # Поверьте мне, если вы не сделаете это правильно, вещи # пойти очень очень неправильно.. класс Общение (QtCore.QObject): data_signal = QtCore.pyqtSignal (с плавающей запятой) ''' Конец класса ''' def dataSendLoop (addData_callbackFunc): # Настройте механизм сигнальных слотов. mySrc = Общаться() mySrc.data_signal.connect(addData_callbackFunc) # Имитация некоторых данных n = np.linspace (0, 499, 500) y = 50 + 25*(np.sin(n/8,3)) + 10*(np.sin(n/7,5)) - 5*(np.sin(n/1,5)) я = 0 пока (правда): если (я > 499): я = 0 время сна (0,1) mySrc.data_signal.emit(y[i]) # <- Вот вы излучаете сигнал! я += 1 ### ### если __name__== '__main__': приложение = QtGui.QApplication(sys.argv) QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('Пластика')) мойGUI = CustomMainWindow() sys.exit(приложение.exec_()) ''''''
Недавно я переписал код для PyQt5.
Код для PyQt5:
######################################## ########################### # # # ПОСТРОИТЬ РЕАЛЬНЫЙ ГРАФИК (PyQt5) # # ----------------------------- # # ВСТАВЬТЕ АНИМАЦИЮ MATPLOTLIB ВНУТРИ ВАШЕГО # # СОБСТВЕННЫЙ ГРАФИЧЕСКИЙ ИНТЕРФЕЙС! # # # ################################################### ################# импорт системы импорт ОС из импорта PyQt5. QtWidgets * из импорта PyQt5.QtCore * из импорта PyQt5.QtGui * импортировать инструменты импортировать numpy как np импортировать случайный как rd импортировать matplotlib matplotlib.use("Qt5Agg") из matplotlib.figure импорт Рисунок из matplotlib.animation импортировать TimedAnimation из matplotlib.lines импортировать Line2D из matplotlib.backends.backend_qt5agg импортировать FigureCanvasQTAgg как FigureCanvas время импорта импорт потоков класс CustomMainWindow (QMainWindow): защита __init__(сам): super(CustomMainWindow, self).__init__() # Определяем геометрию главного окна self.setGeometry(300, 300, 800, 400) self.setWindowTitle("мое первое окно") # Создать FRAME_A self.FRAME_A = QFrame(я) self.FRAME_A.setStyleSheet("QWidget {цвет фона: %s}" % QColor(210,210,235,255).name()) self.LAYOUT_A = QGridLayout() self.FRAME_A.setLayout(self.LAYOUT_A) self.setCentralWidget(self.FRAME_A) # Разместите кнопку масштабирования self. zoomBtn = QPushButton (текст = 'масштаб') self.zoomBtn.setFixedSize (100, 50) self.zoomBtn.clicked.connect(self.zoomBtnAction) self.LAYOUT_A.addWidget (self.zoomBtn, * (0,0)) # Поместите фигуру matplotlib self.myFig = CustomFigCanvas() self.LAYOUT_A.addWidget (self.myFig, * (0,1)) # Добавьте callbackfunc в .. myDataLoop = threading.Thread(name = 'myDataLoop', target = dataSendLoop, daemon = True, args = (self.addData_callbackFunc,)) myDataLoop.start() самовыражение() возвращаться Def zoomBtnAction (я): распечатать("увеличить") self.myFig.увеличить (5) возвращаться def addData_callbackFunc (я, значение): # print("Добавить данные: " + str(value)) self.myFig.addData(значение) возвращаться ''' Конец класса ''' класс CustomFigCanvas (FigureCanvas, TimedAnimation): защита __init__(сам): self.addedData = [] печать (matplotlib.__версия__) # Данные селф. xlim = 200 self.n = np.linspace(0, self.xlim - 1, self.xlim) а = [] б = [] а. добавить (2.0) а. добавить (4.0) а. добавить (2.0) б. добавить (4.0) б. добавить (3.0) б. добавить (4.0) селф.у = (селф.п * 0,0) + 50 # Окно self.fig = Рисунок (figsize = (5,5), dpi = 100) self.ax1 = self.fig.add_subplot(111) # настройки self.ax1 self.ax1.set_xlabel('время') self.ax1.set_ylabel('необработанные данные') self.line1 = Line2D([], [], color='синий') self.line1_tail = Line2D([], [], цвет='красный', ширина линии=2) self.line1_head = Line2D([], [], color='красный', marker='o', markeredgecolor='r') self.ax1.add_line(self.line1) self.ax1.add_line(self.line1_tail) self.ax1.add_line(self.line1_head) self.ax1.set_xlim(0, self.xlim - 1) self.ax1.set_ylim(0, 100) FigureCanvas.__init__(self, self.fig) TimedAnimation. __init__(self, self.fig, interval = 50, blit = True) возвращаться определение new_frame_seq (я): вернуть iter (диапазон (self.n.size)) защита _init_draw (сам): строки = [self.line1, self.line1_tail, self.line1_head] для л в строках: л.set_data([], []) возвращаться def addData (я, значение): self.addedData.append (значение) возвращаться def zoomIn(я, значение): дно = self.ax1.get_ylim()[0] топ = self.ax1.get_ylim()[1] внизу += значение верх -= значение self.ax1.set_ylim(внизу,вверху) самовытягивание() возвращаться def _step(я, *аргументы): # Расширяет метод _step() для класса TimedAnimation. пытаться: TimedAnimation._step(self, *args) кроме Исключения как e: self.abc += 1 печать (ул (самостоятельно.abc)) TimedAnimation._stop(я) проходить возвращаться def _draw_frame (я, данные кадра): маржа = 2 в то время как (len (self. addedData) > 0): self.y = np.roll (self.y, -1) self.y[-1] = self.addedData[0] del(self.addedData[0]) self.line1.set_data(self.n[0: self.n.size - поле], self.y[0: self.n.size - поле]) self.line1_tail.set_data(np.append(self.n[-10:-1 - поле], self.n[-1 - поле]), np.append(self.y[-10:-1 - поле] , self.y[-1 - поле])) self.line1_head.set_data(self.n[-1 - маржа], self.y[-1 - маржа]) self._drawn_artists = [self.line1, self.line1_tail, self.line1_head] возвращаться ''' Конец класса ''' # Вам нужно настроить механизм слота сигнала, чтобы # отправлять данные в ваш графический интерфейс потокобезопасным способом. # Поверьте мне, если вы не сделаете это правильно, вещи # пойти очень очень неправильно.. класс Общение (QObject): data_signal = pyqtSignal (с плавающей запятой) ''' Конец класса ''' def dataSendLoop (addData_callbackFunc): # Настройте механизм сигнальных слотов. mySrc = Общаться() mySrc.data_signal. connect(addData_callbackFunc) # Имитация некоторых данных n = np.linspace (0, 499, 500) y = 50 + 25*(np.sin(n/8,3)) + 10*(np.sin(n/7,5)) - 5*(np.sin(n/1,5)) я = 0 пока (правда): если (я > 499): я = 0 время сна (0,1) mySrc.data_signal.emit(y[i]) # <- Вот вы излучаете сигнал! я += 1 ### ### если __name__== '__main__': приложение = QApplication (sys.argv) QApplication.setStyle(QStyleFactory.create('Plastique')) мойGUI = CustomMainWindow() sys.exit(приложение.exec_())
Просто попробуйте. Скопируйте и вставьте этот код в новый файл python и запустите его. У вас должен получиться красивый, плавно движущийся график:
Vistosi Plot Frame Торшер онлайн-продажа UK - Купите онлайн по лучшей цене! Мы отправляем в Великобританию
Магазин не будет работать корректно в случае, если куки отключены.
Похоже, в вашем браузере отключен JavaScript. Для наилучшего взаимодействия с нашим сайтом обязательно включите Javascript в своем браузере.
Переключить навигацию
Дизайн. свет. стиль
Язык
Великобритания
- Италия
- Германия
- Франция
- Испания
- Албания
- Андорра
- Австрия
- Бельгия
- Босния и Герцеговина
- Болгария
- Кипр
- Хорватия
- Чешская республика.
- Дания
- Эстония
- Финляндия
- Греция
- Гонконг
- Венгрия
- Ирландия
- Северная Ирландия
- Израиль
- Косово
- Латвия
- Ливан
- Лихтенштейн
- Литва
- Люксембург
- Македония
- Мальта
- Черногория
- Нидерланды
- Норвегия
- Польша
- Португалия
- Княжество Монако
- Румыния
- Сан-Марино
- Сербия
- Сингапур
- Словакия
- Словения
- Швеция
- Швейцария DE
- Швейцария Франция
- Швейцария ИТ
- Турция
- Украина
- Ватикан
- Остальной мир
Поиск
Меню
Счет
Настройки
Язык
Великобритания
- Италия
- Германия
- Франция
- Испания
- Албания
- Андорра
- Австрия
- Бельгия
- Босния и Герцеговина
- Болгария
- Кипр
- Хорватия
- Чешская республика.
- Дания
- Эстония
- Финляндия
- Греция
- Гонконг
- Венгрия
- Ирландия
- Северная Ирландия
- Израиль
- Косово
- Латвия
- Ливан
- Лихтенштейн
- Литва
- Люксембург
- Македония
- Мальта
- Черногория
- Нидерланды
- Норвегия
- Польша
- Португалия
- Княжество Монако
- Румыния
- Сан-Марино
- Сербия
- Сингапур
- Словакия
- Словения
- Швеция
- Швейцария DE
- Швейцария Франция
- Швейцария ИТ
- Турция
- Украина
- Ватикан
- Остальной мир
Перейти в конец галереи изображений
Перейти к началу галереи изображений
Обратитесь в службу поддержки .