这段代码是PLC接收数据方面吗?

那该多好啊!!! 2017-06-17 02:48:31
这段代码是PLC接收数据方面吗?str_write(0)干嘛用的,
太长了我省去了一些
Private Sub Send_Parameter_Timer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Send_Parameter_Timer.Tick
Try


Do
Application.DoEvents()
Loop Until Receive_Boolean = False

Send_Boolean = True

Select Case str_byte_number
Case 0
AxMSComm1.OutBufferCount = 0
AxMSComm1.InBufferCount = 0
Dim str_write(0 To 100) As Byte
Dim str_val(0 To 5) As Byte
Dim Temp_FCS As Object = 0

str_val(0) = &H10
str_val(1) = &H2
str_val(2) = &H0
str_val(3) = &H5C
str_val(4) = &H5E
str_val(5) = &H16
AxMSComm1.Output = str_val
Sleep(50)

'写V区一个双字
'发:68 23 23 68 02 00 7C 32 01 00 00 00 00 00 0E 00 06 05 01 12 0A 10
str_write(0) = &H68 REM 开始符
str_write(1) = &H27 REM 长度
str_write(2) = &H27 REM 长度
str_write(3) = &H68 REM 开始符
str_write(4) = &H2 REM 站号
str_write(16) = &HC REM 数据长度 16位的05表示写入的是 位或者字节(即用一个字节存储)06 表示 字; 08表示双字(4个字节); 0C表示8个字节
str_write(17) = &H5 REM 04读05写
str_write(18) = &H1 REM 变量地址
str_write(19) = &H12 REM
str_write(20) = &HA
str_write(21) = &H10 REM 0~21是写死的,可以不用管
str_write(22) = &H6 REM 数据长度 01位;02字节;04字;06双字。
str_write(23) = &H0 REM 数据长度
str_write(24) = &H2 REM 数据个数 0100表示一个;0200表示连续的两个;0400连续的4个。
str_write(25) = &H0 REM 数据个数 0100表示一个;0200表示连续的两个;0400连续的4个。
str_write(26) = &H1 REM 存储类型 26位:01 V区;00其他
str_write(27) = &H84 REM 存储类型 27位:04 S区;05 SM区;06 AI;07 AQ;1E C;81 I;82 Q;83 M;84 V ;1F T
str_write(28) = &H0 REM 数据偏移量
str_write(29) = (Str(100) * 8) \ 256 REM 数据偏移量
str_write(30) = (Str(100) * 8) Mod 256 REM 数据偏移量
str_write(31) = &H0 REM 数据形式 03表示位;04表示其他
str_write(32) = &H4 REM 数据形式 03表示位;04表示其他
str_write(33) = &H0 REM 数据位数 即写入数据多少位。01一位;08八位;10十六位;20三十二位。
str_write(34) = &H40 REM 数据位数 即写入数据多少位。01一位;08八位;10十六位;20三十二位。
str_write(35) = (VW100) \ 256 REM 写入值 写入位,字节均用一个字节存储;写入双字得用四个字节
str_write(36) = (VW100) Mod 256
str_write(37) = (VW102) \ 256
str_write(38) = (VW102) Mod 256
str_write(39) = (VW104) \ 256 REM 写入值 写入位,字节均用一个字节存储;写入双字得用四个字节
str_write(40) = (VW104) Mod 256
str_write(41) = (VW106) \ 256
str_write(42) = (VW106) Mod 256

For i = 4 To 42
Temp_FCS = Temp_FCS + str_write(i)
Next
str_val(5) = &H16
AxMSComm1.Output = str_val
Sleep(50)
str_write(0) = &H68 REM 开始符
str_write(1) = &H27 REM 长度
str_write(2) = &H27 REM 长度
str_write(3) = &H68 REM 开始符
str_write(4) = &H2 REM 站号
str_write(5) = &H0 REM 源地址
str_write(6) = &H7C REM 功能代码 7C表示写入;6C表示读取。
str_write(7) = &H32 REM 协议识别
str_write(8) = &H1 REM 远程控制
str_write(9) = &H0 REM 冗余识别
str_write(10) = &H0 REM 冗余识别
str_write(11) = &H0 REM 协议数据
str_write(16) = &HC REM 数据长度 16位的05表示写入的是 位或者字节(即用一个字节存储)06 表示 字; 08表示双字(4个字节); 0C表示8个字节
str_write(17) = &H5 REM 04读05写
str_write(18) = &H1 REM 变量地址
str_write(19) = &H12 REM
str_write(20) = &HA
str_write(21) = &H10 REM 0~21是写死的,可以不用管
str_write(22) = &H6 REM 数据长度 01位;02字节;04字;06双字。
str_write(23) = &H0 REM 数据长度
str_write(24) = &H2 REM 数据个数 0100表示一个;0200表示连续的两个;0400连续的4个。
str_write(25) = &H0 REM 数据个数 0100表示一个;0200表示连续的两个;0400连续的4个。
str_write(26) = &H1 REM 存储类型 26位:01 V区;00其他
str_write(27) = &H84 REM 存储类型 27位:04 S区;05 SM区;06 AI;07 AQ;1E C;81 I;82 Q;83 str_write(37) = (VW150) \ 256
str_write(38) = (VW150) Mod 256
str_write(39) = (VW152) \ 256 REM 写入值 写入位,字节均用一个字节存储;写入双字得用四个字节
str_write(40) = (VW152) Mod 256
str_write(41) = (VW154) \ 256
str_write(42) = (VW154) Mod 256

For i = 4 To 42
Temp_FCS = Temp_FCS + str_write(i)
Next
str_write(43) = Temp_FCS Mod 256 REM 校验码
str_write(44) = &H16 REM 终止符
AxMSComm1.Output = str_write
str_byte_number = str_byte_number + 1
Case 7
str_byte_number = 0
'Receive_Timer.Enabled = True
Send_Parameter_Timer.Enabled = False
Send_Boolean = False
First_Read = True
End Select
Catch ex As Exception

End Try
End Sub
...全文
321 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
埃和智能 2017-07-13
  • 打赏
  • 举报
回复
每种PLC品牌的厂家都会提供高级语言的解决方案的 西门子:http://blog.sina.com.cn/s/blog_16d7d3ecb0102x1z5.html 欧姆龙:http://blog.sina.com.cn/s/blog_16d7d3ecb0102x3qi.html 三菱:http://blog.sina.com.cn/s/blog_16d7d3ecb0102x6wj.html 施耐德:http://blog.sina.com.cn/s/blog_16d7d3ecb0102x7ui.html
笨狗先飞 2017-06-28
  • 打赏
  • 举报
回复
看起来是向PLC写一组数据下去 str_write是电脑向PLC发送的数据包,str_write(0)应该就是通讯头了,看起来不是三菱的通讯协议了。
csdnnetman 2017-06-28
  • 打赏
  • 举报
回复
数据的pdu部分,你是跟西门子做ppi协议的交互处理。

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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