create account

便携式打印数据中心的软件设计(一):数据采集之串口通讯软件设计说明 by patriciaphilip

View this thread on steemit.com
· @patriciaphilip ·
$20.40
便携式打印数据中心的软件设计(一):数据采集之串口通讯软件设计说明
之前由于客户需求,专门设计了针对便携式仪表使用的数据打印机,受这个启发,我认为我们自己的产品,比如一些数据记录仪(Datalogger),也可以使用打印机打印出统计数据,以便用户现场就能够看到阶段性统计结果,而无需使用 PC下载。
![image.png](https://ipfs.busy.org/ipfs/QmTYoRgKici8u84iF3uwnD5voDBXEaJ6sfvwhP2kXXScRF)

本文先讨论该系统的数据采集工作,也就是打印中心从配套的数据记录仪通过RS232接口下载数据的过程。

RS232 module主要包括rs232.c(串行通讯与数据处理),realtime.c, iic.c(EEPROM读写),基本定时器的设置四个子程序。

程序的主体是rs232.c,其余是芯片的底层驱动。下面重点说明rs232.c:流程图中所用到的变量介绍请参见附件的的变量说明表。

## 一.串行通讯:
Datalogger printer(以下简称printer)上电后,即进行Datalogger 的在线检测,每隔3S左右发送一次I,如接收正常,则发送M,读取一些Datalogger的基本信息。然后根据key_lcd.c产生的各个控制字进行相应的操做。

因为使用的CPU为MSP430F135,它自带串口通讯模块,因此CPU的串口工作时主要由USART模块控制,但也要做一定的判断。在发送数据之前,先判断引脚电平15mS左右,如无变化(为高电平),再发送数据,否则CPU工作会不正常。若为低电平,则offline。

MSP430F135的datasheet上给的9600 bps的控制字误差偏大,现自己计算,过程及对照表如下:
![image.png](https://ipfs.busy.org/ipfs/QmdA9SprtyhKDfgky7WPaT6DKEdPAE4znSAY2uR6G4Fgu3)
表一 MSP430 Baud Rate计算

### 1》数据发送中断的处理:
因为Datalogger的信息接收脚RX和信息发送脚TX连接在一起,采用的是半双工的串口通讯方式,Printer也是如此。所以当Printer发送数据时,接收脚要置为高阻态,即输入状态,以免影响数据电平;同理,在Printer接收数据时,发送脚也要作相同处理。

由此产生一个问题,即当发送完毕之后,需要过多久再把发送脚置为高阻,接收脚置为模块输入。如果切换早了,则信息还没有发送完毕,若切换晚了,则会漏接收。

又因为程序分为三个模块,最好不要在某一个程序模块停留太久。所以采用中断发射数据,无需再多加判断。现在在正常数据发送完成后,再加发一个线路空闲字节(线路上为高电平),之后立即切换引脚,则被切换引脚所破坏的讯号为附加的这个线路空闲字节,正常信息没被破坏,而且也不影响接收数据。流程如下:
![image.png](https://ipfs.busy.org/ipfs/QmQZQhmhmdCzLS66zHY9P3p5WAW4Eg5dbRyV6qnJchD46X)
图一  发射中断流程

### 2》数据接收中断的处理:
Datalogger数据格式以回车为一帧数据的结束。串口中断接收程序是较为底层的一块,为简化上层记录数据处理的步骤,现将接收到的记录数据数组直接在中断程序中转为INT型的数据。

目前有3种Datalogger,8828发送记录数据每两帧之间空闲时间为4mS左右,8829为7mS左右,8818为6mS左右,而中断程序中数据转换最长时间不超过1.3mS,因此不会影响接收数据。

其程序流程图如下:
![image.png](https://ipfs.busy.org/ipfs/QmbrZQGiZQKAYL9QPoLmEF6oHBeyr6Ae6B5bEjqgwNHgP6)
图二  接收中断流程

在Download数据时,Datalogger会回应一次关于M的信息,是Download时最新的记录数据个数的状况,同样为简化上层程序的入口判断,现在中断中更新Total。

***

## 二. RS232 module的主体结构:
其具体流程如下:
![image.png](https://ipfs.busy.org/ipfs/QmZK1tNjzY6t67rm7bE6PjSEvixVQpms2gzdZbfoke1eqd)
图三  RS232主体流程

发送控制信息的主要工作就是数据格式转换,详情请参见程序。下面是部分程序截图:
![image.png](https://ipfs.busy.org/ipfs/Qmc74GAVmhzzdrwSxLuC11GQjzKPGcLbHLCLe7mkTURsWi)

当进行报警值设定时,8828,8829,88128都是发送(温度值×10),而8818则是发送对应的电阻值,详情请参阅CommandsOfDataLogger.doc。为减小ROM空间,将8818所用到的电阻表格的一部分放到信息FLASH中(256字节)。这个表格若放入EEPROM中,则数据处理速度太慢。
![image.png](https://ipfs.busy.org/ipfs/QmRe37jucegm7wKK4YfuhLerjwzXHz9m5U8KNrRiNYU4jZ)
图四  接受判断处理

注:其中小模块的流程参见附录。

***

## 附录:

![image.png](https://ipfs.busy.org/ipfs/QmVTRn2NPK2QQ4PUMXH6gQ1jsRSEtZf8poZkZ2XoZBQ4uT)
表二 变量说明


**Datalogger 记录信息接收:**
![image.png](https://ipfs.busy.org/ipfs/QmZfGofZmEa4aEiEVBCoyGf3AtZFV658WNfadAidvGDcyN)


**Datalogger 记录数据接收:**
![image.png](https://ipfs.busy.org/ipfs/QmYENY2iCZ693gju619MWXfGUVq3fcNSMFtZc52GNns8LN)

***

之前因为详细讲述过打印功能原理,这里就不展开了,附上简要说明:

**打印头驱动信号:**
HOME信号,TG信号,MOTOR控制信号,打印头控制信号。

- HOME信号检测:
HOME信号经过HC14整形反相后,输入到单片机,打印头到位HOME时为L,离位时为H。HOME到位检测过程为:HOME信号发生H→L时,启动1.5ms定时器,每1.5ms对HOME采样一次,如果连续3次HOME都为L,则打印头到位。HOME离位检测过程为:在HOME到位状态下,HOME发生L→H,则打印头离位。

- TG信号检测:
TG信号经过HC14整形反相后,输入到单片机,每次TG发生H→L就会触发一次中断。在连续打印时,为了保证上下行对齐,采用TG计数的方法来定位打印头位置,而不采用HOME信号(MTP201-166G每行TG为276)。


- Printer Driver接口
指定打印缓冲区
#define PRINTBUF_MAX    30

打印状态字uchar PrintStatus
正在打印时,PrintStatus =PRINT_BUSY
打印完成时,PrintStatus =PRINT_DONE
准备打印下一行时,PrintStatus =PRINT_NEXT_RDY

打印命令字uchar PrintCommand
启动打印, PrintCommand =PRINT_START
取消当前打印行,PrintCommand=PRINT_CANCEL

打印模式设定uchar PrintModeSet
文本 ,PrintModeSet =PRINT_TEXT
曲线,PrintModeSet =PRINT_LINE
图形,PrintModeSet =PRINT_GRAPHIC

打印数据类型char PrintDataType
温度,PrintDataType=PRINT_DATA_T
温度和湿度,PrintDataType =PRINT_DATA_T_RH

打印意外标志uchar PrintException
当PrintException=1时,取消当前所有打印,并且打印头复位。

打印加热延时uint PrintDelay
用来调节打印的浓度。

void PrintDrvInit(void);
打印驱动模块初始化函数。
uchar PrintPutChar(const uchar* pbuf,uchar len);
把长度为len的字符串pbuf放入打印缓冲区。

uchar PrintPutAChar(uchar buf);
把字符buf放入打印缓冲区。

void PrintBufFlush(void);
清空打印缓冲区。

void PrintDrvRoutine(void);
打印驱动例程,每次设定命令后,至少要执行一次此函数,命令才会有效。

void PrintPutTextStr(uchar* pText);
把字符串pText放入打印缓冲区。

void PaperJamDeal(void);
卡纸处理。


- Print Out 接口
void PrintGraphic(void);
打印曲线图例程。

void PrintInit(void);
打印初始化函数。

void PrintRoutine(void);
打印命令处理例程。

void PrintSummary(void);
打印Datalogger预览例程。

void PrintTextTable(void);
打印文本列表例程。

void prn_interface(void);
打印接口数据处理函数。

***
以上就是数据接收部分的详细论述,以及 简单的打印模块软件说明,下次将主要讲述按键/显示模块的处理。

***
以上内容均由 @patriciaphilip原创,如无授权,请勿引用,谢谢!
 <br /><center><hr/><em>Posted from my blog with <a href='https://wordpress.org/plugins/steempress/'>SteemPress</a> : http://cnstm.org/blog/2019/05/18/%e4%be%bf%e6%90%ba%e5%bc%8f%e6%89%93%e5%8d%b0%e6%95%b0%e6%8d%ae%e4%b8%ad%e5%bf%83%e7%9a%84%e8%bd%af%e4%bb%b6%e8%ae%be%e8%ae%a1%ef%bc%88%e4%b8%80%ef%bc%89%ef%bc%9a%e6%95%b0%e6%8d%ae%e9%87%87%e9%9b%86/ </em><hr/></center>   
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , and 671 others
properties (23)
post_id74,950,141
authorpatriciaphilip
permlinko4g5ptiuab
categorysteempress
json_metadata{"community":"steempress","app":"steempress\/1.4","tags":["steempress","cn-stem","engineering","technology"],"original_link":"http:\/\/cnstm.org\/blog\/2019\/05\/18\/%e4%be%bf%e6%90%ba%e5%bc%8f%e6%89%93%e5%8d%b0%e6%95%b0%e6%8d%ae%e4%b8%ad%e5%bf%83%e7%9a%84%e8%bd%af%e4%bb%b6%e8%ae%be%e8%ae%a1%ef%bc%88%e4%b8%80%ef%bc%89%ef%bc%9a%e6%95%b0%e6%8d%ae%e9%87%87%e9%9b%86\/"}
created2019-05-18 12:19:27
last_update2019-05-18 12:19:27
depth0
children3
net_rshares40,726,769,572,609
last_payout2019-05-25 12:19:27
cashout_time1969-12-31 23:59:59
total_payout_value14.830 SBD
curator_payout_value5.570 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length4,749
author_reputation5,288,510,041,882
root_title便携式打印数据中心的软件设计(一):数据采集之串口通讯软件设计说明
beneficiaries
0.
accountsteempress
weight1,500
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
author_curate_reward""
vote details (735)
@steemstem ·
re-patriciaphilip-o4g5ptiuab-20190518t184512092z
<div class='text-justify'> <div class='pull-left'> <center> <br /> <img width='200' src='https://res.cloudinary.com/drrz8xekm/image/upload/v1553698283/weenlqbrqvvczjy6dayw.jpg'> </center>  <br/> <br /> </div>

This post has been voted on by the **SteemSTEM** curation team and voting trail. It is elligible for support from <b><a href='https://www.steemstem.io/#!/@curie'>@curie</a></b> and <b><a href='https://www.steemstem.io/#!/@utopian-io'>@utopian-io</a></b>.<br /> 

If you appreciate the work we are doing, then consider supporting our witness [**stem.witness**](https://steemconnect.com/sign/account_witness_vote?approve=1&witness=stem.witness). Additional witness support to the [**curie witness**](https://steemconnect.com/sign/account_witness_vote?approve=1&witness=curie) and [**utopian-io witness**](https://steemconnect.com/sign/account_witness_vote?approve=1&witness=utopian-io) would be appreciated as well.<br /> 

For additional information please join us on the [**SteemSTEM discord**]( https://discord.gg/BPARaqn) and to get to know the rest of the community!<br />

Please consider setting <b><a href='https://www.steemstem.io/#!/@steemstem'>@steemstem</a></b> as a beneficiary to your post to get a stronger support.<br />

Please consider using the <b><a href='https://www.steemstem.io'>steemstem.io</a></b> app to get a stronger support.</div>
properties (22)
post_id74,963,931
authorsteemstem
permlinkre-patriciaphilip-o4g5ptiuab-20190518t184512092z
categorysteempress
json_metadata{"app":"bloguable-bot"}
created2019-05-18 18:45:15
last_update2019-05-18 18:45:15
depth1
children0
net_rshares0
last_payout2019-05-25 18:45:15
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length1,367
author_reputation179,657,124,557,517
root_title便携式打印数据中心的软件设计(一):数据采集之串口通讯软件设计说明
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
@steemitboard ·
Congratulations @patriciaphilip! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

<table><tr><td><img src="https://steemitimages.com/60x70/http://steemitboard.com/@patriciaphilip/voted.png?201905182005"></td><td>You received more than 3000 upvotes. Your next target is to reach 4000 upvotes.</td></tr>
</table>

<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@patriciaphilip) and compare to others on the [Steem Ranking](http://steemitboard.com/ranking/index.php?name=patriciaphilip)_</sub>
<sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub>



**Do not miss the last post from @steemitboard:**
<table><tr><td><a href="https://steemit.com/japanese/@steemitboard/new-japanese-speaking-community-steem-meetup-badge"><img src="https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmRWbAjbeETEaqSPLcpwYX1JN5pZhdPffv4q6DaBs6xvZm/image.png"></a></td><td><a href="https://steemit.com/japanese/@steemitboard/new-japanese-speaking-community-steem-meetup-badge">New  japanese speaking community Steem Meetup badge</a></td></tr></table>

###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!
properties (22)
post_id74,968,046
authorsteemitboard
permlinksteemitboard-notify-patriciaphilip-20190518t210723000z
categorysteempress
json_metadata{"image":["https:\/\/steemitboard.com\/img\/notify.png"]}
created2019-05-18 21:07:24
last_update2019-05-18 21:07:24
depth1
children0
net_rshares0
last_payout2019-05-25 21:07:24
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length1,361
author_reputation31,622,776,601,683
root_title便携式打印数据中心的软件设计(一):数据采集之串口通讯软件设计说明
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
@utopian-io ·
#### Hi @patriciaphilip!

Your post was upvoted by Utopian.io in cooperation with @steemstem - supporting knowledge, innovation and technological advancement on the Steem Blockchain.

#### Contribute to Open Source with utopian.io
Learn how to contribute on <a href='https://join.utopian.io'>our website</a> and join the new open source economy.

**Want to chat? Join the Utopian Community on Discord https://discord.gg/h52nFrV**
properties (22)
post_id74,996,016
authorutopian-io
permlinkre-o4g5ptiuab-20190519t130552z
categorysteempress
json_metadata{"app":"beem\/0.20.17"}
created2019-05-19 13:05:54
last_update2019-05-19 13:05:54
depth1
children0
net_rshares0
last_payout2019-05-26 13:05:54
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length429
author_reputation151,356,124,843,620
root_title便携式打印数据中心的软件设计(一):数据采集之串口通讯软件设计说明
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000