一步一步教你做LIS接口教程(四)
来源:互联网 发布:淘宝金伟哥效果怎么样 编辑:程序博客网 时间:2024/04/29 18:52
前面说了那么多的ASTM的协议规范的东西,有人会讲,你说那么多有个毛用,即便是我了解了那些框架,我也不知道怎么转化为代码啊,但是如果你不了解这些框架,那么你连转化为框架的机会都没有。
以前总是纠结写的代码编译出来的东西,应该叫程序还是叫系统?叫系统虽然会有些唬人,但是确实是最准确的表达,现实的生态往往并不是线性逻辑那么简单,而是一个相互连接,相互影响的系统,因此系统架构架构就显得比较重要。但是如果你无法一窥全貌,想搞出一个比较好的架构就非常困难了。
首先来看看ASTME1381-02,即底层的传输框架要怎么做吧。
如果你不了解c#串口通信,不了解ASTME1381-02,请出门左转去看吵吵以前发的文章吧。
那么如果我们构建一个ASTME138102的类,我们需要解决一些什么难点呢?
1.传输状态。传输状态应该有3个,空闲、发送、接收。当空闲状态时候,LIS接口可以接收数据,并转到接收状态,否则将回复[NAK],不接受IPU的传输请求。
2.数据接收。数据接收可以通过serialPort控件中的dataReceived事件来接收数据,将所有的数据都接收后,直到遇到[EOT]信号,然后定义一个新的事件allDataReceived,接收完数据就调用这个事件!至于接收到的数据再该怎么分析,这是表现层的事情了,应该由ASTME139497去解决了。
3.数据发送。数据发送是个最麻烦的地方因为涉及到超时和重复发送的问题。
当LIS接口给IPU发送了[ENQ]信号时候,它如果不回复,那么15秒后,就应该返回超时的错误,这个要怎么做?吵吵考虑了半天,搜索了N多的网页找到了thread.join()这个函数,这个函数有什么用呢,官方解释就是阻塞直到进程或者时间结束。
1
public
bool
BeginTransfer()
2
{
3
4
receiveACK =
false
;
5
this
.SendENQ;
6
Thread thread =
new
Thread(
new
ThreadStart(ReceiveACK));
7
thread.IsBackground =
true
;
// 作为后台线程处理
8
thread.Start();
9
10
// 等待如下的时间
11
thread.Join(_timeout_milliseconds);
12
13
if
(receiveACK ==
true
)
14
{
15
16
thread.Abort();
17
return
true
;
18
}
19
else
20
{
21
thread.Abort();
22
return
false
;
23
}
24
}
25
26
protected
void
ReceiveACK()
27
{
28
bool
bLoop=
true
;
29
while
(bLoop)
30
{
31
//读取serialport.read()直到读取到了ACK:
32
bLoop=
false
;
33
receiveACK=ture;
34
}
35
}
至于如果收到的是NAK,你再重新发一次,直到6次,你才罢休,发送[EOT]结束传输,这个要怎么做,聪明如你,还要我讲么?
4、校验和,校验和要怎么做?将Text的每个字节相加除以256取余数,然后高四位为[chk1],第四位为[chk2]。
怎么取出来高四位和低四位呢,用到两个运算符,右移运算符>>,和逻辑与&,假设这个字节叫byte,那么:
高四位就是: (byte & 0xf0) >> 4;
低四位就是: byte & 0x0f
注:Ox0f就是00001111,而0xf0就是11110000,至于&是个啥,你自己看着办吧。
好了,主要的难点问题,吵吵都帮你解决了,现在你有信心可以分装出一个类来了么?
神马?你没有学过c#,不知道该怎么办?吵吵爱莫能助。
神马?你还想要已经封装好的?入群吧。
- 一步一步教你做LIS接口教程(四)
- 一步一步教你做LIS接口教程(一)
- 一步一步教你做LIS接口教程(二)
- 一步一步教你做LIS接口教程(三)
- 一步一步教你做LIS接口教程(五)
- (连载)一步一步教你做黑白棋游戏(四)
- 一步一步教你做ios推送
- 一步一步教你做ios推送
- 一步一步教你做ios推送
- 一步一步教你做ios推送
- 一步一步教你做ios推送
- 一步一步教你做ios推送
- 一步一步教你做ios推送
- 一步一步教你做ios推送
- 一步一步教你做ios推送
- 一步一步教你做ios推送
- 一步一步教你做ios推送
- 一步一步教你做ios推送
- Java Enum 类 的 values()方法 api没有,实例是怎么调用详解
- 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(三)显示地图坐标系模块
- Java正则表达式初识
- 自动化测试框架思路简单分享--XX驱动
- define const enum
- 一步一步教你做LIS接口教程(四)
- Ubuntu 14.04.1 LTS 安装Hadoop 2.7.0(单节点) 一
- 一步一步教你做LIS接口教程(五)
- ListView setOnItemSelectedListener setOnItemClickListener 区别
- Web Service 到底是什么?
- Android 存储学习之使用SharedPreference保存文件
- 1sting
- java多线程6--线程池
- hdu4135