PLC梯形图编程:经验设计法与常用电路实例

需积分: 39 26 下载量 26 浏览量 更新于2024-07-17 1 收藏 742KB PDF 举报
PLC梯形图编程方法是一种广泛应用在工业自动化领域的编程技术,它通过图形化的逻辑符号来表达控制系统的工作流程。这种方法以三菱、西门子等PLC厂商的梯形图为基础,直观易懂,便于理解和维护。 教学目标主要集中在两个方面:一是让学生掌握常见的PLC控制电路的编程,例如起动、保持、停止、常闭触点输入处理、多继电器线圈控制、多地控制、互锁控制、顺序起动控制等基本环节;二是通过经验设计法(试凑法),引导学生理解和应用实际控制问题。经验设计法强调设计者对典型电路的深入理解和灵活运用,将复杂的控制问题拆解为简单的模块,然后根据需求组合这些模块,形成满足特定控制任务的梯形图。 具体步骤包括: 1. 分解任务:明确控制系统的逻辑流程,将其分解为各个独立的控制任务。 2. 输入信号处理:理解并处理来自传感器或外部设备的输入信号,可能是常开或常闭触点。 3. 使用辅助元件:利用辅助触点、定时器和计数器等工具来延时、计数或者实现定时功能。 4. 功能指令应用:利用PLC提供的功能指令来简化编程,如SET和RST指令用于实现自锁保持。 5. 画出互锁和保护条件:确保系统的安全性和互斥性,避免不必要的冲突。 6. 绘制基本环节梯形图:根据以上分析,逐个绘制每个控制环节的梯形图。 例如,起动、保持和停止电路的梯形图示例中,通过X0启动信号和X1停止信号来控制Y10的状态。图a和c展示了利用Y10的常开触点实现自锁保持,而图b和d则通过SET和RST指令实现类似功能。这些基本电路的应用是PLC编程的基础,它们构成了更复杂系统的核心组件。 PLC梯形图编程方法要求学习者具备扎实的电气工程理论知识,同时具备逻辑思维和问题解决能力,能够灵活运用各种控制结构来满足实际生产过程的需求。熟练掌握梯形图编程不仅能够提升工作效率,还能提高故障排查和维护的效率。
2012-05-31 上传
梯形图转换语句表,软件测试阶段 IMPLEMENT_DYNCREATE(VDisPlayView, CScrollView) VDisPlayView::VDisPlayView() { //P_LIST cDatList; EnableAutomation(); } VDisPlayView::~VDisPlayView() { } HFONT C_SetFont(UINT uFont) { HFONT hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT); if (hFont == NULL) hFont = (HFONT)GetStockObject(ANSI_VAR_FONT); return hFont ; } void VDisPlayView::OnFinalRelease() { // When the last reference for an automation object is released // OnFinalRelease is called. The base class will automatically // deletes the object. Add additional cleanup required for your // object before calling the base class. CScrollView::OnFinalRelease(); } BEGIN_MESSAGE_MAP(VDisPlayView, CScrollView) ON_WM_CREATE() // ON_WM_MOUSEMOVE() ON_MESSAGE(WM_DRAWDATA, OnDrawData) // ON_WM_MOUSEHWHEEL() ON_WM_SIZE() // ON_WM_MOUSELEAVE() ON_WM_NCMOUSELEAVE() END_MESSAGE_MAP() BEGIN_DISPATCH_MAP(VDisPlayView, CScrollView) END_DISPATCH_MAP() // Note: we add support for IID_IViScroll to support typesafe binding // from VBA. This IID must match the GUID that is attached to the // dispinterface in the .IDL file. // {C1771C4B-2FF0-46ED-A4FE-D381086A49E4} static const IID IID_IViScroll = { 0xC1771C4B, 0x2FF0, 0x46ED, { 0xA4, 0xFE, 0xD3, 0x81, 0x8, 0x6A, 0x49, 0xE4 } }; BEGIN_INTERFACE_MAP(VDisPlayView, CScrollView) INTERFACE_PART(VDisPlayView, IID_IViScroll, Dispatch) END_INTERFACE_MAP() // VDisPlayView drawing void VDisPlayView::OnInitialUpdate() { //CScrollView::OnInitialUpdate(); //CSize sizeTotal; // TODO: calculate the total size of this view //sizeTotal.cx = sizeTotal.cy = 1000; // SetScrollSizes(MM_TEXT, sizeTotal); SetScrollSizes(MM_TEXT, CSize(VIEW_WIDTH,VIEW_HIGHT)); CScrollView::OnInitialUpdate(); } //void VDisPlayView::OnDraw(CDC* pDC) //{ // CDocument* pDoc = GetDocument(); // //CAutoPanDoc* pDoc = GetDocument(); // ASSERT_VALID(pDoc); // // // Get the invalidated rectangle of the view, or in the case // // of printing, the clipping region of the printer dc. // CRect rectClip; // CRect rectCloud; // pDC->GetClipBox(&rectClip;); // pDC->LPtoDP(&rectClip;); // rectClip.InflateRect(1, 1); // avoid rounding to nothing // // // Note: CScrollView::OnPaint() will have already adjusted the // // viewport origin before calling OnDraw(), to reflect the // // currently scrolled position. ///* for(int x=0; x<1600; x+=50) // { // for(int y=0; yFillSolidRect(rc, RGB(x,y,x*y)); // } // }*/ // // // // // TODO: add draw code here //} // VDisPlayView diagnostics #ifdef _DEBUG void VDisPlayView::AssertValid() const { CScrollView::AssertValid(); } #ifndef _WIN32_WCE void VDisPlayView::Dump(CDumpContext& dc) const { CScrollView::Dump(dc); } #endif #endif //_DEBUG // VDisPlayView message handlers int VDisPlayView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CScrollView::OnCreate(lpCreateStruct) == -1) return -1; m_pDC=new CClientDC(this); uRowNumber=10000;// uColNumber=4; /* UINT uRowNumber ,uColNumber, *uPerCol_Width,*uPerRow_height ,;*/ uPerCol_Width =new WORD[uColNumber]; uPerRow_height=new WORD[uRowNumber]; UINT i; for(i=0;i<uColNumber;i++) { *(uPerCol_Width+i)=123; } *(uPerCol_Width+2)=323; for(i=0;ipvRemark=&cDatList; //LVS_EDITABELS 允许项文本能够适本地进行编辑。父窗口必须运行了LVN_ENDLABLEDIT //ListView_SetExtendedListViewStyle //cDatList.SetExtendedStyle(LVS_EX_GRIDLINES| LVS_EDITLABELS); /* LV_COLUMN lvcol; lvcol.mask = LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH; lvcol.pszText = L"索引"; lvcol.iSubItem = 0; lvcol.cx = 130; cDatList.InsertColumn(0, &lvcol;); lvcol.mask = LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH; lvcol.pszText = L"元件"; lvcol.iSubItem = 1; lvcol.cx = 130; cDatList.InsertColumn(1,&lvcol;); lvcol.mask = LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH; lvcol.pszText = L"注释"; lvcol.iSubItem = 2; lvcol.cx = 130; cDatList.InsertColumn(2,&lvcol;); lvcol.mask = LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH; lvcol.pszText = L"辅助标号"; lvcol.iSubItem = 3; lvcol.cx = 130; cDatList.InsertColumn(3,&lvcol;); */ // cDatList.InsertColumn(0, L"序号", LVCFMT_LEFT, 40); // cDatList.InsertColumn(1,L"地物名称", LVCFMT_LEFT, 80); // cDatList.InsertColumn(2,L"地物颜色", LVCFMT_LEFT, 120); // CString strName, strIndex; // int m; // for(int i=0; i<32; i++) // { // strIndex.Format(L"%d", i+1); // strName.Format(L"Class%d", i+1); // cDatList.InsertItem( i, strIndex); // cDatList.SetItemText(i, 1, strName); //cDatList.SetItemText(i, 1, strName); //cDatList.SetItemData(i, RGB(rand(), rand(), rand())); // } //cDatList.ApproximateViewRect(CSize(670,700),-1); //cDatList.SetRowHeigt(26); //cDatList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP); //cDatList.Create(_T("CONTROL"),(LPCWSTR) NULL,WS_CHILD|WS_VISIBLE,rect,this,ID_FUNCTION_INSERT); /* if (!cDatList.CreateEx(0L,_T("CSCROLLVIEW"),(LPCWSTR) NULL, WS_CHILD|WS_VISIBLE| ES_AUTOHSCROLL|