前言:主要记录基恩士PLC在工作中使用到的通信方式,串口网口,模拟量等。
1.串口通信(KV-L21V)
1.1基础了解
KV-L21V可以实现以下功能,如下图。KV-L21V有两个端口,其中端口1只支持RS-232C,
端口2除了支持232额外支持422和485。







1.2Modbus主站
首先在端口的动作模式选择中选择Modbus主站模式,选择接口,波特率,停止位,奇偶校验。占用软元件地址如下。




其功能代码如下


由此可知程序编写主要是根据时序表进行继电器和数据存储器的使用。


1.3无协议模式
首先在端口的动作模式选择中选择无协议模式,选择接口,波特率,停止位,奇偶校验。占用软元件地址如下。


无协议模式其实相当于更底层一点的东西,你甚至可以用无协议模式来写一个Modbus主站模式(本质上就是发一些数的组合)。





2.网口通信(套接字)
2.1基础了解
KV 套接字通信,是指通过以太网中的设备和 TCP/IP 或 UDP/IP 协议,收发任意数据的功能。除PC 和工作站之外,还可与支持以太网的各种设备进行通信。 KV 套接字通信可以通过使用被设定为套接字通信用的缓冲存储器和继电器,并编制梯形图程序,在 CPU 单元侧和对象设备之间执行数据的收发信。IP 地址和端口号的组合称为“套接字”。IP 地址指定通信终端,端口号指定终端内部使用的服务。






2.2TCP主动打开
客户端主动打开,服务器被动打开,这里我们做客户端TCP主动打开。









//套接字
//首继电器R30000
//输出继电器 n+4000 输入继电器 n+6000
Z1:=16*套接字编号;
//打开套接字通信
//U_SOPEN
//自端口编号 In_Mode_Ip[0]
//通讯目标 IP 地址(第 1 字节) In_Mode_Ip[1]
//通讯目标 IP 地址(第 2 字节) In_Mode_Ip[2]
//通讯目标 IP 地址(第 3 字节) In_Mode_Ip[3]
//通讯目标 IP 地址(第 4 字节) In_Mode_Ip[4]
//通讯目标端口编号 In_Mode_Ip[5]
//请求超时时间(ms) In_Mode_Ip[6]
//UDP 发送标记 In_Mode_Ip[7]
IF CR2006 and In_Enble and R34002:Z1 and not R34012:Z1 and not R36013:Z1 then
Mode_ip:=In_Mode_Ip;
END_IF;
//地址写入
U_SOPEN(CR2006 AND In_Enble and R34002:Z1 and not R34012:Z1 and not R36013:Z1
, K0 ,套接字编号 ,Mode_ip[0]);
//检测通信建立是否完成
IF LDP(R34002:Z1) THEN OUT_ConnectOK:=0; OUT_ConnectNG:=0; END_IF;
IF R34002:Z1 and R36002:Z1 and R36013:Z1 and not R36003:Z1 then
OUT_ConnectOK:=1;
END_IF;
IF R34002:Z1 and R36002:Z1 and R36013:Z1 and R36003:Z1 then
OUT_ConnectNG:=1;
END_IF;
//读取状态字
U_SSTAT(R34002:Z1,K0,K0,OUT_Status);
//自动连接
IF CR2006 AND In_Enble AND NOT R36013:Z1 THEN
R34002:Z1:=1;
END_IF;
IF R36013:Z1 OR NOT In_Enble OR LDP(OUT_ConnectNG) THEN
R34002:Z1:=0;
END_IF;
//套接字数据发送 数据发送
//输入刷新
//RFSX(LDP(In_Send_Trig),R36000:Z1,K16);
Send_Data:=In_Send_Data;
//发送数据
U_SWRBUF(LDP(In_Send_Trig) and R36013:Z1,K0 ,套接字编号 ,Send_Data);
//检测发送是否OK
IF R34006:Z1 and R36006:Z1 and not R36007:Z1 then
OUT_SendOK:=1;
END_IF;
IF R34006:Z1 and R36006:Z1 and R36007:Z1 then
OUT_SendOK:=0;
END_IF;
//发送触发
IF LDP(In_Send_Trig) and not R36006:Z1 THEN
R34006:Z1 :=1;
END_IF;
IF R36006:Z1 THEN
R34006:Z1 :=0;
END_IF;
//输出刷新
//RFSY(LDF(In_Send_Trig),R34000:Z1,K16);
//套接字数据接收 数据接收
//输入刷新
//RFSX(LDP(In_Send_Trig),R36010:Z1,K16);
//数据接收设定
Rec_Set[0]:=13;//数据长度字节
Rec_Set[1]:=0;//接收数据存储对象偏置(请求)
U_SRCVNP(LDP(In_Send_Trig) ,K0,套接字编号,Rec_Set);
//接收数据读出
U_SRDBUF( R34008:Z1 AND R36008:Z1 and not R36009:Z1,
K0,套接字编号,@DM100);
//检测接收是否OK
IF R34008:Z1 and R36008:Z1 and not R36009:Z1 then
OUT_RecOK:=1;
R34008:Z1:=0;
END_IF;
IF R34008:Z1 and R36008:Z1 and R36009:Z1 then
OUT_RecOK:=0;
R34008:Z1:=0;
END_IF;
//数据接收触发
IF R36013:Z1 AND NOT R36008:Z1 and
R36006:Z1 and not R36007:Z1 THEN
R34008:Z1:=1;
END_IF;
OUT_Rec_Data[0]:=@DM100;
OUT_Rec_Data[1]:=@DM101;
OUT_Rec_Data[2]:=@DM102;
OUT_Rec_Data[3]:=@DM103;
OUT_Rec_Data[4]:=@DM104;
OUT_Rec_Data[5]:=@DM105;
OUT_Rec_Data[6]:=@DM106;
OUT_Rec_Data[7]:=@DM107;
OUT_Rec_Data[8]:=@DM108;
OUT_Rec_Data[9]:=@DM109;
///关闭
IF R36013:Z1 AND NOT In_Enble THEN
R34012:Z1:=1;
END_IF;
IF R36012:Z1 THEN
R34012:Z1:=0;
END_IF;
2.3套接字专用指令






3.模拟量(KV-AD40V)
模块支持4路模拟信号输入,可选电压或电流。











210

被折叠的 条评论
为什么被折叠?



