


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、科技大学课程设计(软件设计)报告班 级:姓 名:学 号:同组同学:指导教师:曾慧日 期:2014 年11 月13 日1设计容 11.1实验目的 11.2实验容 12应用程序总体分析与设计 12.1项目建立 22.1.1 建立一个 Visual Basic 工程 22.2 OPC建立 22.2.1 设置 OPC包装 DLL 2建立一个OPC对象 23应用程序各功能模块分析与设计 43.1界面设计 43.2服务器的断开与 5连接OPC服务器和建立 OPC组 5添加OPC标签 5断开服务器 63.3数据读取与显示 7棒状图显示 73.3.2 文本框显示 83.4数据保存 83.5实时曲线绘制 84程
2、序测试 104.1测试过程 104.2测试结果 105程序文档 135.1使用说明 135.2程序清单 136总结 186.1问题与解决 186.2感想与致 197参考文献 191设计容1.1实验目的通过实际操作进一步了解OPCI勺各种概念,掌握OPC客户端的编写方法。并 对微软的DCO有一定的了解,要求通过合适的DCO配置,使客户端能够读取网 络上服务器中的数据。1.2实验容1)利用VB语言编写出一个简单的OPC客户端程序,要求这个客户端能够读 取服务器中的数据,并显示出来。2)配置DCOM使客户端能够能过 DCO读取另一台服务器上的数据。2应用程序总体分析与设计应用程序与OPCK务器进行连
3、接并读取服务器端的数据,同时把读取到的数 据通过棒柱和文本框显示,并可以保存数据便于查找,同时应用了 Picture控件 对实时数据变化趋势分析。2.1项目建立2.1.1 建立一个 Visual Basic 工程1)启动 Visual Basic, 新建一个 Visual Basic 工程。选择Standard EXE作为新建工程的类型。图2.1 Visual Basic工程的建立2.2 OPC 建立设置OPC包装DLL对OPC包装DLL进行注册:从Visual Basic 菜单里选择Project-References。在Available References 表示中,选择OPCAutom
4、ation 2.0。图2.2引用的设置建立一个OPC对象在Visual Basic 里,是以对象的单位对 OPC!务器进行访问。OPd动化接口是由以下四种对象所定义opC艮务器OPC&( OPC组集合)OPC标签(OPC标签集合)OPC浏览器1)变量声明图2.3 OPC对象变量的声明 其中,部分变量声明意义见表所示。表2.1 OPC对象变量的声明变量名说明objServerOPCServer对象,用于连接 OP。艮务器。objGroupsOPCGroup对象,用于添加OPCfi的OPC&集合objTestGrpOPCGrou对象,演示用的OPC组。objItemsOPCItem
5、s对象,用于添加OPC标签的OPC标签集合。IServerHa ndles()长整型的数组,用于保存OPC标签的服务器句柄。3应用程序各功能模块分析与设计3.1界面设计j OC Ac p catic1' Z'ernonbt?)S孫统讥fj找杰品不-车时救据更羽IT好注LobeLVLnbrl4宜时曲鲨彊踪nit 連五r、温帝轻示诰膜站、Eha/5iup口 | 国r I , I I I I r I I I I 擬作血扳AtDeii trier张怛刘启瞎图3.1界面效果图窗体中所使用的控件种类如表3.1所示表3.1 FmMain的控件控件名称窗体(Form)FmMai n命令按钮(C
6、ommandButton)BtnConn ect命令按钮(CommandButton)Bt nAddltem命令按钮(CommandButton)Bt nQuit命令按钮(CommandButton)Btn Save命令按钮(CommandButton)Btn Stop命令按钮(CommandButton)Bt ndraw定时器(Timer)tmUpdate定时器(Timer)dataUpdate对话框(CommonDialog)Common Dialog1图像(PictureBox)picBar(作为数组使用,从左开始12)标签(Label)lbBar(作为数组使用。从左开如12)文本框仃e
7、xtBox)dataI nfo图像(Picture)Picture13.2服务器的断开与321连接OPC服务器和建立OPC组这里用“ NEV”关键词生成OPC服务器的对象,然后调用OPC服务器对象的“Connect”方法,和OPC服务器连接。Connect子程序如下:'连接OPC服务器和建立OPC组Sub Connect(strProglD As String, Optional strNode As String)If objServer Is Nothing Then'建立一个OPC服务器对象Set objServer = New OPCServerEnd IfIf obj
8、Server.ServerState = OPCDisconnected Then' 连接OPC服务器objServer.Connect strProgID, strNodeEnd IfIf objGroups Is Nothing Then'建立一个OPC组集合Set objGroups = objServer.OPCGroupsEnd IfIf objTestGrp Is Nothing Then' 添加一个OPC组Set objTestGrp = objGroups.Add("TestGrp")End IfEnd Sub添加OPC标签对OPC服
9、务器进行访问前,必须先在OPC组里添加要访问的OPC标签。AddItem子程序如下:'添加OPC标签Sub AddItem()Dim strltemlDs(8) As StringDim ICIientHandles(2) As LongDim lErrors() As LongDim I As IntegerIf objTestGrp Is Nothing ThenExit SubEnd IfIf Not objItems Is Nothing ThenIf objItems.Count > 0 ThenExit SubEnd IfEnd If'设置组活动状态objTe
10、stGrp.IsActive = True'取消组非同期通知objTestGrpsSubscribed = False' 建立OPC项集合Set objItems = objTestGrp.OPCItems'生成标签的项标识符For I = 1 To 2strltemlDs(l) = "TAG"ICIientHandles =INext' 添加OPC项Call objltems.Addltems(8, strItemIDs, _ICIientHandles, IServerHandles, lErrors)End Sub断开服务器连接着OP(
11、服务器的OPC应用程序,在退出前必须断开和0P(服务器的连接。 因为OPC服务器并不知道OPC应用程序的退出,如果不先断开连接,那么OPC服务器使用的计算机资源就不被释放。 如果这样的问题反复发生,久而久之,连 续运转的自动控制系统可能会使计算机资源渐渐枯竭从而发生严重问题。Disconnect子程序如下:'断开OPO务器Sub Disconnect()Dim IErrors() As LongIf Not objItems Is Nothing ThenIf objltems.Count > 0 Then'清除OPC项objltems.Remove 2, IServer
12、Handles, lErrorsEnd IfSet objItems = NothingEnd IfIf Not objTestGrp Is Nothing Then' 清除OPC组objGroups.Remove "TestGrp"Set objTestGrp = NothingEnd IfIf Not objGroups Is Nothing ThenSet objGroups = NothingEnd IfIf Not objServer Is Nothing ThenIf objServer.ServerState <> OPCDisconnec
13、ted Then'断开OPC服务器.objServer.DisconnectEnd IfSet objServer = NothingEnd IfEnd Sub3.3数据读取与显示客户端使用2个定时器TmUpdate和dataUpdate,定时为1S。在TmUpdate 事件中调用同步读取数据函数SyncRead每隔1S读取服务器端的数据,同时对棒柱的显示进行刷新。在定时器dataUpdate事件中读取系统时间并不断刷新TextBox的容,显示当前的时间和数据。棒状图显示为了是显示更加人性化,对不同围的数值显示采用了不同的颜色。当数值过低或者过高时分别显示深蓝色和红色以示警告。中间值显
14、示绿色和橙黄色。程序代码如下所示:SyncRead OPCCache, vtltemValues, lErrors'棒图的表示For I = 1 To 2'数据的格式化strBuf = Format(vtltemValues(l), "#.000")'表示数据字符串lbBar(I).Caption = strBufdataTemp(I) = strBuf'计算棒的宽和高nWidth = picBar(l).ScaleWidthnHeight = picBar(l).ScaleHeightsglScale = vtltemValues(I) /
15、 100nDrawHeight = CInt(nHeight * sglScale)'清除现棒图picBar(I).Cls'绘制棒图If vtltemValues(I) < tHoldValuel ThenpicBar(l).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), RGB(0, 0, 255), BFElseIf vtltemValues(I) < tHoldValue2 ThenpicBar(I).Line (0, nHeight - tHoldValuel / 100 * nHeight)-(nWid
16、th, nHeight), RGB(0, 225,0), BFpicBar(I).Line (0, nHeight - nDrawHeight)-(nWidth, (1 - tHoldValue1 / 100) * nHeight),RGB(225, 225, 0), BFElsepicBar(I).Line(0, nHeight - tHoldValue1 / 100 * nHeight)-(nWidth, nHeight),RGB(0, 225,0), BFpicBar(I).Line(0, nHeight - tHoldValue2 / 100 * nHeight)-(nWidth, (
17、1 - tHoldValue1 / 100)* nHeight), RGB(225, 225, 0), BFpicBar(I).Line (0, nHeight - nDrawHeight)-(nWidth, (1 - tHoldValue2 / 100) * nHeight),RGB(255, 0, 0), BFEnd IfEnd IfIf I = 1 Theny(num1) = vtltemValues(I)num1 = num1 + 1Elsez(num2) = vtltemValues(I)num2 = num2 + 1End IfNextEnd Sub332文本框显示程序代码如下:P
18、rivate Sub dataUpdate_Timer()If SaveFlag Then '保存数据结束后清除原来的数据datalnfo.Text = Year(Now() & Month(Now() & Day(Now() & ""& Hour(Now() & ":"& Minute(Now() & ":" & Second(Now() & ""& "反应罐温度:"& dataTemp(1) &a
19、mp; "" &"反应罐液位:"& dataTemp(2) & Chr(13) & Chr(1O)SaveFlag = FalseElsedataInfo.Text = dataInfo.Text & Year(Now() & Month(Now() & Day(Now() & "" &Hour(Now() & ":" & Minute(Now() & ":" & Second(Now() &
20、amp; ""& "反应罐温度:"& dataTemp(1)& "" & "反应罐液位:"& dataTemp(2) & Chr(13) & Chr(10)End IfEnd Sub3.4数据保存此处定义bool型的SaveFlag为保存标志,在保存时停止对新的数据的接收。 主要用到Com mon Dialog控件。该控件可用于创建“文件打开”、“文件保存”、“文件打印”、“颜色设置”、“字体设置”、“帮助”6种对话框。程序代码如下所示:Private Sub
21、 BtnSave_Click()TmUpdate.Enabled = FalsedataUpdate.Enabled = FalseCommonDialog1.DialogTitle =" 另存为"CommonDialog1.DefaultExt = "txt"CommonDialog1.ShowSaveIf Len(CommonDialog1.FileName) > 0 ThenOpen CommonDialogl.FileName For Output As #1Print #1, dataInfo.TextClose #1SaveFlag =
22、 TrueEnd IfEnd Sub3.5实时曲线绘制Picture是功能强大坐标图绘制软件,本次设计中采用 VB中Picture控件 进行实时曲线绘制。在设计时添加2个系列曲线,代表两个通道,即温度和液位 与时间的关系。并在图中绘出两条警戒线,能更直观地比对数据的变化。实时曲线跟踪时闻图 3.2Picture 设置部分程序代码如下所示:Picturel.CIsIf Checkl.Value = 0 ThenIf col < 201 ThenFor u = 1 To 2For j = col To colX = jY = vtltemValues(u)px(j, u) = Xpy(j,
23、u) = 丫Next jNext ucol = col + 1pl = pl + 1ElseFor s = 1 To 2For t = 1 To 199px(t, s) = tpy(t, s) = py(t + 1, s)Next tpy(200, s) = vtltemValues(s)Next sEnd IfElsecol = colEnd IfIf pl >= 2 ThenFor w = 1 To 2Picture1.PSet (px(1, w), py(1, w)For j = 2 To colPicture1.L ine -(px(j - 1, w), py(j - 1, w)
24、, QBColor(w * 2)Next jNext wEnd If'画两条警戒线Picture1.DrawWidth = 2Picture1.Line (0, 150)-(200, 150), vbRedPicture1.Line (0, 600)-(200, 600), vbBlue'指示警戒值,警戒值以上改变显示颜色If lbBar(1).Caption > 150 Or lbBar(2).Caption > 600 ThenLabel7.Caption =" 出现异常!"ElseLabel7.Caption =" 正在观测!&q
25、uot;End IfIf lbBar(1).Caption > 150 ThenText2.Text =" 温度过高!"picBar(1). Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(255, 0, 0), BFEnd IfIf lbBar(1).Caption < 150 ThenText2.Text =" 温度平稳!"picBar(1) .L ine (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(0, 255, 0
26、), BFEnd IfIf lbBar(2).Caption > 600 ThenText1.Text ="液面过高!"picBar(2).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(255, 0, 0), BF4程序测试4.1测试过程运行程序后,先单击“连接”按钮,保证客户端连接上组态王数据库。然后 单击“加载”按钮,观察数据时候正常显示,棒柱的数据和颜色是否正常,文本 框的时间和数据是否正常以及看是否能实时显示曲线。单击“保存数据”按钮, 弹出对话框,选择路径,填写文件名后保存数据。最后单击“退出
27、”按钮,看成 否正常退出程序。运行程序,注意将bin文件夹放到工程下。4.2测试结果从测试结果上看,整个程序没有bug,各个功能正常。从绘图的结果可以看 出从服务器传来的数据是按正弦规律变化的。2014年:U月:U日莱鑫存状态呈示现在时间冷时10分4秒幌作育板-丈时曲线跟踪岀现异常!辰盍罐畐度 反应蘇立1GD. 473MO. OOC遗怪、溫當显示(迪恆红,禺驾)退出悍存油据厂 RuDj'Stopnx32OLMlli4ZtlAlHAZU1UL1421J1UL142010114 ztiuiu2H1U1142014LLUW9 g g0 1239 0 y i 111:4 7 93 日扫另41凤
28、网 ® o i - “ J - r ; y ofc 4 6 a-td T 3 6 5- L 4- 怎 4 1111T監1邮二lln:IX番UesLEner味恒刘启焙白童图4.1程序测试图一201411 月 14 日砚在时何:9时14分2秒抹作面板岀現异卒!实时曲线跟踪温蔭讨高!夜位、温卓显丢(Sf&tt-爲度辯)实时歆抵更新|7 Rin/StfltRj另存为S:201电111起3:14:5201411143:14:G201111149:14:7201«1143;14;0331电111屯3:14:9£01411143:14:10h 154. IBS h 15
29、0. 49E h 117. 933F; 50.1ST:103. 384 S- i3G-279图4.2程序测试图* *U(E!)卜亨二蚪* » ve »kfliH *爭理文禅夫-.WBE=1- .tni«卜载主雨OPC_数石±xt-7库3 w*=国=T 7*7*5Designer 张恒 刘启畤 白童E!|勺| 橫索VQP归-<&鞘曰悶斎耶1014-11 13 2145丈稈关20JU1 11 14 y:15丈不之也亶件芒恨;tVr?iSi电消图4.3保存数据5程序文档5.1使用说明(1) 运行程序,连接成功后,启动,此时棒状图以及文本框就会显示
30、反应 罐温度和反应罐液位的值。(2) 当数据积累到一定程度之后,点击“绘图”按钮,应罐温度和反应罐液位数值变化曲线就会显示出来,每点击一次,就会刷新一次。从而实现了数据的实时显示。程序中数据刷新为1s,因此在点击“绘图”按钮时频率最好不要 超过1s。(3) 保存数据。点击“保存”按钮,会弹出对话框,输入响应的文件名保 存便可。保存数据后,所有历史数据会被清空。5.2程序清单Option Base 1Option ExplicitDim WithEvents objServer As OPCServerDim objGroups As OPCGroupsDim objTestGrp As OPC
31、GroupDim objItems As OPCItemsDim IServerHandles() As LongDim px(200, 2) As Single, py(200, 2) As SingleDim col As IntegerDim pl As IntegerDim dataTemp(2) As StringDim DrawFlag As BooleanDim SaveFlag As BooleanSub Connect(strProglD As String, Optional strNode As String)If objServer Is Nothing Then
32、9;建立一个OPC服务器对象Set objServer = New OPCServerEnd IfIf objServer.ServerState = OPCDisconnected Then' 连接OPC服务器objServer.Connect strProgID, strNodeEnd IfIf objGroups Is Nothing Then'建立一个OPC组集合Set objGroups = objServer.OPCGroupsEnd IfIf objTestGrp Is Nothing Then'添加一个OPC组Set objTestGrp = objGr
33、oups.Add("TestGrp")End IfEnd SubSub Addltem()Dim strltemlDs(2) As StringDim ICIientHandles(2) As LongDim IErrors() As LongDim I As IntegerIf objTestGrp Is Nothing ThenExit SubEnd IfIf Not objItems Is Nothing ThenIf objItems.Count > 0 ThenExit SubEnd IfEnd If'设置组活动状态objTestGrp.lsActi
34、ve = True'取消组非同期通知objTestGrpsSubscribed = False'建立OPC项集合Set objItems = objTestGrp.OPCItems'生成标签的项标识符strltemlDs(l)="反应罐温度.Value"strltemlDs(2)="反应罐液位.Value"ICIientHandles(l) = 1lClientHandles(2) = 2' 添加OPC项Call objItems.AddItems(2, strltemIDs, _ ICIientHandles, ISer
35、verHandles, lErrors)End SubSub Disconnect()Dim IErrors() As LongIf Not objItems Is Nothing ThenIf objItems.Count > 0 Then'清除OPC项objltems.Remove 2, IServerHandles, lErrorsEnd IfSet objItems = NothingEnd IfIf Not objTestGrp Is Nothing Then' 清除OPC组objGroups.Remove "TestGrp"Set objT
36、estGrp = NothingEnd IfIf Not objGroups Is Nothing ThenSet objGroups = NothingEnd IfIf Not objServer Is Nothing ThenIf objServer.ServerState <> OPCDisconnected Then '断开OPC服务器.objServer.DisconnectEnd IfSet objServer = NothingEnd IfEnd SubPrivate Sub btnConnect_Click()'调用Connect子程序Call Co
37、nnect("kingview.view.1") Label7.Caption ="与服务器连接成功!End SubPrivate Sub btnAddltem_Click()'调用AddItem子程序Call AddItemIf Not objTestGrp Is Nothing ThenIf objTestGrp.OPCItems.Count > 0 Then '启动定时器tmUpdate.Enabled = True dataUpdate.Enabled = True ElseEnd IfEnd IfEnd SubPrivate Sub
38、 btnQuit_Click() '卸载窗体Unload fmMainEnd SubPrivate Sub Form_Unload(Cancel As Integer) ' 调用Disconnect子程序Call DisconnectEnd SubPrivate Sub tmUpdate_Timer()Dim vtItemValues() As VariantDim lErrors() As LongDim strBuf As StringDim nWidth As IntegerDim nHeight As IntegerDim nDrawHeight As IntegerD
39、im sglScale As SingleDim I As Integer, u As Integer, j As Integer, s As Integer, t As Integer, w As IntegerDim X As Single, Y As Single'同期读取SyncRead OPCCache, vtItemValues, lErrors'棒图的表示For I = 1 To 2'数据的格式化strBuf = Format(vtltemValues(l), "#.000")'表示数据字符串lbBar(l).Caption =
40、 strBuf dataTemp(l) = strBuf' 计算棒的宽和高nWidth = picBar(l).ScaleWidthnHeight = picBar(l).ScaleHeight sglScale = vtItemValues(I) / 700 nDrawHeight = CInt(nHeight * sglScale)'清除现棒图picBar(l).CIs'绘制棒图picBar(l).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _ RGB(255, 0, 0), BFNext'曲线绘制P
41、icturel.CIslf Checkl.Value = 0 Thenlf col < 201 ThenFor u = 1 To 2For j = col To colX = jY = vtltemValues(u)px(j, u) = Xpy(j, u) = 丫Next jNext ucol = col + 1pl = pl + 1ElseFor s = 1 To 2For t = 1 To 199px(t, s) = tpy(t, s) = py(t + 1, s)Next tpy(200, s) = vtltemValues(s)Next sEnd lfElsecol = colE
42、nd lflf pl >= 2 ThenFor w = 1 To 2Picture1.PSet (px(1, w), py(1, w)For j = 2 To colPicture1.Line -(px(j - 1, w), py(j - 1, w), QBColor(w * 2)Next jNext wEnd lf'画两条警戒线Picture1.DrawWidth = 2Picture1.Line (0, 150)-(200, 150), vbRedPicture1.Line (0, 600)-(200, 600), vbBlue'指示警戒值,警戒值以上改变显示颜色lf
43、 lbBar(1).Caption > 150 Or lbBar(2).Caption > 600 Then Label7.Caption ="出现异常!"ElseLabel7.Caption ="正在观测!"End IfIf lbBar(1).Caption > 150 ThenText2.Text =" 温度过高!"picBar(1).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(255, 0, 0), BFEnd IfIf lbBar(1).Ca
44、ption < 150 ThenText2.Text =" 温度平稳!"picBar(1).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(0, 255, 0), BFEnd IfIf lbBar(2).Caption > 600 ThenText1.Text ="液面过高!"picBar(2).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(255, 0, 0), BFEnd IfIf lbBar(2).Capti
45、on < 600 ThenText1.Text ="液面平稳!"picBar(2).Line (0, nHeight - nDrawHeight)-(nWidth, nHeight), _RGB(0, 255, 0), BFEnd IfEnd SubSub SyncRead(nSource As Integer, ByRef vtltemValues() As Variant, _ByRef IErrors() As Long)Dim IServerHandlesTemp(2) As LongDim j As IntegerIf objTestGrp Is Nothi
46、ng ThenExit SubEnd IfIf objTestGrp.OPCItems.Count > 0 Then'同期读取objTestGrp.SyncRead nSource, 2, lServerHandles, _vtItemValues, lErrorsEnd IfEnd SubPrivate Sub Form_Load()tmUpdate.Enabled = FalsetmUpdate.Interval = 100dataUpdate.Enabled = FalsedataUpdate.Interval = 1000'初始化时间变量col = 1pl = 0
47、'调用时间函数,显示时间Call date1'初始化坐标围Picture1.Scale (0, 750)-(200, 0)End Sub'调用系统时间子函数Sub date1()Label3.Caption = Trim(Str(Year(Date) + "年"+ Trim(Str(Month(Date) + "月 Trim(Str(Day(Date) + " 日"Label4.Caption ="现在时间:"+ Trim(Str(Hour(Time) + "时"+ Trim(Str(Minute(Time) + "分"+ Trim(Str(Second
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 餐饮企业员工培训与派遣合同
- 车祸保险理赔与第三方赔偿合同
- 儿童癫痫护理要点
- 中药中毒护理要点解析
- 护理模拟面试要点解析与实战准备
- 创口止血护理技术要点
- 高中生物必修二知识点总结
- 高考语文复习:文言文阅读之断句主观题填涂突破
- 《温室气体 产品碳足迹量化方法与要求 玻璃纤维纱产品》标准文本
- 肝炎治疗护理常规
- 快递店合作协议合同协议
- 2025CSCO非小细胞肺癌诊疗指南解读
- 《中式美食鉴赏》课件
- 民航旅客运输试题及答案
- 安全用电宣传课件初中
- 国开电大软件工程形考作业3参考答案 (一)
- 2025年-天津市安全员-B证考试题库附答案
- 2025年铁路列车员(中级)职业技能鉴定参考试题库-上(单选题)
- 游泳馆安全知识培训课件
- 2025年辽宁省抚顺市顺城区中考一模历史试题(原卷版+解析版)
- 第5课 弘扬劳动精神、劳模精神、工匠精神(教学设计) -【中职专用】中职思想政治《职业道德与法治》同步教学教学设计(高教版2023·基础模块)
评论
0/150
提交评论