上位机软件设计上位机组态软件设计的界面中进行数据、曲线等监控、实时报警。
在Visual Basic 可视化编程中要通过选取通讯控件对其属性进行设置。
在程序中进行初始化对波特率、通信数据长度、停止位长度、校验等参数进行设置。
下位机编程时同样要进行初始化对波特率、通信数据长度、停止位长度、校验等参数进行设置。
表5-3放组态画的控制界面图上位机程序VB与组态王、应用程序间的动态数据交换(DDE)程序Dim A(8) As StringDim i As IntegerDim plc1 As StringDim plc2 As StringDim plc3 As StringDim sg(10) As LongDim strData As StringDim str As StringDim measureValue As StringDim giveValue As StringDim success As StringDim canShu As DoublePrivate Sub Form_Load()For i = 0 To 8A(i) = "A" & (i + 1)Next i'For i = 0 To 8' Text1(i).Text = A(i)'Next i'定义远程主机及端口和对应本地端口For i = 0 To 8udpClient(i).RemoteHost = A(i) udpClient(i).RemotePort = 2000 udpClient(i).Bind (2001 + i) Next i'定义远程主机及端口和对应本地端口udpClient(9).RemoteHost = "B1" udpClient(9).RemotePort = 2000 udpClient(9).Bind 2011udpClient(10).RemoteHost = "B2" udpClient(10).RemotePort = 2000udpClient(10).Bind 2012'**********************定义从组态王接收的数据*************************For i = 0 To 10'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' plc1 = "errorValue"plc1 = plc1 & iplc1 = plc1 + ".STATIC100"Text4(i).LinkTopic = "VIEW|tagname"Text4(i).LinkItem = plc1 'errorValueText4(i).LinkMode = vbLinkNoneText4(i).LinkMode = vbLinkAutomatic'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' plc2 = "giveMinute"plc2 = plc2 & (i + 1)plc2 = plc2 + ".STATIC100"Text5(i).LinkTopic = "VIEW|tagname"Text5(i).LinkItem = plc2 'giveMinuteText5(i).LinkMode = vbLinkNoneText5(i).LinkMode = vbLinkAutomatic''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' plc3 = "wordPlc"plc3 = plc3 & iplc3 = plc3 + ".STATIC5"Text6(i).LinkTopic = "VIEW|tagname"Text6(i).LinkItem = plc3Text6(i).LinkMode = vbLinkNoneText6(i).LinkMode = vbLinkAutomaticNext iEnd SubPrivate Sub Text6_Change(Index As Integer)Dim wordToServer As StringDim wordToAll As StringIf Text6(Index).Text = 1 ThenwordToServer = InputBox(message, "给他发信息")If wordToServer <> "" And Label1(Index).ForeColor = vbGreen Then On Error Resume NextudpClient(Index).SendData "W" & wordToServerEnd IfEnd If''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' If Text6(0).Text = 3 ThenwordToAll = InputBox(message, "给所有人发信息")If wordToAll <> "" ThenFor i = 0 To 10If Label1(i).ForeColor = vbGreen ThenOn Error Resume NextudpClient(i).SendData "W" & wordToAllEnd IfNext iEnd IfEnd IfEnd SubPrivate Sub Timer1_Timer()For i = 0 To 10If Label1(i).ForeColor = vbGreen Thensg(i) = sg(i) + 1End IfIf sg(i) = 3 ThenLabel1(i).ForeColor = vbBlacksg(i) = 0End IfNext iEnd SubPrivate Sub udpClient_DataArrival(Index As Integer, ByVal bytesTotal As Long) On Error Resume NextLabel1(Index).ForeColor = vbGreen '如果接收到数据表示正在通信sg(Index) = 0If Timer Mod 5 = 0 Then'设定试验误差和时间If Text5(Index).Text <> 0 ThenudpClient(Index).SendData "G" & Text5(Index).TextEnd IfIf Text4(Index).Text <> 0 ThenudpClient(Index).SendData "E" & Text4(Index).Text End IfEnd IfudpClient(Index).GetData strData, vbStringstr = Left(strData, 1)Select Case strCase "M"measureValue = Mid(strData, 2)canShu = Val(measureValue)If Index = 0 Or Index = 1 Or Index = 2 ThencanShu = canShu * 500ElseIf Index = 3 Or Index = 4 Or Index = 5 Then canShu = canShu * 50ElseIf Index = 3 Or Index = 4 Or Index = 5 Then canShu = canShu * 600ElsecanShu = canShu * 500End IfText1(Index).Text = canShuCase "G"giveValue = Mid(strData, 2)canShu = Val(giveValue)If Index = 0 Or Index = 1 Or Index = 2 ThencanShu = canShu * 500ElseIf Index = 3 Or Index = 4 Or Index = 5 ThencanShu = canShu * 50ElseIf Index = 3 Or Index = 4 Or Index = 5 ThencanShu = canShu * 600ElsecanShu = canShu * 500End IfText2(Index).Text = canShuCase "S"success = Mid(strData, 2) '收到试验结果标记Text3(Index).Text = successEnd SelectEnd Sub监控界面命令语言\\本站点\持续时间=\\本站点\持续时间+1 ;xyAddNewPoint ( "XYA1",\\本站点\持续时间,\\本站点\测量值A1,1 ); xyAddNewPoint ( "XYA1",\\本站点\持续时间,\\本站点\给定值A1,2 );xyAddNewPoint ( "XYA2",\\本站点\持续时间,\\本站点\测量值A2,1 ); xyAddNewPoint ( "XYA2",\\本站点\持续时间,\\本站点\给定值A2,2 );xyAddNewPoint ( "XYA3",\\本站点\持续时间,\\本站点\测量值A3,1 );xyAddNewPoint ( "XYA3",\\本站点\持续时间,\\本站点\给定值A3,2 );if(\\本站点\持续时间==40){xyClear( "XYA1",1);xyClear( "XYA1",2 );xyClear( "XYA2",1);xyClear( "XYA2",2 );xyClear( "XYA3",1);xyClear( "XYA3",2 );\\本站点\持续时间=0;}xyClear( "XYA1",1);xyClear( "XYA1",2 );xyClear( "XYA2",1);xyClear( "XYA2",2 );xyClear( "XYA3",1);xyClear( "XYA3",2 )。