怎样实现VB编程K120S PLC与计算机通讯 点击:6476 | 回复:54



PLC低手

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 4回
  • 年度积分:0
  • 历史总积分:13
  • 注册:2006年3月15日
发表于:2006-03-16 11:07:00
楼主
PLC型号为K120S ,有一9针串口,一485口,用9针串口通讯,接线方式为:2-3,3-2,5-5,用KGL编程通讯正常,用VB6编程,发送命令后无反应,发送命令格式不对?
send$ = "H05 H3030 H72 H5353 H3032 H3035 H254D573230 H3036 H255057303031 H04"
MSCOMM1.OUTPUT=send$
本人初学PLC,说明书看了几遍都没弄明白具体怎么用高级语言编程与PLC 通讯,求高手给指点一下,最好给出一个简单的例程,谢谢了。



wxh8206

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2006年8月27日
发表于:2006-08-27 15:02:00
21楼

LG产电MM

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 174回
  • 年度积分:0
  • 历史总积分:342
  • 注册:2003年8月26日
发表于:2007-01-31 20:33:00
22楼
Visual Basic ^_^

老苯

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 14回
  • 年度积分:0
  • 历史总积分:27
  • 注册:2007年2月26日
发表于:2007-03-13 20:18:00
23楼
兄弟,我也面临同样的问题,你说你的PLC已经有了反应,可否将你发送命令的字符串发给小弟,最好将VB源码也发过来,我的PLC至今没反应,想的小弟头发都白了,可怜啊,如蒙相助,感激不尽。 

EMAIL:jfliu0062@sohu.com 

QQ: 657785139 

老苯

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 14回
  • 年度积分:0
  • 历史总积分:27
  • 注册:2007年2月26日
发表于:2007-03-13 20:22:00
24楼
我用的也是LG 的k120s,好烦啊

LHS

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 126回
  • 年度积分:0
  • 历史总积分:292
  • 注册:2005年9月12日
发表于:2007-03-13 21:02:00
25楼
Comm1.Output = Chr(2) & "oM005C008000BC" & Chr(3)  'P0007->ON这是用LG编程协议通讯用编程线和PC连接

老苯

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 14回
  • 年度积分:0
  • 历史总积分:27
  • 注册:2007年2月26日
发表于:2007-03-14 00:02:00
26楼
谢谢lhs兄弟,我明天试试看。有机会的话一定请你喝酒,呵呵。

wenjun

  • 精华:0帖
  • 求助:0帖
  • 帖子:27帖 | 629回
  • 年度积分:0
  • 历史总积分:733
  • 注册:2005年2月21日
发表于:2007-03-14 07:51:00
27楼
ding

老苯

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 14回
  • 年度积分:0
  • 历史总积分:27
  • 注册:2007年2月26日
发表于:2007-03-14 10:02:00
28楼
lhs兄弟,我今天按你说的代码试了一下,还是没反应,是不是要像上面的兄弟说的要加校验和啊,如果要的话,ENQ和EOT要不要加在校验和里呀?上面兄弟说PLC站号一定要用00,那就是十进制的,跟其它十六进制数据放在一起好像有些别扭,我试了也没反应。下面是我的代码,请各位兄弟高抬贵眼帮忙看看问题到底出在那里啊。
Private Sub Form_Load()
   Dim outdata As Variant
   Dim InString As String
   MSComm1.CommPort = 4
   MSComm1.Settings = "9600,N,8,1"
   MSComm1.OutBufferCount = 0              '清空发送缓冲区
   MSComm1.InBufferCount = 0              '清空接收缓冲区
   MSComm1.PortOpen = True                '打开串行口
   outdata = Chr(5) + "303072535330313036254D57313030" + Chr(4)  '读M0100的状态
   MSComm1.Output = outdata
   MSComm1.InputLen = 0

   If MSComm1.InBufferCount Then ' 将返回数据放在文本框
      InString = MSComm1.Input
   End If
      Text1.Text = InString
   MSComm1.PortOpen = False ' 关闭串行端口。
End Sub

LHS

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 126回
  • 年度积分:0
  • 历史总积分:292
  • 注册:2005年9月12日
发表于:2007-03-14 12:00:00
29楼
1。首先要确定用什么协议和K120通讯,因为用不同的协议连线和设置也不同。
2。我用的是LG的LOAD协议,VB要设置成38400,N,8,1通讯线就是编程线,无需设置PLC参数。
3。先给PLC编一程序:LOAD P0007
                    SET  P0040
                    END
4。编程的端口号和VB设置的端口号一致,退出编程软件,运行VB。
5。将字符串Chr(2) & "oM005C008000BC" & Chr(3)发送出去。其中BC就是校验和。
6。看PLC  P40是否吸合?

老苯

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 14回
  • 年度积分:0
  • 历史总积分:27
  • 注册:2007年2月26日
发表于:2007-03-14 12:40:00
30楼
谢谢lhs兄弟,我下午再试试看,本想传份PLC的梯形图上来(正在应用中的)。但小弟目前还不是VIP,下次再传上来请你指教吧,
无言感激!!!

老苯

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 14回
  • 年度积分:0
  • 历史总积分:27
  • 注册:2007年2月26日
发表于:2007-03-14 12:43:00
31楼
如果再不行,就只好换用三菱的PLC了,可是小弟实在不想用小日本的东东。

老苯

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 14回
  • 年度积分:0
  • 历史总积分:27
  • 注册:2007年2月26日
发表于:2007-03-14 15:09:00
32楼
lhs兄弟,非常感谢您的指点,我的PLC终于返回了几个字符“o6F”,尽管小弟目前还不知道它们是啥意思,还要在设置中断的时候才能捕捉到,但已经是很大进展了,Thank you very much!

老苯

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 14回
  • 年度积分:0
  • 历史总积分:27
  • 注册:2007年2月26日
发表于:2007-03-14 17:01:00
33楼
lhs老兄,可否再麻烦你解析下“oM005C008000BC”的涵义呀?k120s的说明书实在看的小弟头大,小弟的水平实在太有限了,有对照的话会好很多。谢谢

LHS

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 126回
  • 年度积分:0
  • 历史总积分:292
  • 注册:2005年9月12日
发表于:2007-03-14 17:27:00
34楼
这是LG的LORD协议全文如下:(你说明书上看的是LINK协议)
    1. 通讯样述.
    1 控制顺序   :  半双工系统
    2 通讯方式  :  RS-232C
    3 通速度  :  38400 BPS
    4 检測错误方式 :  BCC
    5 帧长度 :  最大 128 字节


2. 特殊通讯控制代码
      - STX : START OF T例T (02)
      - ETX : END OF T例T (03)
      - ACK : ACKNOWLEDGE (06)
      - NAK : NEGATIVE ACKNOWLEDGE (15)
      - EOT : END OF TRANSMISSION (04)
 ############################################################################

3. PLC内存地址
    请勿在禁止写入区写入地址.

K7P-30AS(K1000S)

0C0000h D 区域(10K 字)


0C5000h T 区域(当前值,256 字)

0C5200h C 区域(当前值,256 字)

0C5400h T 区域(设定值E,256 字)

0C5600h C 区域(设定值E,256 字)

0C5800h 定时器 IN格式ION

0C5A00h 计数器 IN格式ION

0C5C00h P 区域(1024点)

0C5D00h M 区域(3072点)

0C5F00h L 区域(1024点)

0C6000h K 区域(512点)

0C6100h T 区域(256点)

0C6200h C 区域(256点)

0C6300h F 区域(1024点)

0C6400h S 区域(100字)

*****************************************************************************

K4P-15AS(K300S)

0A0000h D 区域 (5K 字)

0A5000h T 区域(当前值,256 字)

0A5200h C 区域(当前值,256 字)

0A5400h T 区域(设定值E,256 字)

0A5600h C 区域(设定值E,256 字)

0A5800h 定时器 IN格式ION

0A5A00h 计数器 IN格式ION

0A5C00h P 区域(1024PT)

0A5D00h M 区域(3072PT)

0A5F00h L 区域(1024PT)

0A6000h K 区域(512PT)

0A6100h T 区域(256PT)

0A6200h C 区域(256PT)

0A6300h F 区域(1024PT)

0A6400h S 区域(100字)

           在使用通讯模块时,不要在特殊数据区域写数据,比如:D,M,L
*****************************************************************************************************
K7M-DRXXS(K80S)

000000h D 区域(5K 字)

005000h T 区域(当前值,256 字)

005200h C 区域(当前值,256 字)

005400h T 区域(设定值E,256 字)

005600h C 区域(设定值E,256 字)

005800h 定时器 IN格式ION

005A00h 计数器 IN格式ION

005C00h P 区域(1024PT)

005D00h M 区域(3072 PT)

005F00h L 区域(1024 PT)

006000h K 区域(512 PT)

006100h T 区域(256PT)

006200h C 区域(256PT)

006300h F 区域(1024PT)

006400h S 区域(100字)

*上述的十六进制地址对应PLC的时,字节单元来对应。
例)K80s P004(字) : P0040~P0047是对应 085C00, P0048~P004F是对应 085C01

###############################################################################

4. 读出数据 :
   1) 要求 
      * STX – “r” – 区域 – 起始地址 – 数据长度 - BCC - ETX 
   2) 回答 
      * ACK 回答 :  ACK – “r” – 读出的数据 - BCC - EOT
      * NACK 回答 :  NAK – 信息(1字节) - BCC - EOT
   3) 帧 数据
      * 区域(1字节 ASCII)
- “M” : 数据 区域
      * 起始地址(6字节ASCII) : 读起始地址 
         -   3字节16进制.
      *数据长度(2字节 ASCII) : 读计数器数据 

      * BCC (2字节 ASCII) : 读 帧-Sum
不含 STX 和 ETX.
      * 读数据 (数据长度 * 2字节 ASCII) : 读 数
 
 
    读 10 字 数据 From P001 to P010
P001 地址 0x5C02(x=C(1000S),A(300S),8(200S))

1) 要求 帧 
     格式        :  - STX - “r”–“M”– 02 5C 00 - 14  – BCC - ETX
                                        
     ASCII   :  - 02  –  72  –  4D – 3032 3543 3030  - 3041 – BCC – 03
                                          
      BCC  = 72 + 4D + 30 + 32 + 35 + 43 + 30 + 30 + 30 + 41 = 026A => 6A => 3641
      帧  :  &szlig; 02 <- 72  <- 5A <- 36 34 30 30 30 30  <- 3041  <- 3641 <- 03



2) 回答 帧(假如 P001~P010 数据 是 0~9 )
     格式       :  - ACK – “r”  - 0000-0100-0200….-0800-0900 - BCC - EOT
     ASCII  :  - 06  –  72  – 3030 3030 3031 3030 3032…. 3039 3030 - BCC – 04
            BCC = 72 + 30+30+30+30+30+31+…. +30+39+30+30 = 0787 => 87 => 3837
     帧 : &szlig; 06 <- 72 <- 3030 3030 3130 … 3039 3030 <- 3847 <- 04

####################################################################################

5. 写入数据 
   1) 要求 帧 
     * STX – “w” - 区域 – 起始地址 - 数据长度 – 写入数据 - BCC - ETX 
   2) 回答 帧 
     * ACK 回答 帧 :  ACK – “w” - BCC - EOT
     * NACK 回答 帧 :  NAK – 信息 - BCC - EOT

例)  写数据 (D0001~ D0010) 
– 假如写数据如此 D0001:0000, D0002:0001, D0002:0002, …    ….. D0008:0007, 
   D0009:0008
1) 要求 帧 
    格式 :  - STX - “w”–“M”– 020000 – 14 – 0000-0100-0200….-0800-0900 - BCC - ETX
    ASCII   :  - 02 – 77 – 4D – 3032 3030 3030 - 3134 – 3030 3030 3031…. 3039 3030
                   - BCC – 03
           BCC = 77 + 4D + 30+32+30+30+30+30+31+34+30+30+30+30+30+31+…. +30+39+30+30
                       = 09F8 => F8 => 4638
    帧  :  &szlig; 02  77  4D 3032  3030  3030  3134   3031  3030  3032  3039  3030  4638   03


2) 回答 帧 
    格式       :  - ACK – “w” - BCC - EOT
    ASCII  :  - 06  –  77  – BCC – 04
              BCC =  77 => 3737
    帧 : &szlig; 06 <- 77 <- 3737  <- 04

 
######################################################################################

6. 数据 AND : 
   1) 要求 帧 
      * STX – “n” – 区域 - Var_Addr - AND_数据 - BCC - ETX 
   2) 回答 帧 
      * ACK 回答 帧 :  ACK – “n” - BCC - EOT
      * NACK 回答 帧 :  NAK - Message - BCC - EOT
   3) 帧 数据
      * Start_Addr (6字节 ASCII) : 读 Start Address 
   

例) M010字的 M0105位 Off 
1) 要求 帧 
    格式 :  - STX - “n”–“M”– 145D00 – DFFF - BCC - ETX
    ASCII  :  - 02 – 6E – 4D – 3134 3544 3030 – 4446 4646 – BCC – 03
           BCC = 6E + 4D + 31+34+35+44+30+30 +44+46+46+46 = 30F => 0F => 3046
    帧  :  &szlig;    02     6E     4D    3134   3544   3030     4446    4646    3046     03

2) 回答 帧 
    格式       :  - ACK – “n” - BCC - EOT
    ASCII        :  - 06  – 6E  – BCC – 04
              BCC =  6E => 3645
    帧 : &szlig; 06 <- 6E <- 3645  <- 04



 例) P0207 Off 
1) 要求 帧 
    格式 :  - STX - “n”–“M”– 285C00 –7FFF - BCC - ETX
    ASCII  :  - 02 – 6E – 4D – 3238 3543 3030 - 3746 – 4646 – BCC – 03
           BCC = 6E + 4D + 32+38+35+43+30+30+37+46+46+46 = 20C => 0C => 3043
    帧  :  &szlig; 02 <- 6E  <- 4D <- 3238 3543 3030  <- 3746 <- 4646<- 3043 <- 03

2) 回答 帧 
    格式     :  - ACK – “n” - BCC - EOT
    ASCII      :  - 06  – 6E  – BCC – 04
              BCC =  6E => 3645
    帧 : &szlig; 06 <- 6E <- 3645  <- 04

##################################################################################

7. 数据 OR  :
   1) 要求 帧 
      * STX – “o” - 区域 - Var_Addr - OR_数据 - BCC - ETX 
   2) Local PLC 回答 帧 
      * ACK 回答 帧 :  ACK – “o” - BCC - EOT
      * NACK 回答 帧 :  NAK - Message - BCC - EOT



例)  L0309 On  
1) 要求 帧 
    格式 :  - STX - “o”–“M”– 3C5F00 – 0002 - BCC - ETX
    ASCII  :  - 02 – 6F – 4D – 3343 3546 3030 – 3030 3032 – BCC – 03
           BCC <= 6F + 4D + 33+43+35+46+30+30+30+30+30+32 = 02A2 => A2 => 4132
    帧  :  &szlig; 02 <- 6F  <- 4D <- 3343 3546 3030 <- 3030 3032 <- 4132 <- 03

2) 回答 帧 
    格式       :  - ACK – “o” - BCC - EOT
    ASCII        :  - 06  – 6F  – BCC – 04
              BCC =  6F => 3646
    帧 : &szlig; 06 <- 6F <- 3646  <- 04




例)  K010F  On 
1) 要求 帧 
    格式 :  - STX - “o”–“M”– 146000 – 0080 - BCC - ETX
    ASCII  :  - 02 – 6F – 4D – 3134 3630 3030 - 3030 3830 - BCC – 03
           BCC <= 6F + 4D + 31+34+36+30+30+30 +30+30+38+30  = 02AF  => AF => 4146
    帧  :  &szlig; 02 <- 6F  <- 4D <- 3134 3630 3030  <- 3030 3830 <- 4146 <- 03

2) 回答 帧 
    格式       :  - ACK – “o” - BCC - EOT
    ASCII        :  - 06  – 6F  – BCC – 04
              BCC =  6F => 3646
    帧 : &szlig; 06 <- 6F <- 3646  <- 04

 
 

老苯

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 14回
  • 年度积分:0
  • 历史总积分:27
  • 注册:2007年2月26日
发表于:2007-03-14 21:00:00
35楼
lhs兄弟,LORD协议是否指的是MODBUS呀?KGL_WIN只有“专用”“MODBUS”“用户自定义”“总线”四种呀,小弟真的糊涂得很,PLC返回来的“o6F”还没弄懂是啥意思呢,不过你给出的资料我的确没见过,收下慢慢学习。嘿嘿,水平差没办法

老苯

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 14回
  • 年度积分:0
  • 历史总积分:27
  • 注册:2007年2月26日
发表于:2007-03-14 21:21:00
36楼
lhs兄弟,大概看了下LORD协议,“o6F”应该是OR成功的意思吧,我明天再试试,不过这个协议传输命令时似乎不用指明PLC的站号,假如我用多个PLC通过RS485连在一起,会不会有啥问题呢?
不好意思,再麻烦你一下。

LHS

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 126回
  • 年度积分:0
  • 历史总积分:292
  • 注册:2005年9月12日
发表于:2007-03-15 10:35:00
37楼
对不起写错了因该是LOAD协议他是LG编程协议和MODBUS协议是不同的,但他只能1:1通讯,你要实现多点通讯可以用LINK和MODBUS,我发一个用MODBUS  ASCII方式的例子给你。

罗子

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 9回
  • 年度积分:0
  • 历史总积分:146
  • 注册:2004年8月16日
发表于:2007-03-15 12:04:00
38楼
LHS  
   你好! 我是第一次使用LG K7M-DR30U PLC,我从网上下载的资料,有好多也看不懂,我是PC 与PLC 一对 一 通讯,可看资料上的设置调试通讯就是没有成功,试了几种方式都不行,能否麻烦你给我发点资料和例子主要是通讯方面的,我的邮箱LUO_LAI_DONG@163.COM,谢谢您!

老苯

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 14回
  • 年度积分:0
  • 历史总积分:27
  • 注册:2007年2月26日
发表于:2007-03-15 20:43:00
39楼
lhs兄弟,已收到.vbp和.vbw两个文件,谢谢
还差.frm和.scc两个文件没收到,工程不能启动。不知是不是搜狐半路上把文件搞丢了,真是郁闷。

罗子

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 9回
  • 年度积分:0
  • 历史总积分:146
  • 注册:2004年8月16日
发表于:2007-03-25 16:54:00
40楼
老苯你好!
  问题解决了吗?我用专用通讯协议调通了,把PLC通讯设置成专用协议"从",其他的设置就简单了,你用的是VB在MSComm1的属性设置要设置好
 With MSComm1
            .CommPort = 1
            .Settings = "9600,N,8,1"
            .InputMode = 0
            .RThreshold = 14'根据需要设置长度
            If .PortOpen = False Then .PortOpen = True
        End With

以上在程序初始化中写入
FASONG = "01WSS0106%PW0040001"
Sb = Chr(5) & FASONG & Chr(4)
MSComm1.Output = Sb
你试试发送数据后P40有没有输出.
还有其他的通讯方式我还没有弄通,你要是搞定请指教.



热门招聘
相关主题

官方公众号

智造工程师