X
xuegaoyili
Unregistered / Unconfirmed
GUEST, unregistred user!
现有一系统要用pc和单片机进行一对多通讯,双方都可以主动发送指令。指令格式是
我们自定的一种格式。要求双方都能主动进行发送,各方在自己主动发送完指令后等对方
回发一个应答指令,如果在一定时间(200ms)内没有得到应答,主动发送方要能够进行
从发,从发5次后还没应答就停止。每个从机都有自己的固定地址。发送的指令上也有地
址头,长度,指令字,参数。而且双方在接到对方的指令后不紧要回应答,一般指令还
会有对应的指令发回去(例:从机发"从机上电",PC机收到后先发"主机应答",紧接着就
发"时钟通报"。接到从机的"从机应答"后这次会话结束。)
现在的问题:我想用面向对象的方法设计一个类或记录结构去描述从机,也就是在PC机看
来每一个从机都是一个对象。我先想了一个,做为抛砖,有玉的尽管抛。。。。
TWashControler = record
subEnabled: integer;
////控制器是否有效设置,0为有效,1为无效,为1则不进行操作
SubAddress: byte;
////控制器地址,8位;
SubType: string;
////控制器类型:1是洗浴,2是查询,3是售卡
SubState: integer;
////控制器状态,0为未知,1为正常
HasCard: integer;
////控制器当前是否有卡,0为无卡,1为有卡;
CardNum: array[1..5] of byte;
////这里是二进制卡号数组,5字节
CardID: string;
///////////////////这里是字符串形式的卡号
startime: TDateTime;
/////当前卡使用的开始时间;
endtime:TDateTime;//////当前卡结算时间
lastamount: integer;
/////上一次结算的钱数
allamount: integer;
//////一天的总钱数
washer: integer;
////////一天中本控制器的使用人数;
lastsend: integer;
//////用于判断下面的指令要不要发送,1表示发送,0表示已经发过了
lastcommand: TMainCommand;
/////已发送成功但没有得到控制器应答的最后一条指令;
autosendagain: integer;
////用于判断是否进行定时重发,为1表示要检测noanswertime,大于指定(500ms)就自动再发一次,更新noanswertime
noanswertime: longint;
////最后发送的指令的发送毫秒级时间,用于下次检测是否要重发。用下次得到的值-这个值》规定值就重发
sendcount: integer;
////最后发送成功的指令的发送次数当发送10次无应答后,设控制器无效:
upcommand: TMainCommand;
/////从机控制器发给服务器的最新一条指令
end;
我们自定的一种格式。要求双方都能主动进行发送,各方在自己主动发送完指令后等对方
回发一个应答指令,如果在一定时间(200ms)内没有得到应答,主动发送方要能够进行
从发,从发5次后还没应答就停止。每个从机都有自己的固定地址。发送的指令上也有地
址头,长度,指令字,参数。而且双方在接到对方的指令后不紧要回应答,一般指令还
会有对应的指令发回去(例:从机发"从机上电",PC机收到后先发"主机应答",紧接着就
发"时钟通报"。接到从机的"从机应答"后这次会话结束。)
现在的问题:我想用面向对象的方法设计一个类或记录结构去描述从机,也就是在PC机看
来每一个从机都是一个对象。我先想了一个,做为抛砖,有玉的尽管抛。。。。
TWashControler = record
subEnabled: integer;
////控制器是否有效设置,0为有效,1为无效,为1则不进行操作
SubAddress: byte;
////控制器地址,8位;
SubType: string;
////控制器类型:1是洗浴,2是查询,3是售卡
SubState: integer;
////控制器状态,0为未知,1为正常
HasCard: integer;
////控制器当前是否有卡,0为无卡,1为有卡;
CardNum: array[1..5] of byte;
////这里是二进制卡号数组,5字节
CardID: string;
///////////////////这里是字符串形式的卡号
startime: TDateTime;
/////当前卡使用的开始时间;
endtime:TDateTime;//////当前卡结算时间
lastamount: integer;
/////上一次结算的钱数
allamount: integer;
//////一天的总钱数
washer: integer;
////////一天中本控制器的使用人数;
lastsend: integer;
//////用于判断下面的指令要不要发送,1表示发送,0表示已经发过了
lastcommand: TMainCommand;
/////已发送成功但没有得到控制器应答的最后一条指令;
autosendagain: integer;
////用于判断是否进行定时重发,为1表示要检测noanswertime,大于指定(500ms)就自动再发一次,更新noanswertime
noanswertime: longint;
////最后发送的指令的发送毫秒级时间,用于下次检测是否要重发。用下次得到的值-这个值》规定值就重发
sendcount: integer;
////最后发送成功的指令的发送次数当发送10次无应答后,设控制器无效:
upcommand: TMainCommand;
/////从机控制器发给服务器的最新一条指令
end;