全国服务热线:

15861139266

上位机的通信模块设计,苏州PLC培训,苏州上位机培训,苏州机器视觉培训,苏州工业机器人培训,苏州电工培训
发布时间:2023-04-13 10:31:28 点击次数:360

上位机的通信模块设计

该恒压供水监控系统采用一台工控机对泵房的水泵机组进行监控,监控程序程序的功能包括水位、水压、电机速度信号的采集:监测显示水泵机组的工作状态和运行情况:检测故障信号,进行报警及语言提示:相关数据的存储、动态实时报表、历史数据的随时查询、打印:根据现场工作情况发出控制指令给 PLC 实行水泵机组的切换:根据生产实际情况修改工作参数等等。系统软件采用 Delphi 高级语言编程,能够及时准确地对供水自动化生产实行监控。串行通信作为上位机和下位机联系的桥梁,因此上位机通信模块设计在整

个监控程序占有非常重要的地位。用 Delphi 实现串口通信,最常用的办法是使用控件(如 MSCOMM 等),利用MSCOMM 控件开发串口通信程序,只需设置相关的属性,使用相关的方法与相应的事件,实现串口通信较为简单方便。本系统中上位机的信息管理及监控软件运行在Windows2000/NT 操作系统下,并利用 MSCOMM 控件开发设计了上位机与 PLC 的串行通信程序,对供水系统的运行状态进行监控。MSComm32 控件的主要属性、方法及事件如下

CommPort 属性:用于设置或返回通讯端口号。计算机的串行通讯端口一般有 COM1和 COM2 两个,必须在打开端口以前设置该属性。如果设置的端口不存在,运行时会产生设备无效错误。

CommEvent 属性:返回通信事件或错误。Setting 属性:设置并返回初始化参数,即波特率、奇偶校验、传输数据位和停止位。InputMode 属性:设置或返回接收到的数据的类型。缺省为 ComInputModeText 表示以文本(ASCII码)形式接收数据,而 ComInputModeBinary 表示以二进制形式接收数据Input 属性: 返回并删除接收缓冲区中的数据,在设计时 Output 属性: 向输出级冲区中写入数据,在设计时无效,运行时为只读。

Output 属性:向输出缓冲区中写入数据,在设计时无效,运行时为只读。PortOpen 属性:设置并返回通信端口开或关的状态,运行时有效。CommInit 方法:初始化并打开指定的串口

RecvData 方法:接收数据。

SendData 方法:发送数据。

ComOpenOrClose 方法:打开或关闭串口。

OnComm 事件:当CommEvent 属性的值发生变化时,就产生此事件,标志发生了一个通信事件或错误。

通信模块作为上位机和 PLC 交换数据的平台,具有十分重要的作用。通信模块的设计主要包括几个方面:

1、串口初始化。串口初始化包括设置通信协议、输入输出缓冲区大小等内容。

2、数据的接收和发送以及校验。上位机首先发出命令给 PLC,PLC 从串口输出缓冲区内接收数据,然后PLC 自动发送一个响应,上位机检测到输入缓冲区的数据开始接收数据。命令帧的格式为站号、读/写操作类型、发送数据、校验码、结束字符。响应帧的格式为站号、接收数据、校验码、结束字符。为了保证通信数据的正确性,上位机对接收到的数据需要进行校验,校验是通过一个 BCC 校验函数来进行。BCC 校验码就是将要传送的字符串的 ASCII 码以字节为单位作异或运算,并将异或运算结果作为指令的一部分传送出去。

3、数据转换。由于 PLC 在发送数据时,有些模拟量数据,如管网压力和电机转速采用的是二进制的形式,在计算机接受到数据之后必须进行转换,方能正确显示。4、错误处理和报警。对于传输过程中可能出现的各种错误,需要采取相应的处理措施,不可恢复的严重错误必须报警。


大林上位机机器视觉_苏州电工培训_苏州PLC培训_苏州上位机培训_苏州机器视觉培训_苏州工业机器人培训_最适合电工及plc编程人员学习的上位机机器视觉课程 大林老师:15861139266(微信同号)


通信模块中的部分事件源代码如下:

//串口初始化

procedure TfrmCommTest.commInit:

bcgin

if MSComm1.PortOpen then MSComm1.PortOpen:=false.MSComm1.Settings:=cboSetting.Text;if chkTextOrBin.Checked then

MSComm1.InputMode:=ComInputModeText//文本形式else MSComm1.InputMode:=ComInputModeBinary://二进制形式MSComm1InputLen:=0://读接收缓冲区所有数据MSComm1InBufferSize:=CommOption.inbufcr;//设置缓冲区大小MSComm1.0utBufferSize:=CommOption.outbuffer;MSComm1.RThreshold:=1://每接收到一个字符都产生 OnComm 事件

if cboCommPort.Text='COM'thenMSComm1.CommPort:=1

else

MSComm1.CommPort:=2:

MSComml.Handshaking:-CommOption.handshake://设置握手协议end:

procedure TfrmCommTest.chkSendHexClick(Sender: TObject);var bChk:boolean;

str:string:

bcgin

ifchkSendHex.Checked then //十六进制形式begin

bChk:=truc;

end

else //字符串形式

begin

bChk:=false;

end;

str:=ConvertHexChar(memSend.TextbChk);

memSend.Clear;

memSend.Text:=str;

end;

procedure TfrmCommTest.chkRecvHexClick(Sender: TObject):var bChk:boolean;

str:string;

begin

ifchkRecvHex.Checked then //十六进制形式begin

bChk:-truc;

end

else //字符串形式

begin

bChk:=false;

end:

str:=copy(memRecv.Text,1,length(memRecv.Text))//需转换的字符str:=ConvertHexChar(str,bChk):memRecv.Clear;

memRecv.Text:=str,

end;

//发送数据

procedure TfrmCommTest,SendData:

var str:string!

begin

str-"

if not MSComml.PortOpen then//串口未打开

begin

MessageDlg(请先打开串口!mtInformation,[mbOk],0):

exit;

end

else /mp:oleV

begin

if memSend.Text=" then

MessageDlg(请输入需要发送的数据!mtInformation,[mbOk],0);

str:=memSend.Text:

sumSend:=sumSend+length(str);

MSComm1Output:=str.

edit2.Text;=inttostr(sumSend):

end:

end;

//接收数据

procedure TfirmCommTest.RecvData;

var s:string

VTmp: Variant;

ovTmp:oleVariant:

iiRecv:integer;

bTmp:Byte;

bcgin

ifMSComml.InputMode=ComInputModeText then//文本形式

bcgin

iRecv:=MSComm1.InBufferCount:

s-MSComm1.Input;

if chkAutoClear.Checked then

memRecv.Text:=s

else memRecv.Text:=memRecv.Text+s;

sumRecv:=sumRecv+iRecv:

edit3.Text:=inttostr(sumRecv):

end

else //二进制形式

begin

iRecv:=MSComm1.InBufferCount;ovTmp:=MSComm1.Input;vTmp:=VarArrayCreate([0,127],varByte);VImp:=ovTmp;









蓝色企业培训课程表图文风横版海报__2023-04-07+10_17_46.png


立即咨询
  • 品质服务

    服务贴心周到

  • 快速响应

    全天24小时随时沟通

  • 专业服务

    授权率高,保密性强

  • 完善售后服务

    快速响应需求,及时性服务

直播课程
软件开发基础课程
上位机软件开发课
机器视觉软件开发课
专题课
联系方式
电话:15861139266
邮箱:75607082@qq.com
地址:苏州吴中区木渎镇尧峰路69号
关注我们

版权所有:江苏和讯自动化设备有限公司所有 备案号:苏ICP备2022010314号-1

技术支持: 易动力网络