APP下载

基于3D打印机传输中断解决方案的设计与实现

2016-03-25刘晋金禹含步亚楠苏臣

微型电脑应用 2016年1期

刘晋,金禹含,步亚楠,苏臣



基于3D打印机传输中断解决方案的设计与实现

刘晋,金禹含,步亚楠,苏臣

摘 要:PC机使用C#语言在VS2008的工具上编写实现“数据处理”软件。下位机选取STM32系列的STM32F103RBT6作为主控系统,采用串口作为硬件传输媒介,下位机软件设计借助uC/OS-III实现多任务并发处理。数据传输过程中传输中断现象设计方法和解决方案,借助此方案很容易快速查询出错位置以及信息。经过理论分析和软硬件结合测试,不但证明了传输系统的可行性和实用性,而且还为降低研发成本、实用性、方便性构建数据传输系统提供了问题解决思路及参考价值。关键词:C#;STM32;uC/OS-II;中断传输

0 引言

3D打印机为保证打印出3D实体,宿主机应用软件中导入由CAD[1](Computer Aided Design)生成的实物数据,通过PC机所携有的器件与下位机传输数据,但有时会突发传输中断现象,即文件数据传输到中间位置时中断传输。一旦发生此类问题,很难判断是上位机还是下位机导致的中断现象,如何能快速的发现出错位置和信息值得深入研究和探讨。

1 系统设计理念

本文3D打印系统[2]采用采用的是快速成型技术(Rapid Prototyping,RP)[3]之一的熔融沉积成型原理,通过分层加工和叠加成形相结合的方法,逐层打印材料来生成3D实体。官网提供的Cure软件打开如图1所示:

图1 3D实物图原形

后生成右图的chinese__laser.gcode文件如图2所示:

图2 3D实物图数据

左图上的29 minutes说明打印此3D实物需要29分钟,而下面的0.26 meter 2gram说明此实物的耗材需0.26米2克。右图为3D实物图的数据量,即515KB,从这点看3D打印系统传输速度不需过快。不少专家指出我国3D打印机落后原因[4]是成本过高、研发技术落后等,出于落后原因、实用性、方便性、以及对打印速度的要求为出发点与考虑,采用UART作为硬件传输媒介,即PC机利用C#语言编写基于上位机的软件,把3D图像通过计算机辅助软件生成“.gcode”文件进行读、修改后通过串口发送给下位机(STM32)。

此实物图数据量为515KB,若采用串口通信机制的波特率为115200时,不过一分钟就能把数据传送完。根据官网提供的打印信息以及底层机械处理因素知,应采取校验码来控制传输状态。下位机采用的是STM32系列的STM32F103RBT6作为主控制器,借助嵌入式实时操作系统最新版uC/OS-III,把接收到的数据通过消息、信号量等信息发送给特定任务进行后续处理。PC机与下位机发送大量的数据时,偶尔会遇到传输中断现象,即PC机不再发送数据且下位机不再接收数据。刚开始传输出现此现象根据逻辑分析、程序运行过程是很容易查询出错位置,但过程中中断,即数据传输中间时中断,是很难判断是PC机应用软件问题还是下位机STM32原因造成的。

针对此类问题,本系统在实验过程中自定义调试方法,来快速查找出错位置、纠正错误信息及时改正。通过多次试验和对比验证,证明大量数据传输过程中在无法判断是上层PC机软件还是下位机主控程序出错导致传输中断时,可参考此调试方法进行查找,为用户快速查询问题提供参考价值。

2 基于系统的硬件设计

因本系统以降低研发成本、实用性、方便性为出发点与考虑,研发出一套基于低价格的打印系统,以便适用更多的用户群体,所以下位机的选择以低成本、实用性为考虑选取STM32为硬件开发平台。该研发版采用ST公司32为ARM[5]处理器STM32F103RBT6:该芯片最大时钟频率是72MHZ;采用LQFP64封装;内置大容量存储器包括128 KB 的高速Flash和20 K 的SRAM;丰富的外设接口;工作电压2.0--3.6V、64 个I/O 接口、2 个USART、2 个I2C、2 个SPI、RTC 等。本系选取STM32主控的UART1作为硬件传输媒介,PA9为数据接收引脚、PA10为数据发送引脚。因uC/OS[6]任务运行起来的调度主要是通过周期时钟中断来实现的,每个时钟节拍到来都会产生一次定时中断,中断后启动调度器运行,运行就绪表中优先级最高的任务。选取STM32主控的滴答定时器来产生周期中断,并设置OS_CFG_TICK_RATE_HZ 宏定义为1000u,即1ms产生一次中断。中断产生后进入中断服务程序SysTick_Handler(),退出时调度器进行调度。

3 基于系统的软件设计

3.1文件传输格式

文件并不能完全适用于下位机的处理,它不但有多余的注释信息,而且还有大量的冗余空格和回车换行等。为减轻下位机负担,提高系统整体工作效率,此时设计数据传输格式如图3所示:

图3 数据传输格式生成的“.gcode”

即以G、M、X字符标记一行数据命令的开始,中间以空格的形式隔开。PC机下发的每一行数据通过下位机STM32解析后,发出控制命令控制电机在X、Y、Z轴方向移动以及挤压耗材。

研究设计传输模式为:上位机应用软件首先发送“传输头”0x01,下位机接收到0x01,说明上位机准备传输数据。下位机从“程序初始化时建立的缓冲池”中申请存储块,申请成功回发0x06,未成功则发数据0x15。上位机接收到0x06后,则传送一行字符,传送完一行数据后下发数据0x00,下位机接收到0x00后说明一行数据传送完成,下位机发消息到任务的内建消息队列中为后续解析以及向电机发控制命令等做准备。消息向内建消息队列发送成功,向上位机回发0x04,当上位机接收到0x04说明一行数据发送成功。若上位机未完成所有数据的传输,则上位机继续发送“数据头”0x01,为下次传输做准备。但是若上位机发送0x01,接收到的回响数据是0x15时,说明下位机从缓冲池中申请内存块没成功,则上位机等待400ms左右,继续发送0x01,直到接收到下位机的回响数据0x06后,才能继续传输。PC机在向下位机STM32传输数据之前删除无用的gcode文件数据,不但使传输的文件数据看起来简单易懂,而且减轻了下位机STM32的负担,更满足此3D传输系统的简洁、方便的特性。

3.2 下位机软件程序流程

下位机数据流程设计如图4所示:

图4 下位机数据流程设计图

根据图4知,下位机有数据到来时直接促发中断产生,为降低中断服务时间,接收数据后直接发送消息到“Uart Process”任务的内建消息队列中。uC/OS-III中每一个任务都有其内建的消息队列,用户可以不用通过外部的消息队列而直接向任务发布消息。uC/OS-III对此的设计不但简化了代码,而且比使用外部消息队列更加有效。“Uart Process”首先Pend消息,查询到接收数据是0x01后,从设定的缓冲池中OSMemGet()申请存储块,成功后存储接收到的数据。存储完一行数据后把存储块的首地址当作消息Post到“Data Process”任务的内建消息队列中,“Data Process”任务首先Pend消息,然后把接收到一行的数据进行解析,给电机发控制信号,对电机方向、运动、挤压耗材等进行控制,处理完后,把申请的存储通过OSMenput()函数归还到空存储块的链表上,以备后续使用。当下位机接收传输头0x01后,若存储块中没有空闲的存储块时,则上位机会继续发送0x01,直到申请存储块成功后才可继续接收数据。为使接收数据任务与数据处理任务并发的进行,初始化时设定缓冲池,考虑到每行数据约30几个字符不等,所以设定16个存储块并且每个存储块设定为40个字节,接收到“传输头”后申请存储,数据处理完后释放。不但使用方便,而且避免了在嵌入式系统中使用malloc()函数和free()函数造成存储空间碎片等问题。

3.3 调试信息模块设置

通过以上对系统上位机与下位机的设计与实现,整个系统开始运作时偶尔会出现传输中断现象。如系统工作中对“图1”传输实验,此文件每行有30左右字节数据,共17000多行。有时可成功传输,但偶尔会突发中断传输现象,此中断还不是出现在开始,而是出现在中间,即有可能出现完成5000或10000多行等传输后突然中断传输。上位机不再下发数据,下位机也不在处理数据,这时是很难发现是上位机应用软件还是下位机STM32造成了中断。调试过程中捕捉错误现象是关键,并使这种偶然的bug能频繁的出现为后续解决做准备。通过资料查询以及借鉴学者的经验下,基于此不稳定状态的设置思路为图5示:

图5 收发数据校验流程图

在上位机应用软件的编写过程中设置两个8字节大小的缓冲区,收发数据显示在如图设置的PC机端的缓冲区内。显示8个字节数据后,当有新接收或发送的数据到来时,8字节数据往后移动,先前第二位置时现变成第一位、先前第三位置时现变成第二位,如此一来,先前第一位的数据舍弃,先前第八位置数据空缺,则新接收和发送的数据填补到第8个字节的位置上,以此形式重复的刷新。void buf_proc(char rch, char tch)//缓冲区处理

{

int i;

for (i = 0; i < 7; i++)

{

buf_rx[i] = buf_rx[i + 1];//接收区数据后移

buf_tx[i] = buf_tx[i + 1];//发送区数据后移

}

buf_tx[7] = tch;

buf_rx[7] = rch;

}以上程序为调试模块中缓冲区的数据刷新。为方便观察,若此时是接收数据,则对应的发送数据处补“00”,若此时是发送数据,则对应的接收数据处补“00”。以此通过最后收发数据的对比来查询出错位置及信息。

4 系统的测试

上位机应用软件在PC机使用C#语言借助VS2008工具下实现的应用软件,此截图是传送完一行数据后中断的截图,如图6所示:

图6 系统传输中断截图

为方便观察,标记了需要观察的位置,连续的两个“30”是右上方正在发送文本框中的“0”的十六进制显示。在发完第一行后,上位机发送数据“00”,即一行的结束标志,但下位机回发数据是06(内存申请成功),上位机在发送01“传输头”后,下位机没回。对比来看,上位机发送一行结束标志“00”时,下位机应回发04但是下位机回发的是06。上位机没有接收到字符“04”,所以显示发送的行数仍然是“0行”。综合来看,此次中断的产生是下位机系统的回响数据有问题,即下位机系统造成了此次中断的产生,更深一步说下位机程序在接收到“00”后的数据处理有问题。

传输过程中突然中断的截图,如图7所示:

图7 系统传输中断截图

因此系统是按最初的设计进行编写,并没有按系统中规定的字符显示形式进行编写,为分析容易,只是显示传输过程中部分校验数据。即“1”,“4”,“6”,“15”这些数据,且数据是单字符显示。为方便观察,特意用软件将要观察的地方标记出来。此截图是正在发送完859行数据后突然传输中断。分析接收和发送区的数据知,上位机在发送数据“1”(传输头)后,下位机申请内存成功返回数据“6”,最后接收到“4”,,此行发送正确,但当上位机发送准备传输数据“1”后,下位机回发“6”,内存申请成功,后产生中断。分析知,偶尔出现传输中断原因是上位机产生的,即上位机接收到下位机内存申请成功的标志,也就是下位机已准备好接受数据,但是上位机不再操作。通过分析知,上位机在接收到“6”后没有按程序设定的状态运行,所以偶尔会在此处中断传输,进一步解释,上位机在从串口接收区读取数据的延时时间以及在对接收数据“6”的判断可能有问题,可从此处所提到的程序处查找问题。

5 总结

本文的3D打印系统以降低打印成本、简单、方便、实用性、面向更多的用户群体为出发点与考虑。PC 机借助C#编程语言设计实现上位机应用软件,下位机采取STM32作为主控制平台,借助uC/OS-III实现多任务的并发处理,采用串口作为数据硬件传输媒介。通过实践和理论研究证明此方案的可行性,并对大量数据传输过程中偶尔中断现象设计了解决方案。实验证明通过此方案很容易查询出错原因是在上位机还是下位机,为构建数据传输系统提供了解决问题思路及参考价值。由于本文的3D打印系统正处于研发阶段,一定还有不少缺陷和不足,需以后加以弥补和改正。也希望将来此传输系统能为我国3D打印机的发展提供思路以及参考价值。

参考文献

[1] 王月圆,杨萍.3D打印技术及其发展趋势[J].印刷杂志2013,04:10-12.

[2] 古丽萍.蓄势待发的3D打印机及其发展[J].技术前沿.2014:64-67.

[3] 余冬梅,方奥,张建斌. 3D打印:技术和应用[J].知识园地.2013,06:6-11.

[4] 王雪莹. 3D 打印技术与产业的发展及前景分析[J].中国高新技术企业.2012,26:3-5.

[5] 宋亮,苗琼.嵌入式实时操作系统μC/OS-II 串口通信的设计与实现 [J].电子设计工程.2011,1:3-5 .

[6] 逯玉兰,燕振刚,李广.uC /OS-III内核在STM32F103VET6芯片上的移植研究[J].计算机与现代化.2014,09:132-136.

Transmission Interruption of Solution Design and Implementation Based on 3D Printer

Liu Jin, Jin Yuhan,Bu Yanan,Su Chen
(College of Computer and Information Technology, Liaoning Normal University, Dalian 116081, China)

Abstract:PC uses C# language to write software for data processing on VS2008. The lower computer selects STM32F103RBT6 from the STM32 series as the main control system, and uss the serial port as the hardware transmission medium. The design of lower computer software uses uC/OS-III to realize the multi-task concurrent processing. It also designs the method and solution scheme for the phenomenon of transmission interruption in the process of data transmission, and the error position and information can be checked out easily and fast by using it. Through theoretical analysis and a testing combining hardware and software, it not only proves the feasibility and practicability of the transmission system, but also provides solution and reference value for cost reducing, practicality, convenience construction of data transmission system.

Key words:C#; STM32; uC/OS-III; Interrupt Transmission

收稿日期:(2015.07.07)

作者简介:刘 晋(1964-),男,辽宁师范大学,计算机与信息技术学院,教授,研究方向:数字印刷技术与嵌入式系统设计,大连,116081金禹含(1987-),女,辽宁师范大学,计算机与信息技术学院,硕士研究生,研究方向:喷绘机系统设计,大连,116081步亚楠(1989-),男,辽宁师范大学,计算机与信息技术学院,硕士研究生,研究方向:数字印刷技术,大连,116081 苏 臣(1990-),男,辽宁师范大学,计算机与信息技术学院,硕士研究生,研究方向:嵌入式系统,大连,116081

文章编号:1007-757X(2016)01-0060-03

中图分类号:TP393

文献标志码:A