5,388
社区成员
发帖
与我相关
我的任务
分享
unit UnitWeighDevCn;
interface
uses
Classes,CnClasses, CnRS232,ExtCtrls,Types,SysUtils,FmtBcd , Dialogs,StrUtils,UnitCRC16B;
type
TDevStatus = record
Weight : Integer; //重量
Steady : Boolean; //重量是否稳定
Connected : Boolean; //是否连接(有串口数据)
end;
TGetWeight = procedure(Sender :TObject ; Weight : Integer;RealDigit :integer ) of object;
TGetRawData = procedure(Sender :TObject ;RawData: Pointer;Length : integer) of object;
TWeighDevCn = class(TCnRS232)
private
FSteady : Boolean; //重量是否稳定
FConnected : Boolean;
RawDataGot : Integer;
CommBuffer : array[1..300] of Byte;
SendBuf : array[1..50] of Byte;
TimerCommCheck : TTimer; //通信检测的定时器,看看串口数据是否正常。
TimerSteadyCheck : TTimer; //重量稳定判断定时器。
TimerD2008Send :TTimer; //2014-10-23 李杨 D2008指令模式读命令
FCheckInterval : Byte; //检测仪表通讯时间间隔,单位:秒
FWeighTime : TDateTime; //称重时间
FWeight : Integer; //重量
FDeviation : integer; //重量稳定允许误差。
FMaxWeight : integer;
FMinWeight :integer;
FDevType : string; //仪表类型。
FGetWeight : TGetWeight;
FGetRawData : TGetRawData;
FNotConnect : TNotifyEvent;
FWeightAndDec:string; //2014-10-23 含有小数点的重量如D2008指令类型重量
FDevAddr : Byte;
procedure D2PlusSetZero(Addr :Char);
procedure D2008FSetZero();
procedure D2PlusReadWt(Addr :Char);
procedure D2008FReadWt();
procedure OnCommCheckTimer(Sender: TObject);
procedure OnSteadyCheckTimer(Sender : TObject);
procedure SendD2008GetValueOrder(Sender : TObject); //2014-10-23 李杨 用于发送获取2008数据命令
procedure SetCurrWt ( CurrWt : Integer);
procedure SetGetWeight(GetWeightFunc : TGetWeight);
procedure SetGetRawData(GetRawDataFunc : TGetRawData);
procedure SetNotConnect(NotCon : TNotifyEvent);
procedure SetCheckInterval(intval : Byte);
procedure ProcessGotWeight(currWeight,Precision :integer);
function Handle3190(CommBuffer:Pointer;Length:integer):Boolean;
function HandleDI_880(CommBuffer:Pointer;Length:integer):Boolean ;
function HandleDS822_D(CommBuffer:Pointer;Length:integer):Boolean ;
function HandleXK3190D2(CommBuffer:Pointer;Length:integer):Boolean ;
function HandleXK3190D2InstructMode(CommBuffer:Pointer;Length:integer):Boolean ;
function HandleD2008F(CommBuffer:Pointer;Length:integer):Boolean ;
function HandleD2002(CommBuffer:Pointer;Length:integer):Boolean ;
function HandleD2002E(CommBuffer:Pointer;Length:integer):Boolean ;
function HandleD2002E_2(CommBuffer:Pointer;Length:integer):Boolean ; //新疆和静碰到怪的协议
function HandleWS822_A(CommBuffer:Pointer;Length:integer):Boolean ;
function HandleT800(CommBuffer:Pointer;Length:integer):Boolean ;
function HandleHT9800_B(CommBuffer:Pointer;Length:integer):Boolean;
function Handle8142ProPlus(CommBuffer:Pointer;Length:integer):Boolean ;
//2008年5月4日 新增类型。
function HandleXK3102(CommBuffer:Pointer;Length:integer):Boolean;
function HandleXK315A2(CommBuffer:Pointer;Length:integer):Boolean;
//2014-10-23 李杨 D2008指令模式
function HandleD2008CommandType(CommBuffer:Pointer;Length:integer):Boolean;
procedure ReceiveCommData(Sender :TObject; Buffer : Pointer; BufferLength :Word);
function SendWeight3190(Weight,Precision : Integer):Boolean;
function SendWeightD2Plus(Weight,Precision: integer): Boolean;
function SendWeight3102(Weight,Precision : Integer):Boolean;
function SendWeightDI_880(Weight,Precision : Integer):Boolean ;
function SendWeightDS822_D(Weight,Precision : Integer):Boolean ;
function SendWeightXK3190D2(Weight,Precision : Integer):Boolean ;
function SendWeightD2002(Weight,Precision : Integer):Boolean ;
function SendWeightWS822_A(Weight,Precision : Integer):Boolean ;
function SendWeightT800(Weight,Precision : Integer):Boolean ;
function SendWeightHT9800_B(Weight,Precision : Integer):Boolean;
function SendWeight8142ProPlus(Weight,Precision : Integer):Boolean ;
protected
public
constructor Create(AnOwner: TComponent); override;
destructor Destroy; override;
procedure PickWeight(var Weight : Integer; var WeighTime :TDateTime);
procedure SendWeight( Weight,Precision : Integer); //组件作为仪器模拟用的功能。
function GetDevStatus : TDevStatus;
procedure ReadWeight(Addr :Char);
procedure SetZero(Addr : Char);
published
//作为接收解算用:
property DevType : string read FDevType write FDevType; //仪表类型
property DevAddr : Byte read FDevAddr write FDevAddr;
property Deviation : integer read FDeviation write FDeviation;
property CheckInterval : Byte read FCheckInterval write SetCheckInterval;
property OnGetWeight : TGetWeight read FGetWeight write SetGetWeight; //得到新的重量数据。
property OnGetRawData : TGetRawData read FGetRawData write SetGetRawData ; //得到原始数据。
property OnNotConnect : TNotifyEvent read FNotConnect write SetNotConnect; //仪表较长时间没有发送数据。
property OnGetWeightAndDec: string read FWeightAndDec; //2014-10-23 含有小数点的重量如D2008指令类型重量 write Set;
end;
procedure Register;