还剩47页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
第1章绪论
1.1课题研究的背景和意义随着染色企业信息化的建设,利用计算机信息技术对染机进行集中管理已成为企业技术改造的重点染色工艺管理工作的信息化尤为重要,因为染色数据的准确性和设置的高效性决定了着产品的产量、质量,关系到染整企业整体的效益
[1]但由于目前染色机种类繁多,自动化水平参差不齐,功能规格均有所区别,使得染色工艺的集中设置和管理成为企业技术改造的难点
[2]开发染色工艺的设置及管理软件能够减少人为误差,可提高生产和管理效率,提高企业效益,提高市场竞争力借助数据库,可对各染机的染色工艺参数进行保存,对生产过程中的数据进行有效管理,大大降低企业人工记录的成本,和人为疏忽所产生的风险染色工艺设置与管理系统的`设计使染厂对染色工艺的管理更加自动化、信息化和规范化有助于印染企业建立灵敏的生产体系,具有较强的现实意义
1.2国内外现状和发展趋势虽然近年来我国染整行业经过多年快速发展,大量自动化程度较高的设备得到了使用,但由于染整工业属于劳动密集型行业,国内染整企业在染程库建设方面很多停留在人工处理阶段而且染色行业普遍存在染色机种类各异、自动化程度差异化明显、生产过程集成度低等现象,同时面临着企业员工流动性大、操作人员对自动化设备操作的熟练程度不一等问题,严重影响了染色效果
[3]国内针对准备车间机群而开发的数据管理系统相对较少,少数企业仅使用了一些信息管理系统,绝大多数的数据需要手动输入这种管理方式无法保证生产数据的准确性,无法全面管理整个车间设备,更不能实现对染机的各种实时数据如运转状况、质量情况、停机状态等的采集和生产过程中实时发生的各种异常事件的管理
[4]而国外染企的染机不仅具有多样化的控制功能还有完善友好的人机界面功能上,除了有温度控制以外,还有压力控制、主泵变频控制、浴比控制、流量控制、节能入排水控制等功能,有的控制器还能实现曲线加染料的功能染缸控制器提供了编辑现场染程和配方、记录现场数据和查询浏览历史数据等强大功能,并能和染缸集中控制系统进行集成在人机交互界面上,大多数染缸控制器采用液晶屏,不仅能及时向用户反应染色过程的温度、液位、压力等信息并带有图文茂的动画显示功能以国外以色列Ard亚瑞公司为例,其开发的Ard染色工艺库软件将染程分为主染程和子染程,可以将染程组合形成新的染程,也可以合并相似的染程,并可对染程库进行优化Ard系统与其它系统相比,其独特之处是,其染程中不仅仅包含工艺动作信息,还包含配方信息,这就使得染程成为联系印染企业ERP系统、染缸集中控制系统和染助剂称重配送系统等之间联系的纽带,实现染厂的集成控制成为可能
[4]通过比较得出,国内染色行业自动化程度还远远落后于国外一些发达国家总体来说有,国内染色行业将朝着更加智能化、开放性、分散化、网络化、信息化的方向发展
1.3研究内容和方案
1.
3.1主要研究内容本系统的目的在于对染色工艺进行集中设置与管理该系统实现的功能包括染机的管理、染机功能和参数的设置、IO预排、IO配置以及参数的下载为了完成该系统的设计,需要对染色过程进行分析,需要掌握一门数据库和界面开发工具本系统的主要研究内容包括
1、选择合适的数据库平台,分析染色工艺中需要设置与管理的数据,创建相应的数据表,根据各个数据表的关系设计主键和外键,并添加相应的数据所有与染色工艺相关的数据都保存在这些数据表中
2、选择合适的界面开发工具,根据系统的功能设计便于操作人员使用的界面所有对数据库数据的更改、添加或删除都在这些界面内完成
3、选择界面与数据库之间的连接方案
4、设计IO预排的方式
5、选择合适的通信控件,实现下载功能
6、设计合适的的数据封装方式以及通信协议
7、选择合适的调试工具,便于测试下载功能
1.
3.2系统的设计方案
1、在数据库方面,鉴于开源的PostgreSQL的优点和本系统的特点,选择Windows下PostgreSQL数据库作为系统数据库开发的平台
2、为了实现该系统的功能,并能在短时间内掌握界面开发工具的使用,选用了较为易学且编译快捷的Delphi2010开发用户界面
3、Delphi2010通过ODBC建立与PostgreSQL数据库的连接,通过ADO控件对数据库中的配置参数进行修改和保存
4、为了实现IO预排功能,即对染色机控制器的输入输出功能进行定义,必须建立系统所支持的控制器表,其中包括IO数量以及其他信息,使用人员完成对染机功能的定以后,系统可以统计所需的IO口数量,依据染机功能对控制器IO进行预排生成IO配置数据前必须进行IO预排
5、下载分为IO配置下载和参数下载通过ComPort控件实现与下位机的通信,对于IO配置下载,系统将IO预排所生成的数据下载到下位机,下位机依据此数据对控制器IO进行定义对于参数下载,系统将参数表中的所有数据下载到下位机,下位机通过查询找到功能对应的参数
6、数据下载任务分为两层,上层只负责数据封装,下层只负责数据发送在发送数据前需要生成相应的数据,生成后的数据包含数据头和实际数据两部分,以长字符串的形式储存在数据库中本系统采用较为简单的校验方式
7、最后通过手机蓝牙转串口的方式接受上位机发送的数据,从而实现对系统下载功能的调试通过验证此方案可行第2章开发平台介绍
2.1Delphi2010简介Delphi2010
[7]是Borland公司研制的新一代可视化开发工具,可在WindowsXP、Windows
7、Linux等环境下使用采用面向对象的编程语言ObjectPascal和基于部件的开发结构框架Delphi2010相对于Delphi7拥有更加强大的功能,ObjectPascal被称为第四代编程语言,它具有功能强大、简单高效等特点和VC相比,Delphi更简单、更易于掌握,而在功能上却丝毫不逊色;和VB相比,Delphi则功能更强大、更实用可以说Delphi同时兼备了VC功能强大和VB简单易学的特点它一直是程序员至爱的编程工具
[8]Delphi2010具有以下的特性基于窗体和面向对象的方法,高速的编译器,强大的数据库支持,与Windows编程紧密结合,强大而成熟的组件技术但最重要的还是ObjectPascal语言,它才是一切的根本ObjectPascal语言是在Pascal语言的基础上发展起来的,简单易学
[8]Delphi2010
[9]内置的Direct2D模块及开发库,其新加的功能拥有一个能同时运作于x86和x64的IDE,在此IDE下将会有跨平台编译器,能够编译用于Linux和MAC的应用程序;会支持Windows7下的触摸式编程;强化的DataSnap;支持云计算;支持函数式编程在Delphi2010众多的优势当中,它在数据库方面的特长显得尤为突出适应于多种数据库结构,从客户机/服务机模式到多层数据结构模式;高效率的数据库管理系统和新一代更先进的数据库引擎;最新的数据分析手段和提供大量的企业组件由Borland公司推出的Delphi2010可视化编程环境,满足染色工艺设置与管理系统的程序开发要求它提供了非常丰富可供使用的控件,以及丰富的API函数满足管理系统的各项功能要求数据库支持是Delphi的强项,并且使用易学、方便、快捷的Delphi2010开发应用软件,无疑会大大地提高编程效率,快速地构造出应用系统
2.2PostgreSQL简介PostgreSQL
[10]是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),可以说是目前世界上最先进,功能最强大的自由数据库管理系统它的前身是以加州大学伯克利分校计算机系开发的POSTGRES,版本
4.2为基础的对象关系型数据库管理系统PostgreSQL支持大部分SQL标准并且提供了许多其他现代特性复杂查询、外键、触发器、视图、事务完整性、多版本并发控制同样,PostgreSQL可以用许多方法扩展,比如,通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言PostgreSQL的特性覆盖了SQL-2/SQL-92和SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备,比如IP类型和几何类型等;其次,PostgreSQL是全功能的自由软件数据库,很长时间以来,PostgreSQL是唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统
[11]任何人都可以以任何目的免费使用、修改、和分发PostgreSQL,不管是私用、商用、还是学术研究使用PostgreSQL的确还欠缺一些比较高端的数据库管理系统需要的特性,比如数据库集群,更优良的管理工具和更加自动化的系统优化功能以及提高数据库性能的机制等在系统实现的功能上以及系统开发的效益上来考虑,使用PostgreSQL数据库应用于本系统的开发无疑是最佳的选择第3章系统及数据库分析
3.1系统功能结构根据系统的要求,对染色工艺设置与管理系统的功能图如下图3-1系统功能结构框图
3.2系统功能目标
3.
2.1染机群组的查询及管理点击染机群组后系统能自动读取数据库中的关于染机群组表的基本信息,用户可以在这里查询染机群组信息,并且能够进入相应的功能定义,参数设置,I/O口预排,查看染程和染程下载界面在菜单项内还包括串口参数设置、新建染机群组和染机功能界面等
3.
2.2染色功能的定义及保存系统自动连接与显示PostgreSQL数据库中染机功能表,当选中相应的主功能时应显示其子功能,并能对其进行复选和保存新建染机群组,当没有相应的功能时,可以添加染机功能,并添加至相应的数据表中
3.
2.3染色参数的设置及下载系统界面能显示染机群组所有的参数及其数值和说明,当选中相应的参数时,可以对其进行修改和保存系统实现对染机群组所有类型参数设定的保存,能自动生成数据并能自动下载到对应的染机
3.
2.4IO口的预排及配置下载系统显示当前染机群组所需要的I/O端口数量,以及所选控制器的I/O端口数量系统能判断是否符合要求,并自动对控制器IO口进行预排,即为其定义主功能和子功能点击预排后的IO口可查看具体功能说明,点击数字输入,数字输出,模拟输入,模拟输出时查看对应的端口和功能说明系统可自动生成IO配置数据以供下载下载的数据帧带有校验码
3.3数据库的设计本节将介绍本系统所使用的PostgreSQL数据库的数据结构以下为主要的数据表单
3.
3.1染机群组设备表表3-1染机群组基本信息数据表(ctl_machine_group)字段序号字段名称字段含义字段类型主外键非空1SerialNumber机器群组代码MgidCharactervarying主键是2MchineType机器代号Charactervarying否否3CALLNAME机器简称字符型否否4FULLNAME机器全称字符型否否5CONTROLLER机器控制器类型integer否否表3-2染机基本信息(ctl_machines)字段序号字段名称字段含义字段类型长度主外键非空1Mcid机器代码Charactervarying主键是2Mgid机器群组代码Charactervarying外键是3MchType类型代号Charactervarying否否4MchTypeNumber机器简称integer否否5CALLNAME机器全称Charactervarying否否6CONTROLLER机器控制器类型integer外键否一个染机属于一个群组,群组表和染机表基本相同,但少了一个机器ID字段
3.
3.2染机功能表表3-3染机主功能定义表sysfunctionschn字段顺序字段名称字段含义字段类型主外键非空1FnCTID控制器类型integer否是2funcid功能编号integer主键是3fnccallname功能文字说明(显示给用户)Charactervarying否否表3-4染机子功能定义数据表syssubfunctionschn字段顺序字段名称字段含义字段类型主外键非空1fncitd控制器类型integer否否2sbffunction功能编号integer主键是3sbfnumber子功能编号integer主键是4sbfname每个子功能的文字说明Charactervarying否否5sbftexttrue真值文字Charactervarying否否6sbftextfalse假值文字Charactervarying否否7sbforioalloc是否需要分配IOboolean否否8do需分配DO个数integer否否9di需分配DI个数integer否否10ao需分配AO个数integer否否11ai需分配AI个数integer否否12pi需分配PI个数integer否否13check是否点击integer否否14checkid点击序号integer否否是否需要分配IO口以及需要分配的IO数量需根据各个功能的定义说明来决定,IO的预排参考此表表3-5染机群组功能定义数据表ctl_mchgrp_definitions字段顺序字段名称字段含义字段类型主外键非空1mgid机器群组代码Charactervarying主键是2mcid机器代码Charactervarying主键是3funcnumber功能编号integer主键是4funcbits功能定义Charactervarying否否每个功能根据定义与否分别用0(未定义)或者1(已定义)表示,形成一个以0和1为字符的字符串,其最大长度为150,即每个功能下最多可定义150个子功能
3.
3.3染机参数表表3-6染机群组主参数数据表sysparametertypes字段顺序字段名称字段含义字段类型主外键非空1ptid参数类别Charactervarying主键是2callname短名称Charactervarying否否3fullname长名称Charactervarying否否4comment备注Charactervarying否否5paramdata参数数据Charactervarying否否6typeid主参数编号integer否否表3-7染机子参数信息数据表public_ctl_machine_parm字段顺序字段名称字段含义字段类型长度主外键非空1mcid机器代码Charactervarying主键是2mgid机器群组代码Charactervarying主键是3ptid参数类型Charactervarying主键、外键是4pid参数位置代码smallint主键是5callname参数名称Charactervarying否否6valuelo参数最小值(双精度)Doubleprecision否否7valuehi参数最大值(双精度)Doubleprecision否否8function参数对应的功能主代码integer外键否9subfunc参数对应的功能次代码integer外键否
3.
3.4控制器及IO配置表表3-8控制器表(sysController)字段序号字段名称字段含义字段类型主外键非空1ctlid控制器编号integer主键是2ctlaiAI数量integer否否3ctlaoAO数量integer否否4ctldiDI数量integer否否5ctldoDO数量integer否否6ctlpiPI数量integer否否7ctlrecsta数据charactervarying否否控制器表存放系统所支持的控制器的类型和基本信息,控制器的配置信息在public_funcio表中表3-9染机控制器IO配置表(public_funcio)字段序号字段名称字段含义字段类型主外键非空1ioIO类型charactervarying主键是2ionumberIO序号integer主键是3ioenableIO始能integer否否4sbffunction所属主功能integer否否5sbfnumber所属子功能integer否否6iocommandIO命令号integer否否7ioaddress存放首地址charactervarying否否8ioidIO编号integer否否染机控制器IO配置表用于设置染机控制器的IO配置情况
3.4数据库ER关系图图3-2数据库E-R关系图第4章系统界面及功能
4.1系统主要界面
4.
1.1登录界面用户双击桌面快捷方式打开软件,系统显示启动画面,并要求用户输入数据库密码,输入正确即与数据库建立连接,并进入系统操作界面图4-1启动画面图4-2连接数据库
4.
1.2染机群组设置界面用户进入操作界面后,系统显示所有染机(下图左)用户点击染机群组设置下的新建群组和新建染机染将弹出以下两个窗口(下图右)输入并点击添加确认后将在染机群组表和染机表生成一条记录图4-3系统主界面及其菜单图4-4新建染机群组及染机点击染机群组将进入染机群组界面,系统自动读取数据库中的关于染机群组表的基本信息,用户在此窗口完成大多数的系统功能,当选中相应的染机群组时,界面中相应的功能按钮显示可用图4-5染机群组界面
4.
1.3功能定义界面用户在左侧列表选择主功能,系统在右侧列表自动导入对应的子功能,用户可在此处对子功能进行多项选择,完成后按保存键,音效提示完成数据库记录的更新如果没有主功能,可进行添加,窗口提示添加完成后,可继续完成子功能的选择图4-6染机功能定义界面
4.
1.4参数设置界面当用户选中相应的染机群组时,参数按钮显示为可用,当点击参数设置按钮时,系统自动连接数据库的主参数数据表,在左侧的区域选择主参数和子参数后将在界面右区域显示对应的参数说明,并显示当前参数值用户在文本编辑框内对当前值进行修改,按下回车键即可保存数据图4-7染机参数设置界面
4.
1.5IO预排界面IO预排是为了根据染机的功能定义,给其控制器的IO口定义主功能和子功能IO口类型和数量必须符合功能要求不同的功能定义,不同的控制器会有不同的预排结果用户点击查看按键系统自动显示对应IO数量再点击IO预排之前生成数据按键无效,预排之后右侧IO口配置列表将自动更新在生成按键点击之前IO配置下载按键无效,生成数据后可在memo窗口查看点击右侧的IO口可查看对应的功能定义说明点击IO配置按键进入IO配置下载界面图4-8IO预排界面
4.
1.6IO配置下载界面在手动发送和自动发送之前需要打开串口,当串口成功配对以后便可以发送数据点击手动发送前需点击CRC生成十六进制代码每点击一次发送当前十六进制码点击开始发送自动将数据放入数据字节内,完成所有数据的发送发送过程中显示进度情况发送完成弹出窗口提示图4-9IO配置下载界面
4.
1.7查看染程界面根据染机群组和染程代号查询相应的染程情况,如图显示染程的基本信息图4-10染程查看界面
4.
1.8参数下载界面在参数下载之前需要打开串口设置串口参数成功连接后点击参数下载按键自动发送所有类型参数图4-11参数下载窗口
4.
1.9串口设置界面用户再此界面完成串口参数设置,右侧带有测试窗口可接收发送数据当串口捂手成功后DSR、CTS、Conn灯亮图4-12串口设置窗口
4.2系统功能流程图
4.
2.1系统功能总流程图根据整个系统功能的要求,设计系统功能总的流程图如下图4-13系统功能总流程图
4.
2.2功能定义及参数设置流程图根据系统功能定义的要求,设计功能定义这个界面的功能流程图如下图左参数设置的功能流程图如下图右图4-14功能定义流程图图4-15参数设置流程图
4.
2.3IO口预排流程图IO预排模块的功能流程图如下图4-16IO预排流程图
4.
2.4IO口配置下载流程图图4-17IO配置下载流程图
4.
2.5参数下载流程图图4-18参数下载流程图
4.3系统主要代码以下内容为实现本系统功能的主要程序和函数,详细代码请参见附录
4.
3.1功能定义主要代码点击保存按键将执行以下三个程序SaveFuncbits;//将Listview的点情况已字符串的形式保存在public_ctl_mchgrp_definitions的funcbits字段SaveCheck;根据funcbits字段的内容,对public_syssubfunctionschn的check进行更新sndPlaySoundpathSND_ASYNC;音效提示用户已保存,即执行了前面两个程序procedureTfrmfunction.SaveCheck;主要包含两个SQL查询语句和一个SQL更新语句SQL.AddSELECTfuncbitsFROMpublic_ctl_mchgrp_definitionsWheremgid=:p1ANDfuncnumber=:p2;//获取某一主功能的字符串SQL.AddSelectcheckFrompublic_syssubfunctionschnWHEREsbffunction=:p1ANDfncitd=:p2orderbycheckidasc;SQL.AddUPDATEpublic_syssubfunctionschnSETcheck=:p1WHEREsbffunction=:p2ANDsbfnumber=:p3;//更新子功能,若选择将至
14.
3.2IO预排代码
1、IO口数量查看键的功能分别查询表public_syssubfunctionschn中的各IO口字段与check字段,对其进行相乘并累加得到各IO需要的数量根据Combobox的选择对表syscontroller进行查询,显示控制器所能提供的各IO数量
2、IO预排键的功能先判断所选控制器的IO口数是否大于需要分配的IO口数量,若满足要求则根据public_syssubfunctionschn表中check字段的情况,对IO配置表public_funcio进行更新否则提示IO口不足,这里需要说明的是,现阶段默认控制器对IO口没有定义,系统根据按功能的顺序,从小到大进行自动分配
3、生成数据的功能根据IO配置表public_funcio所有IO的配置情况,按一定的协议生成一长字符串并将其写入表syscontroller的ctlrecsta字段,配置下载界面将对其进行下载
4.
3.3IO配置下载代码SQL.AddSelectctlrecstaFromsyscontrollerwherectlid=1;str:=fieldbynamectlrecsta.Value;//提取IO配置数据字符串edit
7.Text:=inttostrstrtoint$+edit
3.Text+strtoint$+edit
4.Text+strtoint$+edit
5.Text+strtoint$+edit
6.Text;//生成CRC校验码frmcomset.ComPort
1.WritePChararrayfun8;//以字节数组的形式发送frmcomset.SendStringviewstring;//以字符的形式发送
4.
3.4参数下载代码在串口连接成功以后,用户按参数下载键生成数据包并自动下载,其主要程序如下str2:=ABCD01010101;//生成参数数据头文件setparamdataD;//生成D类参数字符串,并写入表sysparametertypes对应的Paramdata字段其他类型参数通过调用setparamdata‘参数类型’str:=pid+fun+sub+vallo+valhi;//字符串生成代码downloadparamdata;//下载参数数据程序procedureTfrmcom.downloadparamdata;的主要功能是将所有类型参数合成一个数据字符串,并将timer
1.Enabled设置为true启动timer1控件每一次Timer1事件都调用frmcomset的SendStringsendstr程序发送相应的数据
4.
3.5串口通信代码串口通信部分使用ComPort控件,窗口Comcombox控件自动获取端口号,设置完端口、波特率、检验位、数据位、停止位、及控制流后点击打开串口当成功连接后ComLed控件灯亮ComPort
1.Open;//打开串口其他说明请详见附录
4.4数据封装与协议数据下载任务分为两层,上层只负责数据封装,下层只负责数据发送在发送数据前需要生成相应的数据,生成后的数据包含数据头和实际数据两部分,以长字符串的形式储存在数据库中
4.
4.1IO配置数据结构数据头由16个字符组成,登录号代表用户,默认ABCD;染机代号前两个字符表示其染机群组的代号;控制器代号表示接收该配置数据的控制器;数据长度为数据头及实际数据的总长度实际数据包含IO口具体的配置信息,首地址代号为在下位机存放某一IO口配置参数的寄存器地址首地址,每一个IO口预留16字节的空间IO口号的含义是用10代表AI用11代表AO用12代表DI用13代表DO用14代表PIIO口代号为对应IO的序号使能状态01代表有分配功能,00代表无分配功能功能编号前两个字符代表主动能,后两个字符代表子功能IO配置数据可选用字符或字节的形式发送,IO预排界面中生成数据按键的作用是从表public_funcio提取相关字段的数据,以如下表格的形式自动生成一个长字符的IO配置数据表4-1IO数据结构表数据头登陆号染机代号染程代号控制器代号数据长度字符ABCD01010101Length()实际数据首地址代号IO号IO口代号使能状态功能编号10001001010301101010020103131020100301031410501101010419106011020000091070110300021010A0120100021110D0130101050110E01302010402图4-19syscontroller表如图,表syscontroller中的ctlrecsta字段内储存自动生成的IO配置数据控制器1共配有AO口5个AI口5个DO口40个DI口3个PI口1个加上数据头共有55行数据,数据长度字符
(0772)从第一行开始累加到最后一行生成一个完整的数据字符
4.
4.2参数数据结构每一类型参数将生产一个长字符数据,其数据保存在表sysparametertypes的paramdata字段内,数据头中包含登陆号、染机代号、控制器代号以及数据长度等信息每一个参数都包含参数类型、序号、功能编号以及最低值和最高值最高值不应超过65535表4-2参数据结构表登陆号染机代号染程代号控制器号数据长度ABCD01010101参数类型号序号功能编号最低值最高值D0100010000FFFFF0100010000FFFFL0100010000FFFFP0100010000FFFFT0100010000FFFF图4-20sysparametertypes表如图,表sysparametertypes中的paramdata字段内储存自动生成的参数数据
4.
4.3通信协议循环冗余码校验简称CRC,它是利用除法及余数的原理来作错误侦测(ErrorDetecting)的实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误
[11]由于时间有限,本系统规定了较为简单的CRC校验码其生成形式即CRC等于命令字节与数据字节的和,要求输入十六进制的字符,如果输入不满足要求将提示错误,点击CRC后自动生成对应的CRC校验码,在传输过程中如果检验不对,则丢弃该数据帧帧手动输入生成一数据的界面如下图所示图4-21手动输入数据帧界面自动发送时将提取该长字符串,按顺序将字符装载进下层每一数据帧中,并自动生成CRC码实现过程如下图示图4-22数据传输上下层关系图图4-23手机蓝牙转串口接收数据第5章系统调试与总结在后期对软件各个窗口的调试中发现了不少的错误,错误主要集中在按键的顺序上,比如在发送数据之前没有对串口进行设置,在生成IO配置数据前没有对其进行预排在手动发送数据前没有按CRC按键生成数据帧,及保存按键中处在的错误等解决办法是在条件满足前使按键无效,通过proceduresetBtnstatus:Boolean实现调试完成后基本解决了用户操作过程中可能会出现的错误但由于时间有限还有以下方面有待改进
1、通信协议与检验码本系统已经通过蓝牙转串口的方式实现了基本的通信功能,即笔记本与带蓝牙设备的之间的发送和接收数据但在数据的封装和编排上,目前还只是极其简单的对IO口配置数据及参数进行封装的,由于经验不足,还有很多需要改进的地方特别是底层的通讯协议,如何生成较为通用的校验码
2、数据库及界面内容完善数据库的有序管理对本系统维护至关重要,特别是与染机群组与染机有关数据表的处理上,染机群组与染机的区别没有得到很好的体现现只有一组染机群组有完整的设定,其他染机群组还有待完善界面设计中控件、窗口及按键的命名有待完善
3、染机对染机群组的继承本系统只能添加新的染机群组和新的染机,即在相应的数据表中增加记录,但染机相应的功能参数还未能从染机群组里得到继承
4、远程访问数据库本系统只能连接本地的PostgreSQL数据库,但是企业级的数据库管理较多采用专用的服务器,通过网络的方式将系统连接到数据库也是有待改进的地方参考文献
[1]张建新.基于工业以太网的染色设备监控系统[J].纺织学报2005264:109~112
[2]王纯贤王治森褚学宁等.分散网络化制造环境下基于移动Agent和Web的生产监控研究[J].制造业自动化2002242:36~41
[3]郝平陈平生.多智能体的车间染缸集群监控系统[J].自动化仪表20102594:25~33
[4]杨永刚.间歇式染色机中央集成控制系统的研究与开发[D].杭州:浙江理工大学机械与自动控制学院2011
[5]徐智文延青.用Delphi开发监控和管理系统的软件[J].包钢科技2008161:11~14
[6]宋运通.基于实时数据库的工厂智能平台研究开发[D].天津:天津大学2009
[7]张乾.基于BorlandDelphi开发平台的数据库应用系统开发的原理与应用研究[D].重庆重庆大学2009
[8]邵景峰李永刚任克俭等.纺织厂生产信息监控系统的设计[J].毛纺科技2010453:67~69
[9]俞利国.基于Linux的嵌入式间歇染色机控制器研究与开发[D].杭州:浙江理工大学2012
[10]R.García-Flores.Agent-basedinformationflowforprocessindustriessupplychainmodelling[J].ComputersandChemicalEngineering2000242
[11]王丽纳陈皓赵力邹采荣.基于串口通信的无线数据传输[A].江苏省通信学会2004年学术年会论文集[C].
2004.225~228
[12]杨丹红.Delphi与数据库连接技巧与方法的探索[J].上海电力学院学报200943:8~9
[13]刘春波.染色企业染色与配色管理系统的研究与开发[D].青岛:青岛大学2009
[14]王静赵怀林孙玉强.Delphi环境中的串口通信程序设计方法[J].微机发展20021304:26~28
[15]LiSiHui.RealizationofRS485SerialCommunicationBetweenMicrocomputerandMultipleInvertersBasedonDelphi[J].AdvancedMaterialsResearch20111289268
[16]PBChenCWMYuenCKYeung.Limitsofaccuracyofdyeingprocesscontrolanddyeingquality[J].ColorationTechnology20061203:138~143致谢本次毕业设计以染色工艺设置与管理系统为课题,这对于我来说有很大的挑战,因为在开始之前没有很好的计算机基础,只能从零开始学习界面编程和数据库管理前期付出了较多的时间学习开发工具和以及理解染机集中管理系统,才能实现和完善染色工艺管理系统的功能在毕业设计的过程中,我深刻的体验到要做好这个课题不仅需要熟练掌握开发工具,熟悉染色工艺的流程,更重要的在于与导师之间的沟通,每一次的沟通都使我对课题更加深入的理解,对系统实现的功能更加明确,少走了不少弯路没有老师的细心讲解我很难对染程工艺有系统的了解更不可能完成数据库及系统界面的开发毕业设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高通过本次毕业设计,我体验了软件系统设计的全过程,在实践中了解了软件设计开发的步骤、流程以及思路,增长了在软件开发方面的见识很好地培养了我们的分析问题、解决问题的能力同时独立工作能力、合作能力也有了很好的提高感谢张老师,在他的指导下,我从最初的一无所知,然后慢慢熟练,一步步完成了系统的功能最终在规定的时间内完成了预定的设计要求,实现了预期的功能感谢在我身边支持我的同学们,在与你们讨论中总能碰撞出思想的火花同时还要感谢所有的老师,是你们的培养才有今天的我,是你们宝贵的意见才能使得系统有更好的改进由于时间比较仓促,本论文难免有一些不足之处,恳请各位老师和学友批评和指正!附录软件主要代码功能定义主要代码procedureTfrmfunction.SaveCheck;varIK:integer;funcbits:string;beginforI:=1to11doBeginwithdm.ADOQuery_funciobitsdobeginClose;SQL.Clear;SQL.AddSELECTfuncbitsFROMpublic_ctl_mchgrp_definitionsWheremgid=:p1ANDfuncnumber=:p2;Parameters.ParamByNamep
1.Value:=100;Parameters.ParamByNamep
2.Value:=I;Open;funcbits:=fieldbynamefuncbits.Value;end;withdm.ADOQuery_checkdobeginClose;SQL.Clear;SQL.AddSelectcheckFrompublic_syssubfunctionschnWHEREsbffunction=:p1ANDfncitd=:p2orderbycheckidasc;Parameters.ParamByNamep
1.Value:=I;Parameters.ParamByNamep
2.Value:=1;open;K:=1;First;whilenotEofdobeginwithdm.ADOQuery_funciosetdobeginClose;SQL.Clear;SQL.AddUPDATEpublic_syssubfunctionschnSETcheck=:p1WHEREsbffunction=:p2ANDsbfnumber=:p3;Parameters.ParamByNamep
1.Value:=strtointfuncbits[K];Parameters.ParamByNamep
2.Value:=I;Parameters.ParamByNamep
3.Value:=K;ExecSQL;end;incK;Next;end;end;End;end;参数下载代码implementationusesUdmUfrmcomset;{$R*.dfm}procedureTfrmcom.setBtnstatus:Boolean;beginButton
2.Enabled:=status;Button
3.Enabled:=status;end;procedureTfrmcom.Button1ClickSender:TObject;beginself.Close;end;procedureTfrmcom.Button3ClickSender:TObject;varI:integer;str:arrayofstring;str2ptidpidvallovalhifunsub:string;beginstr2:=ABCD01010101;memo
3.Clear;memo
3.Lines.Addstr2;setparamdataD;setparamdataF;setparamdataL;setparamdataP;setparamdataT;k:=1;downloadparamdata;end;procedureTfrmcom.Button4ClickSender:TObject;beginifnotfrmcomset.ComPort
1.ConnectedthenbeginApplication.CreateFormTfrmcomsetfrmcomset;frmcomset.ShowModal;endelsesetBtntrue;button
4.Caption:=串口已打开;end;procedureTfrmcom.FormCloseSender:TObject;varAction:TCloseAction;beginfrmcomset.ComPort
1.Close;end;procedureTfrmcom.FormCreateSender:TObject;begintimer
1.Enabled:=false;setBtnfalse;memo
1.Text:=COM;memo
2.Text:=1;end;functionTfrmcom.setparamdataptid:String:string;varI:integer;str:string;str2pidvallovalhifunsub:string;beginwithdm.ADOQuery6dobeginclose;SQL.Clear;SQL.AddSelect*Frompublic_ctl_machine_parmWheremcid=:p1andptid=:p2orderbypidasc;parameters.ParamByNamep
1.Value:=1;parameters.ParamByNamep
2.Value:=ptid;open;SetLengthstrrecordcount;memo
3.Lines.Addptid+inttostrrecordcount;I:=1;First;whilenotEofdobeginpid:=inttostrfieldbynamepid.value;iflengthpid=1thenpid:=0+pid;fun:=inttostrfieldbynamefunction.value;iflengthfun=1thenfun:=0+fun;sub:=inttostrfieldbynamesubfunc.value;iflengthsub=1thensub:=0+sub;vallo:=inttostrfieldbynamevaluelo.value;iflengthvallo=3thenvallo:=0+vallo;iflengthvallo=2thenvallo:=0+0+vallo;iflengthvallo=1thenvallo:=0+0+0+vallo;valhi:=inttostrfieldbynamevaluehi.value;iflengthvalhi=3thenvalhi:=0+valhi;iflengthvalhi=2thenvalhi:=0+0+valhi;iflengthvalhi=1thenvalhi:=0+0+0+valhi;str:=pid+fun+sub+vallo+valhi;str2:=str2+str;memo
3.Lines.Addsave+ptid+pid+_+fun+_+sub+_+vallo+_+valhi;incI;next;end;close;SQL.Clear;SQL.AddUpdatesysparametertypesSetparamdata=:p1Whereptid=:p2;parameters.ParamByNamep
1.Value:=str2;parameters.ParamByNamep
2.Value:=ptid;ExecSQL;close;end;result:=ptid;end;procedureTfrmcom.Timer1TimerSender:TObject;vari:integer;pm1pm2pm3pm4sendstrviewstr:string;beginifpg=autothenbeginpm1:=pmdata[pg]+pmdata[pg+1];pm2:=pmdata[pg+2]+pmdata[pg+3];pm3:=pmdata[pg+4]+pmdata[pg+5];pm4:=pmdata[pg+6]+pmdata[pg+7];sendstr:=snd+pm1+pm2+pm3+pm4;frmcomset.SendStringsendstr;viewstr:=发送++inttostrk++sendstr;sleep30;memo
3.Lines.Addviewstr;k:=k+1;pg:=pg+8;ProgressBar
1.Position:=pg;endelsebegintimer
1.Enabled:=false;showmessage下载完成;end;end;procedureTfrmcom.downloadparamdata;varI:integer;str:string;beginwithdm.ADOQuery6dobeginclose;SQL.Clear;SQL.AddSelectparamdataFromsysparametertypesorderbytypeid;Open;First;WhilenotEofdobeginstr:=fieldbynameparamdata.Value;pmdata:=pmdata+str;Next;end;pmdata:=ABCD01010101+inttostr16+lengthpmdata+pmdata;//end;pg:=1;auto:=lengthpmdata;ProgressBar
1.Min:=0;ProgressBar
1.Max:=auto;timer
1.Enabled:=false;timer
1.Interval:=30;timer
1.Enabled:=true;end;End.IO预排代码implementationusesUdmUfrmiodownload;{$R*.dfm}procedureTfrmio.setBtn1status:Boolean;beginButton
6.Enabled:=status;end;procedureTfrmio.setBtn2status:Boolean;beginButton
9.Enabled:=status;end;procedureTfrmio.Button6ClickSender:TObject;varI:integer;str:string;str2ioadiocdioionuioeniosfiosn:string;beginmemo
12.Clear;str:=;str2:=;forI:=1to54dobeginwithdm.ADOQuery_funciobitsdobeginclose;SQL.Clear;SQl.AddSelect*Frompublic_funcioWhereioid=:p1;parameters.ParamByNamep
1.Value:=I;open;iffieldbynameioenable.valuethenioen:=0+1elseioen:=0+0;io:=fieldbynameio.Value;ioad:=fieldbynameioaddress.Value;iocd:=inttostrfieldbynameiocommand.value;ionu:=inttostrfieldbynameionumber.value;iflengthionu=1thenionu:=0+ionu;iosf:=inttostrfieldbynamesbffunction.value;iflengthiosf=1theniosf:=0+iosf;iosn:=inttostrfieldbynamesbfnumber.value;iflengthiosn=1theniosn:=0+iosn;str:=ioad+iocd+ionu+ioen+iosf+iosn;str2:=str2+str;memo
12.Lines.Addioad+_+io+ionu+_+ioen+_+iosf+_+iosn;end;end;str2:=ABCD01010101+inttostr16+lengthstr2+str2;withdm.ADOQuery_funciosetdobeginclose;SQL.Clear;SQL.AddUpdatesyscontrollerSetctlrecsta=:p1wherectlid=1;Parameters.ParamByNamep
1.Value:=str2;ExecSQl;end;setBtn2true;end;procedureTfrmio.Button7ClickSender:TObject;varIndexsbffcheck:Integer;//定义数组下标变量beginmgid:=dm.mgid;nai:=0;nao:=0;ndi:=0;ndo:=0;npi:=0;withdm.ADOQuery_funciobitsdobeginforsbff:=1to11dobeginClose;SQL.Clear;SQL.AddSELECT*FROMpublic_syssubfunctionschnWherefncitd=:p2ANDsbffunction=:p3orderbysbfnumberasc;Parameters.ParamByNamep
2.Value:=1;Parameters.ParamByNamep
3.Value:=sbff;Open;Index:=1;//初始化下标First;WhileNotEofDo//数据集循环begincheck:=FieldByNamecheck.Value;nai:=nai+FieldByNameai.Value*check;nao:=nao+FieldByNameao.Value*check;ndi:=ndi+FieldByNamedi.Value*check;ndo:=ndo+FieldByNamedo.Value*check;npi:=npi+FieldByNamepi.Value*check;Next;end;end;end;memo
2.Text:=inttostrnai;memo
3.Text:=inttostrnao;memo
4.Text:=inttostrndi;memo
5.Text:=inttostrndo;memo
6.Text:=inttostrnpi;end;procedureTfrmio.Button8ClickSender:TObject;beginwithdm.ADOQuery_controliodobeginClose;SQL.Clear;SQL.AddSELECT*FROMsyscontrollerWherectlid=:p1;Parameters.ParamByNamep
1.Value:=strtointComboBox
2.Text;Open;memo
7.Text:=fieldbynamectlai.Value;hai:=strtointmemo
7.Text;memo
8.Text:=fieldbynamectlao.Value;hao:=strtointmemo
8.Text;memo
9.Text:=fieldbynamectldi.Value;hdi:=strtointmemo
9.Text;memo
10.Text:=fieldbynamectldo.Value;hdo:=strtointmemo
10.Text;memo
11.Text:=fieldbynamectlpi.Value;hpi:=strtointmemo
11.Text;end;end;procedureTfrmio.Button9ClickSender:TObject;beginApplication.CreateFormTfrmiodownloadfrmiodownload;frmiodownload.ShowModal;end;procedureTfrmio.FormCloseSender:TObject;varAction:TCloseAction;beginAction:=caFree;end;procedureTfrmio.FormCreateSender:TObject;beginsetBtn1false;setBtn2false;memo
1.text:=;memo
2.text:=;memo
3.text:=;memo
4.text:=;memo
5.text:=;memo
6.text:=;memo
7.text:=;memo
8.text:=;memo
9.text:=;memo
10.text:=;memo
11.text:=;memo
12.text:=;withdm.ADOQuery_funciosetdobeginclose;SQl.Clear;SQL.AddUpdatepublic_funcioSetioenable=nullsbffunction=nullsbfnumber=null;;ExecSQl;end;dm.ADOTable_funcio.Active:=false;dm.ADOTable_funcio.Active:=true;end;functionTfrmio.getfuncbitmgidfnsfn:String:boolean;varfbsqlstr:String;beginsqlstr:=SELECTSUBSTRINGfuncbits+sfn+1ASfbFROMpublic_ctl_mchgrp_definitionsWHEREmgid=+mgid+ANDfuncnumber=+fn+;withdm.ADOQuery5dobeginClose;SQL.Clear;SQL.Addsqlstr;Open;first;whilenotEofdobeginfb:=FieldByNamefb.Value;next;end;end;iffb=1thenResult:=trueelseResult:=false;end;procedureTfrmio.Button10ClickSender:TObject;varIndexsbffsbfnpaipaopdipdoppi:Integer;//定义数组下标变量beginifnpi=hpiandnai=haiandnao=haoandndi=hdiandndo=hdothenbeginwithdm.ADOQuery_funciobitsdobeginClose;SQL.Clear;SQL.AddSELECT*FROMpublic_syssubfunctionschnWherefncitd=:p2andsbffunction12orderbycheckidasc;Parameters.ParamByNamep
2.Value:=1;Open;Index:=1;//初始化下标pai:=1;pao:=1;pdi:=1;pdo:=1;ppi:=1;First;WhileNotEofDo//数据集循环beginsbff:=FieldByNamesbffunction.Value;sbfn:=FieldByNamesbfnumber.Value;ifFieldByNamecheck.Value=1thenbeginifFieldByNamepi.Value=1thenbeginfunciosetPIsbffsbfnppi;incppi;end;ifFieldByNameai.Value=1thenbeginfunciosetAIsbffsbfnpai;incpai;end;ifFieldByNameao.Value=1thenbeginfunciosetAOsbffsbfnpao;incpao;end;ifFieldByNamedi.Value=1thenbeginfunciosetDIsbffsbfnpdi;incpdi;end;ifFieldByNamedo.Value=1thenbeginfunciosetDOsbffsbfnpdo;incpdo;end;end;IncIndex;Next;end;withdm.ADOQuery_funciosetdobeginclose;SQl.Clear;SQL.AddUpdatepublic_funcioSetioenable=falsesbffunction=0sbfnumber=0whereioenableisnull;ExecSQl;end;end;dm.ADOTable_funcio.Active:=False;dm.ADOTable_funcio.Active:=True;setBtn1true;endelsebeginshowmessage控制器IO不足;end;end;procedureTfrmio.funciosetio:String;sbffsbfnp:integer;beginwithdm.ADOQuery_funciosetdobeginclose;SQl.Clear;SQL.AddUpdatepublic_funcioSetioenable=truesbffunction=:p2sbfnumber=:p3whereio=:p1andionumber=:p4;Parameters.ParamByNamep
1.Value:=io;Parameters.ParamByNamep
2.Value:=sbff;Parameters.ParamByNamep
3.Value:=sbfn;Parameters.ParamByNamep
4.Value:=p;ExecSQl;end;end;procedureTfrmio.Button1ClickSender:TObject;beginself.Close;end;end.IO下载代码implementationusesUdmUfrmcomsetUfrmio;{$R*.dfm}procedureTfrmiodownload.setBtnstatus:Boolean;beginButton
2.Enabled:=status;end;procedureTfrmiodownload.Button1ClickSender:TObject;vari:Integer;d:byte;strsstr2:string;beginsetlengtharrayfun8;ifIsHexStredit
1.TextthenbeginStrToIntAsHexCardinaliedit
1.Text;d:=loi;end;arrayfun
[0]:=d;ifIsHexStredit
2.TextthenbeginStrToIntAsHexCardinaliedit
2.Text;d:=loi;end;arrayfun
[1]:=d;ifIsHexStredit
3.TextthenbeginStrToIntAsHexCardinaliedit
3.Text;d:=loi;end;arrayfun
[2]:=d;ifIsHexStredit
4.TextthenbeginStrToIntAsHexCardinaliedit
4.Text;d:=loi;end;arrayfun
[3]:=d;ifIsHexStredit
4.TextthenbeginStrToIntAsHexCardinaliedit
5.Text;d:=loi;end;arrayfun
[4]:=d;beginStrToIntAsHexCardinaliedit
6.Text;d:=loi;end;arrayfun
[5]:=d;edit
7.Text:=inttostrstrtoint$+edit
3.Text+strtoint$+edit
4.Text+strtoint$+edit
5.Text+strtoint$+edit
6.Text;ifIsHexStredit
7.TextthenbeginStrToIntAsHexCardinaliedit
7.Text;arrayfun
[6]:=hii;arrayfun
[7]:=loi;end;str2:=;strs:=;fori:=0to7dobeginIntToStrAsHexstrsarrayfun[i];str2:=str2+strs+;end;edit
8.Text:=str2;end;procedureTfrmiodownload.Button2ClickSender:TObject;Varstr:string;beginstr:=发送++inttostrk+char$0d+char$0a;viewstring:=;//frmcomset.ComPort
1.WritePChararrayfun8;sleep30;fori:=0to7doviewstring:=viewstring+inttohexarrayfun[i]2+;frmcomset.SendStringviewstring;viewstring:=str+viewstring;richedit
1.SelStart;richedit
1.SelAttributes.Color:=clblue;richedit
1.Lines.Addviewstring;k:=k+1;end;procedureTfrmiodownload.Button3ClickSender:TObject;beginRichedit
1.Clear;end;procedureTfrmiodownload.Button4ClickSender:TObject;beginifnotfrmcomset.ComPort
1.ConnectedthenbeginApplication.CreateFormTfrmcomsetfrmcomset;frmcomset.ShowModal;endelsebutton
4.Caption:=串口已打开;setBtntrue;end;procedureTfrmiodownload.Button5ClickSender:TObject;varI:integer;str:string;beginwithdm.ADOQuery_funciosetdobeginclose;SQL.Clear;SQL.AddSelectctlrecstaFromsyscontrollerwherectlid=1;Open;str:=fieldbynamectlrecsta.Value;end;setlengthioconfgdatalengthstr;forI:=1tolengthstrdoioconfgdata[I]:=str[I];pg:=1;auto:=lengthioconfgdata;ProgressBar
1.Min:=0;ProgressBar
1.Max:=auto;timer
1.Enabled:=false;timer
1.Interval:=strtointedit
9.Text;timer
1.Enabled:=true;end;procedureTfrmiodownload.Button6ClickSender:TObject;begintimer
1.Enabled:=false;end;procedureTfrmiodownload.Button7ClickSender:TObject;beginself.Close;end;procedureTfrmiodownload.Button9ClickSender:TObject;beginfrmcomset.ComPort
1.Close;end;procedureTfrmiodownload.FormCloseSender:TObject;varAction:TCloseAction;beginfrmcomset.ComPort
1.Close;end;procedureTfrmiodownload.FormCreateSender:TObject;begintimer
1.Enabled:=false;button
1.Click;setBtnfalse;end;procedureTfrmiodownload.Timer1TimerSender:TObject;beginifpg=autothenbeginedit
4.Text:=ioconfgdata[pg]+ioconfgdata[pg+1];button
1.Click;button
2.Click;pg:=pg+2;ProgressBar
1.Position:=pg;label
11.Caption:=inttostrpg*100divauto+%;endelsebeginbutton
6.Click;showmessage下载完成;end;end;end.串口设置代码implementation{$R*.dfm}procedureTfrmcomset.Button2ClickSender:TObject;beginifComPort
1.ConnectedthenComPort
1.CloseelseComPort
1.Open;end;procedureTfrmcomset.Button5ClickSender:TObject;beginSendStringMemo
2.Text;end;procedureTfrmcomset.ComPort1RxCharSender:TObject;Count:Integer;varStr:String;beginComPort
1.ReadStrStrCount;ifFShowTextthenbeginMemo
1.Text:=Memo
1.Text+Str;end;end;procedureTfrmcomset.FormCloseSender:TObject;varAction:TCloseAction;beginComPort
1.OnAfterClose:=nil;end;procedureTfrmcomset.FormCreateSender:TObject;beginFShowText:=True;end;procedureTfrmcomset.ComPort1AfterCloseSender:TObject;beginButton
2.Caption:=打开串口;end;procedureTfrmcomset.ComPort1AfterOpenSender:TObject;beginButton
2.Caption:=关闭串口;end;procedureTfrmcomset.SendStringconststr:string;varobj:PAsync;beginInitAsyncobj;tryComPort
1.WriteStrAsyncstrobj;ComPort
1.WaitForAsyncobj;finallyDoneAsyncobj;end;end;end.。