您现在所在的是:

台达论坛

回帖:7个,阅读:944 [上一页] [1] [下一页]
* 帖子主题:

我错在什么地方?

1405
rgbest
文章数:94
年度积分:50
历史总积分:1405
品牌积分(台达):0
注册时间:2013/9/26
发站内信
发表于:2016/9/1 5:49:35
#0楼
用VB6.0 写数据到PLC中过程中,调试提示 LRC = LRC(aa)中的“aa”数据类型不正确,请教大咖,我错在哪里?

Dim smsg As String
Dim aa   As String
Dim a1 As String
stx = ":"     '起始字符为冒号
a = Right(Text11.Text, Len(Text11.Text) - 1)   'a为需要写入寄存器的数据

If Len(a) >= 0 Then   '如果写入寄存器的数值大于等于零
If Mid(a, 1) = "" Then '如果写入的数值字符的第一位是空格
MsgBox ("请输入数值!")   '则提示请输入数值!
Text1.SetFocus   '光标移至文本框
Text1.SelStart = 1   '光标在文本框第二位闪烁
Exit Sub

b1 = Hex(a)   '那么,直接将输入的数据转换为十六进制数
If Len(b1) = 1 Then   '如果输入一位十六进制数
a1 = "000" + b1   '那么,写入的数值为000加上输入的一位十六进制数
Else
If Len(b1) = 2 Then   '如果输入的数据长度为2
a1 = "00" + b1   '那么,写入的数值为00加上输入的两位十六进制数
Else
If Len(b1) = 3 Then   '如果输入的数据长度为3
a1 = "0" + b1   '那么写入的数值为0加上输入的一位十六进制数
Else
If Len(b1) = 4 Then   '如果输入的数据长度为4
a1 = b1    '那么写入的数值为输入的数据
End If
End If
End If
End If
End If

aa = "0106" + "09A9" + a1  'PLC站号01 命令06(写入) 寄存器D地址09A9 数据a1
LRC = LRC(aa) '计算lrc校验值
If Len(LRC) = 1 Then   '如果lrc校验值为一位
LRC = "0" + LRC   '则lrc校验值补零
Else
LRC = LRC   '否则校验值为计算值
End If
2960
528695231
文章数:635
年度积分:56
历史总积分:2960
品牌积分(台达):0
注册时间:2016/8/1
发站内信
发表于:2016/9/1 8:01:31
#1楼
这是什么啊 一大推的
总有一天我不再做枝头上夜莺的哀吟
像沙翁中的云雀,我会一翅冲天
为泱泱大国的中华唱出我赞美的诗章;
9411
yzl1981000
文章数:1532
年度积分:128
历史总积分:9411
品牌积分(台达):0
注册时间:2006/1/19
发站内信
2017国庆活动(三)
发表于:2016/9/1 8:51:43
#2楼
VB编程想当年在大学时学过两年,不过现在都还给老师了。
19263
pqsh 版主
文章数:7424
年度积分:1093
历史总积分:19263
品牌积分(台达):25
注册时间:2006/8/22
发站内信
2018论坛解答高手
发表于:2016/9/1 8:59:31
#3楼
LRC接受字符串?
LRC函数在哪里?
如果我忘了我
请帮忙记得我
pqsh@163,326199298@v&q同号
8302
fujifa
文章数:2937
年度积分:235
历史总积分:8302
品牌积分(台达):2
注册时间:2014/2/10
发站内信
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
发表于:2016/9/1 9:34:59
#4楼
请先添加LRC函数代码,例如:
Function LRC(ByVal s As String) As String
 Dim sa, i As Integer, sum As Long
 sa = Split(s)
 For i = 0 To UBound(sa)
     sum = sum + ("&H" & sa(i))
 Next
 Lcr = Hex((sum And 255 Xor 255) + 1)

End Function
精通富士POD,富士PLC的编程
有问题可以直接电邮:FUJIFA@yeah.net
1405
rgbest
文章数:94
年度积分:50
历史总积分:1405
品牌积分(台达):0
注册时间:2013/9/26
发站内信
发表于:2016/9/1 10:25:27
#5楼
感谢四楼,函数校验引用了中达电通王乃全公布的程序:

Public Function LRC(str As String) As String
c = 0
l = Len(str)
For c = c + 1 To l
c_data = Mid$(str, c, 2)
d_lrc = d_lrc + Val("&H" + c_data)
c = c + 1
Next c
If d_lrc > &HFF Then
d_lrc = d_lrc Mod &H100
End If
h_lrc = Hex(&HFF - d_lrc + 1)
If Len(h_lrc) > 2 Then
h_lrc = Mid(h_lrc, Len(h_lrc) - 1, 2)
End If
LRC = h_lrc
End Function

这个函数在启动停止PLC 和读取寄存器数据时很正常。我这里的问题主要是"aa" 的数据类型不符合要求。是不是添加
Function LRC(ByVal s As String) As String
 Dim sa, i As Integer, sum As Long
 sa = Split(s)
 For i = 0 To UBound(sa)
     sum = sum + ("&H" & sa(i))
 Next
 Lcr = Hex((sum And 255 Xor 255) + 1)

End Function
       函数代码后就可以了,下班后试试。
[此贴子已经被作者于2016/9/1 10:26:30编辑过]
4809
528工控科技
文章数:1574
年度积分:20
历史总积分:4809
品牌积分(台达):0
注册时间:2014/1/3
发站内信
工控人谈电商
发表于:2016/9/1 12:39:05
#6楼
把你的程序复制到VB里,稍微改动一下,没发现错误。

不过,你的程序处理方法非常不好,太差!

附件 1.jpg
gk528.com
1405
rgbest
文章数:94
年度积分:50
历史总积分:1405
品牌积分(台达):0
注册时间:2013/9/26
发站内信
发表于:2016/9/9 11:30:28
#7楼
谢谢六楼,谢谢!

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

78.0005