问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求DELPHI编写串口通讯程序的简单例子 用MSComm控件的 要详细的刚学delphi的就能看懂的那种

发布网友 发布时间:2022-04-30 04:36

我来回答

3个回答

热心网友 时间:2023-10-13 05:15

这里MSComm控件的属性Rthreshold设置为0,采用查询的方法读取串口数据。

Function readFromPLC(ReadChar:Array of char;ReadAddress:Array of Byte;ReadBytes:Integer):Booleam;

Var

ReadDataSum:integer;

DataSumCheck:integer;

tmpStr:String;

tmpchr,chr,chr2:char;

tmpVar:Variant;

Input:Variant;

InputLen,i,tmpInt:Integer;

tmpVar[1]:=$02;//STX 起始标志

tmpVar[2]:=$30;//CMD0 读命令

DataSumCheck:=DataSumCheck+$30

DataSumCheck:=0;//和校验位初始化

tmpVar:=VarArrayCreate([1,11]),

//创建数组,用来存放待发送的命令格式数据流

tmpVar[3]:=ReadAddress[0];

//读位元件4位起始地址:0~3

DataSumCheck:=DataSumCheck+ReadAddress[0];

tmpVar[4]:=ReadAddress[1];

DataSumCheck:=DataSumCheck+ReadAddress[1];

tmpVar[5]:=ReadAddress[2];

DataSumCheck:=DataSumCheck+ReadAddress[2];

tmpVar[6]:=ReadAddress[3];

DataSumCheck:=DataSumCheck+ReadAddress[3];

tmpStr:=IntToHex(ReadBygtes,2);

//读位元件个数转化为2位16进制

tmpChr:=tmpStr[1];//取16进制的低位

tmpVar[7]:=Ord(tmpChr);//转化为ASCII形式

DataSumCheck:=DataSumCheck+Ord(tmpChr);

mpChr:=tmpStr[2];// 取16进制的高位

tmpVar[8]:=Ord(tmpChr);//转化为ASCII形式

DataSumCheck:=DataSumCheck+Ord(tmpChr);

tmpVar[9]:=$03;//ETX 停止位标志

DataSumCheck:= DataSumCheck+$03;

tmpStr:=IntToHex(DataSumCheck,2);

//和校验位转化为2位16进制

tmpChr:=tmpStr[1];

tmpVar[10]:=Ord(tmpStr);

tmpChr:=tmpStr[2];

tmpVar[11]:=Ord(tmpStr);

MainForm.MSComm.Outupt:=tmpVar;

//向发送缓冲区写数据流

Sleep(1000);//延时

InputLen:=MaiForm.MSComm.InBufferCount;

//返回输入缓冲区内的等待读取的字节个数

Input:=MaiForm.MSComm.Input;

//读取接收缓冲区中的数据

If InputLen>0 then//待读取的字节个数大于0

Begin

If Input[0]=$02 then//STX返回数据的起始志

Begin //读取返回数据

ReadDataSum:=0;//返回值求和初始化

For i:=1 to ReadBytes do

Begin

tmpInt:=Input[i];

ReadChar[i-1]:=chr(tmpInt);

//将返回的ASCⅡ值转换为字符型

ReadDataSum:=ReadDataSum+Input[1];

End;

Inc(i);

If Input[i]=$03 then //ETX,停止位标志

Begin

ReadDataSum:= ReadDataSum+$03;

tmpStr:=InttoHex(ReadDataSum,2);

chr1:=tmpStr[1];//求校验位

chr2:=tmpStr[2];

if (Ord(chr1)=Input[i+1]) and

(Ord(ch2)=Input[i+2]) then//校验成功

Begin //数据取成功

Result:=True;

ShowMessage(‘DataRead succeed’);

end

else begin //校验错

Result:=False;

ShowMessage(‘DataRead Check fail’);

end;

end; //ETX

end //STX

else // If Input[0]<>$02

Result:=False;

end

else // If InputLen=0

Result:=False;

End;

热心网友 时间:2023-10-13 05:16

email 给 homewaygd@gmail.com

Good luck

热心网友 时间:2023-10-13 05:16

说点,可能你觉得是废话。以前这个问题纠结我很久。有本专门讲delphi串口通信的书,讲得很细。在图书馆或者书市找找。不好意思,书名忘了。这本书很管用,比当面问人还有用。记得我当时还请那位学长吃了顿饭。结果还没弄明白。其实有的事情必须靠自己的。后来我才后悔在图书馆搜书的时候看得不细。像你这样在百度砸分学东西就更不现实了。呵呵~~~~
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 洛阳喷砂除锈哪家好 想看电视剧阿诚的分集介绍 2腰10几几是围尺 delphi的串口问题 古人是怎么称呼自己的?最常用的称呼是什么?表示谦称的又用哪些词语? 上海滩生死较量分集剧情介绍 网购的牛仔裤长了大概8厘米,肥了大概4厘米,是31码的,想要换一条,应该换多少码的合适呢?本人男~ 在delphi和c#中如何实现串口通信 淼三个水的淼怎么组词 请问DELPHI串口通讯编程 的基本思路是什么 23.5市尺是几尺几 高分求《阿诚》的分集剧情介绍 此一时彼一此是什么意思 剑网3纯阳的生太极怎么增加到25尺 delphi 用什么方法或函数 可以把时间精确到毫秒?? 阿诚电视剧32全集大结局剧情 用贤弟造句 腰围78.5是多少尺??? delphi有么有精确到毫秒的时间戳 23尺x43尺是多么个平方 错嫁一生的分集剧情 贤弟是什么意思 这是什么生物 ?两厘米长 比牙签还细 DELPHI mscomm串口通信加延迟sleep()的作用 我自称小弟,收下愚兄的礼物。用古文怎么说? 怎么写论文:基于DELPHI的串口通信 到底是长须鲸大还是平滑侧齿龙!! 有没有质量好价格低的喷砂除锈设备?求推荐 与其到处...不如深入一点,需要一个什么成语? “兄”组词有哪些? 如何用Delphi实现串口通信,如何批量的采集多个传感器信号 伪装者阿诚到底最后死没死 幸会幸会后面接什么 南通市启东喷砂机除锈效果好的? excel 中的求和问题 关于DELPHI的串口通讯问题。读取数组的问题。 一个孩子叫王志成是什么电视剧? delphi 串口通信数制转换问题 DELPHI写程序与有RS232串口的仪器通信 阿诚电视剧免费观看大结局