delphi圣人高手请进解决硬件控制问题

taimier 2004-09-01 05:30:44
关于考勤机的控制代码,如何控制(com1接口)。使他的考勤数据插入到sql server 数据库。能否提供相关方面的源代码。
...全文
103 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
taimier 2004-09-01
  • 打赏
  • 举报
回复
unit myUnit;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Db, ADODB;

function link_com(port :integer):integer;stdcall;
external'sfj.dll';
function rd_cmw(w_sno:integer;cmwout:pchar):integer; stdcall;
external'sfj.dll';
function rd_mdeb(w_sno:integer;mdebout:pchar):integer; stdcall;
external'sfj.dll';
function set_key(w_sno,batch_no,keystat:integer;key:string):integer; stdcall;
external'sfj.dll';
function set_cmw(w_sno:integer;cmw:string):integer; stdcall;
external'sfj.dll';
function set_time(w_sno:integer;timestr:string):integer; stdcall;
external'sfj.dll';
function set_mdeb(w_sno:integer;mdeb:string):integer; stdcall;
external'sfj.dll';
function clr_ram(w_sno:integer):integer; stdcall;
external'sfj.dll';
function chk_key(w_sno,batch_no,keystat:integer;key:string):integer; stdcall;
external'sfj.dll';
function get_jyzm(w_sno,choice:integer;jydata:pchar):integer; stdcall;
external'sfj.dll';
function add_hmd(w_sno,hlen:integer;hmd:string):integer; stdcall;
external'sfj.dll';
function redu_hmd(w_sno,hlen:integer;hmd:string):integer; stdcall;
external'sfj.dll';
function set_hmd(w_sno:integer):integer; stdcall;
external'sfj.dll';
function rd_hmd(w_sno:integer;code:pchar):integer; stdcall;
external'sfj.dll';
function clr_bt(w_sno:integer):integer; stdcall;
external'sfj.dll';
function set_bt(w_sno,hlen:integer;btString:string):integer; stdcall;
external'sfj.dll'; //---btString长度 hlen*6
function clr_menu(w_sno:integer):integer; stdcall;
external'sfj.dll';
function set_menu(w_sno,hlen:integer;DJString:string):integer; stdcall;
external'sfj.dll';
type
TForm1 = class(TForm)
Timer1: TTimer;
adoConnection: TADOConnection;
Label1: TLabel;
Label2: TLabel;
lblName: TLabel;
lblClassName: TLabel;
Label3: TLabel;
Label4: TLabel;
lblCardNo: TLabel;
lblTime: TLabel;
Shape1: TShape;
Label5: TLabel;
adoquery: TADOQuery;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
function AddData(CardNo:string):Integer;
function GetCardNo():string;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}



procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Messagedlg('确定要退出吗?',mtConfirmation,[mbYes, mbNo],0)=mrYes then
begin
timer1.Enabled :=False;
adoConnection.Close ;
end
else
Action:=caNone;
end;

function TForm1.AddData(CardNo:string):Integer;
var
sNo:integer;
sFamilyName,sGivenName:string;
sClassName:string;
begin
Result:=0;
with adoquery do
begin
sql.Clear ;
sql.Add ('select 编号,姓,名,当前班级 from student_base_info where 卡号='+CardNo);
open;
if not eof then
begin
sNo:=fields.Fields[0].AsInteger;
sFamilyName:=fields.Fields[1].AsString;
sGivenName:=fields.Fields[2].AsString;
sClassName:=fields.Fields[3].AsString;
close;
sql.Clear ;
sql.Add ('Execute InsertTimeInfo '+inttostr(sNo)+','''+sClassName+''','+CardNo);
ExecSQL;
lblName.Caption :=sFamilyName+sGivenName;
lblClassName.Caption :=sClassName;
lblCardNo.Caption :=CardNo;
lblTime.Caption :=DateTimetostr(Now);
end
else
Result:=2;
close;
end;
end;

function TForm1.GetCardNo():string;
var
pCardNo:pchar;
sCardNo:string;
begin
GetMem(pCardNo,256);
rd_cmw(1,pCardNo);
sCardNo:=string(pCardNo);
if (copy(sCardNo,1,2)='00') and (copy(sCardNo,5,1)='1') and (copy(sCardNo,7,10)='3344556677') then
begin
shape1.Pen.Color :=clGreen;
shape1.Brush.Color :=clGreen;
end
else
if length(sCardNo)<>16 then
else
Result:=sCardNo;
FreeMem(pCardNo);
end;


procedure TForm1.Timer1Timer(Sender: TObject);
var
CardNo:string;
begin
CardNo :=GetCardNo;
if trim(CardNo)<>'' then
case AddData(copy(CardNo,12,5)) of
1: set_cmw(1,'03');
2: set_cmw(1,'03');
else
set_cmw(1,'06'+copy(CardNo,12,5)+'00000');
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
link_com(3);
adoConnection.Open ;
timer1.Enabled :=True;
end;

end.
代码转载自:https://pan.quark.cn/s/2af55a97eb0f **INA226测试程序参考** 在电子工程和嵌入式系统开发领域,INA226被认为是一款高精度且低功耗的电流与电源监控器,其应用范围广泛,涵盖电池管理系统、电源路径管理以及智能能源监测等多个方面。该芯片由德州仪器(Texas Instruments)负责生产,能够提供精确的电流和电压测量结果,并具备灵活的配置选择。 **INA226芯片功能详解** INA226的核心特性包括: 1. **双向电流测量**:能够测量流经设备的正向电流和反向电流。 2. **高压和低压测量**:支持高达60V的电压测量,同时可以测量从微安到安培范围内的电流。 3. **内置模拟电路**:集成了一个精密运算放大器、一个电流检测放大器以及一个高精度电压基准。 4. **I2C接口**:通过标准的I2C接口与微控制器进行通信,便于读取测量数据。 5. **多种配置模式**:允许选择不同的电流和电压范围,以适应不同应用场景的需求。 6. **低功耗**:在待机状态下,功耗非常低,适合用于电池供电的设备。 **平台IO与ESP8266开发环境** `PlatformIO`是一个开源的跨平台集成开发环境,专注于物联网(IoT)项目的开发。它整合了构建系统、库管理和设备支持,显著简化了嵌入式开发流程。`ESP8266`是由乐鑫科技推出的一款低成本且高性能的Wi-Fi微控制器,常用于智能家居和物联网领域。 在`PlatformIO`中配置和编写针对`ESP8266`的INA226测试程序,需要遵循以下步骤: 1. **安装PlatformIO**:在IDE(例如Visual Studio Code、Atom等...
已经博主授权,源码转载自 https://pan.quark.cn/s/6b24333d46cf 这里所说的激光扫描测距仪的实质就是3D激光雷达。 如上面视频中展现的那样,扫描仪可 以获取各转角情况下目标物体扫描截面到扫描仪的距离,由于这类数据在可视化后看起来像 是由很多小点组成的云团,因此常被称之为:点云(PointClould)。 在获得扫描的点云后,可以在计算机中重现扫描物体/场景的三维信息。 自制激光3D扫描仪的知识点涵盖了多个方面,包括激光雷达的基本概念、激光扫描测距的原理、以及如何低成本实现3D激光扫描。 以下是对这些知识点的详细阐述。 激光雷达是一种通过激光测距获取物体表面信息的设备。 它通常用于机器人导航、3D模型重建和地图测绘等领域。 激光雷达能够获取目标物体在各个转角情况下的扫描截面到扫描仪的距离,并将这些数据可视化成点云(Point Cloud)。 点云是由大量小点组成的三维数据模型,这些小点模拟了物体或场景的三维结构。 在制造激光3D扫描仪时,需要考虑的关键原理包括激光三角测距原理和线状激光进行截面测距的原理。 激光三角测距原理是指通过测量发射激光与反射激光之间的角度差异来确定距离。 而线状激光进行截面测距原理则是指将点状激光改变成线型光束,一次性获得整个扫描截面的数据。 市面上的激光雷达产品价格昂贵,主要因素包括使用高速光学振镜进行大角度扫描、通过计算发射/反射激光束相位差的测距手段、以及矫正算法和人工成本。 但个人DIY自制激光雷达时,可以通过降低对精度和性能的要求来大幅降低成本。 例如,使用三角测距方式替代成本较高的TOF测距方式,或者使用普通电机机构驱动激光器来替代高速振镜。 自制激光3D扫描仪的实现,可以考虑制作一个能够测量一个点的设备,并采用类似的三角测距...

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧