基于调制解调器与VB的PLC远程通讯系统设计
,数据位,停止位,奇偶校验位及设置硬件握手协议,然后向MODEM发出DTR(已准备好)信号一便接管MODEM,程序如下: If MSComm1.PortOpen Then MSComm1.DTREnable = True Else MSComm1.DTREnable = False End If 二.对MODEM初始化 发出一些命令来设置参数,其中S0=n(n>=1)自动应答.n为响铃次数;E0/E1关闭/打开命令字符回应;Q0/Q1设置MODEM返回/不返回结果码;M0/M1关闭/打开MODEM扬声器;Ln(n>=0)设置MODEM扬声器音量;P/T设置MODEM脉冲/音频拨号;程序如下: If MSComm1.PortOpen Then Do While Not MSComm1.CTSHolding: Loop TXD= "ATS0=1E1Q0M1L2T" + Chr(13) MSComm1.Output = TXD End If 三.进行拨号 向MODEM发出ATD命令,程序如下: MSComm1.Output="ATD" & "05925998499"+Chr(13) 当发送“ATD”+ 电话号码 + Chr(13)时,MODEM就开始拨号,拨号需要一定的时间,在拨号的过程中可以不断读取MODEM的CD指示灯的状态,当电话拨通后CD指示灯会点亮。并返回“CONNECT + 波特率”的信息。如果MODEM向PC的回应字符串中含有"Connect"或CDHolding属性值变为True(检测出载波),则表示已与远方MODEM连机了,此时可以传输数据。 当电话拨通后,MODEM不再接收AT指令,要使其回到命令状态,则必须发送“+++”信息,使MODEM回到命令状态,然后发送“ATH”+ Chr(13)则可以挂断电话,程序如下: MSComm1.Output="ATH" +Chr(13) 4.2 通讯程序设计 一.永宏PLC通讯协议 ⑴.开头字符(STX):ASCI I码之开始字符STX。 ⑵.从站号码:为两位数之16进制数值。 ⑶.命令号码:为两位数之16 进制数值,为由主系统要求从系统所执行之动作类别。 ⑷.本文资料:本文数据可为0(无本文数据)~500个ASCII字符。 ⑸.侦误值(CHECKSUM): 侦误值系将前述~将各ASCII字符之16进制数码值(8位长度)从头至尾依序相加,但不考虑进位,因此最终结果为侦误值。 ⑹.结尾字符(ETX):ASCI I码之结尾字符ETX之16进制数码为03H。。 二.读数写数 本系统操作PLC的关键数据主要是水位的设定值PV=R0和当前值CV=R1,即要对暂存器R0进行写操作,R1进行读操作; 依照协议VB设计的通讯程序必须指定一个命令码,向PLC请求数据读取,查的该命令码为“46”,解释为:连续多个缓存器之数据读取。读取R1的PC命令的ASCII码写法为: “STX+ 01(站号)+46(命令码)+01(连续数据个数)+R00001(数据开始地址)+LRC(侦误值)+ETX” 依照协议VB设计的通讯程序必须指定一个命令码,对PLC缓存器数据写入,查的该命令码为“47”,解释为:连续多个缓存器之数据写入。写入R0的PC命令的ASCII码写法为: “STX+ 01(站号)+47(命令码)+01(连续数据个数)+R00000(数据开始地址)+XXXX(写入的数据资料,16进制)+LRC(侦误值)+ETX” 读取当前值CV=R1,程序如下 Private Sub Timer1_Timer() MSComm1.Output= Chr(2)+ “014601R00001”+ Lrc(“014601R00001”)+Chr(3) Delay (10) //延时 CV = Val("&H" + Mid(MSComm1.Input, 7, 4)) //数据处理,R0放于CV CV.Text = CV End Sub 写入设定值PV=R0,程序如下 Private Sub Command1_Click() If Len(Hex(PV.Text)) = 4 Then PV = Hex(PV.Text) If Len(Hex(PV.Text)) = 3 Then PV = "0" + Hex(PV.Text If Len(Hex(PV.Text)) = 2 Then PV = "00" + Hex(PV.Text) If Len(Hex(PV.Text)) = 1 Then PV = "000" + Hex(PV.Text) //10进制转换16进制 MSComm1.Output=Chr(2)+ “014701R00000”+ PV + +Lrc(“014701R00000” & PV)+Chr(3) End Sub 三.侦误值(CHECKSUM)计算 为VB的编程方便,把该计算做成单独一个子程序,依所有数据累加,舍弃进位的规则VB的LRC编程如下: Private Function Lrc(Dats) As String Dim i Dim Sum Sum =2 For i = 1 To Len(Dats) Sum = Sum + Asc(Mid(Dats, i, 1)) Next i Lrc = Right("0" + Hex(Sum + 2), 2) End Function 5结束语 采用基于MODEM通讯的设计极方便地实现该小电站生厂调度,在这种只需短时间连接控制的系统应用上可以大幅度地减小通讯成本,具有一定的推广价值。另外,通过MODEM的连接,利用永宏编程软件可以实现该设备的远程程序调试修改,通过两个MODEM还可以实现两台远程PLC的CPU连接通讯等。
调制解调器VBPLC远程通讯系 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)