M1读卡器及串口数据透传外包开发V.docx
《M1读卡器及串口数据透传外包开发V.docx》由会员分享,可在线阅读,更多相关《M1读卡器及串口数据透传外包开发V.docx(14页珍藏版)》请在冰豆网上搜索。
M1读卡器及串口数据透传外包开发V
读卡器功能需求
1:
可控制阀门(继电器)用2个2P的3.96端子完成一路,一路有两条线(继电器双刀?
),总共要控制4路?
2:
可检测油枪开关状态(检查电平?
)用2个2P的3.96端子完成一路4路
3:
可透传其它串口的命令,透传3个串口或更多串口,如嵌入式打印机之类的设备
透传的串口要分两类:
一个接嵌入式打印机,本设备最多只接一个打印机(打印机除了RXD,TXD,GND外还有一条BUSY端口,BUSY端口高电平说明打印机忙,不接收指令,低电平时可接收指令,单片机程序要注意这一点)
打印机串口上电默认通信参数为:
9600,无校验,8位数据位,1起始位,1停止位,要不两个串口都这样默认吧
另一类为加油机主板,至少要能有两个串口或更多串口(相同波特率)是否考虑用CD4051或4067进行分时扩展?
转8个串口还是转16个?
可以做两种不同的么?
CD4051出来直接就是TTL么?
还是转恒山电流环?
4:
LCD显示,汉字可以在程序中事先定义好,显示汉字的位置和其它数字可任意组合
5:
取键盘输入数据(输入回显的地方和(明文、星号)由上位机指定)4X4键盘,键盘需要有功能复用组合
6:
读卡数据(整行16个字节)
7:
写卡数据(整行16个字节)
8:
读卡器1分钟后主串口没有收到电脑发过来的命令,就用蜂鸣器报警,LCD显示通信中断,主串口使用TTL/RS232标准接口,可随时切换
9:
所有的串口发送与接收以及I/O处都要有LED灯,在外壳处可观察到(电源,主串口收发,加油机串口收发,打印机串口收发,4路继电器输出)
油枪开关状态的LED灯只设计在I/O板上,串口收发指示灯采用双色灯
10:
PCB做分体设计:
1:
核心板
2:
I/O板(控制阀门的继电器,检测油枪开关)用灰排线和核心板连接(每两路一块板)用10PIN的排线够么?
对于继电器的吸合来说,需要另外搞个电源么?
3:
加油机串口扩展板(打印机串口直接由主板引出,不在此板上)CD4051、4067在这里?
加油机串口扩展板由扩展主板和接口小板组成?
扩展主板与接口小板使用TTL标准连接,而各种接口小板则根据不同的加油机接口电路设计,串口扩展板也需要通信指示灯,通信指示灯是否另外做小板用排线引出信号?
(参照CS30000结构)
I/O板和扩展板等外部接口都加光耦防止搞坏主板?
4:
RFID板
除LCD外,其它的安装孔均以安装3MM的螺丝为标准
电源接口入加二极管防止电源接反
与加油机的外部接口是否加上磁珠防雷?
主串口(与PC机连接)的通信速率由4位拨码开关设定?
其它的通信参数固定为:
无校验,8位数据位,1位停止位。
通信协议
前导码(1字节)+数据长度(1字节)+命令类型(1字节)+命令实体数据(0-N字节)+校验(1字节)
前导码:
FB
数据长度:
计算的范围包括{命令类型+命令实体数据+校验}
校验:
所有数据,每个字节进行XOR得出的结果
以下写出的示例命令只含命令类型和命令实体数据,没有前导码,数据长度和校验
示例中,
SENDPC》单片机
RECV单片机》PC
01:
读IC卡物理卡号(没有命令实体数据)
命令实体:
无
读卡器返回:
01+卡号(16进制,4字节)
如没有卡片返回:
01
示例:
SEND:
01
RECV:
01AABBCCDD(物理卡号AABBCCDD)
RECV:
01(没有卡)
02:
读IC卡指定扇区的内容(读卡密钥由0D命令事先设定)
命令实体:
绝对数据块(1字节)绝对数据块从0..63
读卡器返回:
02+绝对数据块(1字节)+数据内容(16进制,16字节)
如读数据出错返回:
02+绝对数据块(1字节)
示例:
读第1数据块的数据
SEND:
0201
RECV:
02010102030405090708090A0B0C0D0E0F(读数据成功)
RECV:
0201XX(读数据失败)XX为单片机返回的出错代码:
如密码不对,卡已离开之类的错误代码
03:
写IC卡指定扇区的内容(写卡密钥由0D命令事先设定)
命令实体:
绝对数据块(1字节)+数据内容(16字节)
读卡器返回:
03+绝对数据块(1字节)+AA(写数据成功)
读卡器返回:
03+绝对数据块(1字节)+55(写数据失败)
示例:
向第一数据块写入:
11223344556677889900AABBCCDDEEFF
SEND:
030111223344556677889900AABBCCDDEEFF
RECV:
0301AA(写数据成功)
RECV:
0301XX(写数据失败)XX为单片机返回的出错代码:
如密码不对,卡已离开之类的错误代码
04:
显示命令,在LCD上显示指定的内容
命令实体:
行号(1字节)+显示控制符(不定长)
读卡器返回:
04+行号(1字节)+AA(写数据成功)
读卡器返回:
04+行号(1字节)+55(写数据失败)
行号的取值范围为:
01-04
显示方案可由汉字和ASCII字符混编
液晶屏由于没有字库,需要显示的汉字由单片机程序事先定义好,可以定义的标识范围:
00-1F,7F-FF
如单片机里字符串有以下定义:
01:
余额:
02:
元
03:
储值卡
04:
定额卡
05:
车号
06:
粤
07:
警
08:
正常
09:
请输入密码:
20-7E直接显示对应的ASCII字符
示例:
在第二行显示:
余额:
12345.67元
SEND:
04020131323334352E363702
RECV:
040255(显示成功)
分解(从第三字节开始)
01汉字定义:
余额:
31-35:
ASCII字符:
1-5
2E:
ASCII字符.
3637:
ASCII字符:
67
02:
汉字定义:
元
在第一行显示:
车号:
粤-12345
SEND:
040105062D3132333435
RECV:
040155(显示成功)
在第三行显示:
正常请输入密码:
SEND:
0403082009
RECV:
0403AA(显示失败)
05:
取当前显示的状态
命令实体:
行号
读卡器返回:
最近一次PC发送给单片机并显示成功的数据
示例
如当前LCD第一行显示:
车号:
粤-12345
SEND:
0501
RECV:
050105062D3132333435
06:
检测油枪状态(I/O输入)
命令实体:
通道(1字节)从01到04
读卡器返回:
通道(1字节)+电平
示例:
检查2号通道的油枪状态
SEND:
0602
RECV:
060201(高电平)
RECV:
060200(低电平)
07:
控制阀门(I/O输出)
命令实体:
通道(1字节)+状态(1字节)
读卡器返回:
返回接收到完全一致的消息
示例:
设置3号阀门接通
SEND:
070301
RECV:
070301
示例:
设置2号阀门断开
SEND:
070200
RECV:
070200
08:
查询阀门状态:
命令实体:
通道(1字节)
读卡器返回:
通道(1字节)+阀门状态
示例:
查询3号阀门状态
SEND:
0803
RECV:
080301(接通)
RECV:
080300(断开)
09:
设置透传串口参数
命令实体:
串口号+波特率+奇偶校验位+数据位+停止位需要设置5787这样的波特率
读卡器返回:
串口号+执行状态
串口号:
00加油机扩展用
01小票打印机专用
波特率:
用完整的16进制表示(3字节)9600用十六进制:
002580表示
奇偶校验位:
00NONE
01ODD
02EVEN
03MARK
04SPACE
数据位:
005位
016位
027位
038位
停止位:
001位
011.5位
022位
示例:
设置打印机端口为:
9600bps,无校验位,8位数据,1位停止
SEND:
0901002580000300
RECV:
0901AA设置成功
RECV:
090155设置失败
示例:
设置加油机端口为:
5787bps,无校验位,8位数据,1位停止
SEND:
090200169B000300
RECV:
0902AA设置成功
RECV:
090255设置失败
19:
查询透传串口参数
命令实体:
串口号
读卡器返回:
串口号+波特率+奇偶校验位+数据位+停止位
示例:
小票打印机端口为:
9600bps,无校验位,8位数据,1位停止
SEND:
1901
RECV:
1901002580000300
0A:
设置按键回显,用户有按键时在哪个地方显示用户按的内容
命令实体:
回显行号+回显横向坐标+回显类型
读卡器返回:
返回接收到完全一致的消息
行号:
01-04
横向坐标:
01-80代表1-128点
回显类型:
01明文
02密码(*)
03关闭(不接受键盘的任何输入)
设置显示输入的第二行的第64点阵,明文显示
SEND:
0A024001
RECV:
0A024001(回复和接收到一样的数据)
0B:
取用户的按键内容
命令实体:
无
读卡器返回:
用户当前按键的ASCII码组合,如按了确认就加13
示例:
没有任何按键
SEND:
0B
RECV:
0B
按了1234
SEND:
0B
RECV:
0B31323334
按了123456并按了【确定】
SEND:
0B
RECV:
0B31323334353613
1B:
清控按键内容(单片机在收到命令后,返回当前用户输入缓冲,并清空缓冲和LCD上显示的内容)
命令实体:
无
读卡器返回:
当前用户按键数据
示例:
没有任何按键
SEND:
1B
RECV:
1B
按了1234
SEND:
1B
RECV:
1B31323334
按了123456并按了【确定】
SEND:
1B
RECV:
1B31323334353613
0C:
蜂鸣
命令实体:
0C+蜂鸣次数(1字节)+蜂鸣时长(1字节*100ms)+每次间隔时长(1字节*100ms)+校验
读卡器返回:
回复和接收到一样的数据
示例:
SEND:
0C030203
RECV:
0C030203
单片机收到后,蜂鸣3次,每次持续200ms间隔300ms
0D:
设置IC卡读写密码。
命令实体:
IC卡读写密码(6字节)
读卡器返回:
回复和接收到一样的数据
示例:
读写密码:
F1F2F3F4F5F6
SEND:
0DF1F2F3F4F5F6
RECV:
0DF1F2F3F4F5F6
0E:
清空LCD显示,单行清空
命令实体:
行号
读卡器返回:
回复和接收到一样的数据
0F:
清空LCD显示,全部清空
命令实体:
行号
读卡器返回:
回复和接收到一样的数据
10:
加油机串口扩展锁存(怕D1命令中切换通道的速度不够快,可提前使用此命令进行锁存)
命令实体:
通道号(从01到08,8个通道)
返回:
与收到的命令一样
示例:
锁存第三通道
SEND:
1003
RECV:
1003
11:
向加油机串口发送数据
命令实体:
通道号+等待时长(1字节*10ms)+需要透传的数据
返回:
通道号+加油机返回的数据
示例:
向3号扩展的串口通道的加油机发送:
33445566命令,并等120毫秒将加油机返回的数据转发给PC,
SEND:
030C33445566
等待:
0C(12*10)120ms
RECV:
031A1B1C1D假如加油机返回1A1B1C1D
RECV:
03加油机没有返回任何数据
12:
向打印机串口发送命令,单片机转发时留意打印机的BUSY状态
命令实体:
等待时长(1字节*10ms)+需要透传的数据
返回:
BUSY状态+打印机返回的数据
示例:
SEND:
1205313233343536(向打印机发送313233343536)并等50毫秒返回数据
等待50MS…
RECV:
12000A0B0C(BUSY=FALSE,打印机返回0A0B0C)
RECV:
1201(BUSY=TRUE,打印机无数据返回)
PCB板初步探讨
(注:
素材和资料部分来自网络,供参考。
请预览后才下载,期待你的好评与关注!
)