|
S7-300_CP340通过MODBUS协议与智能仪表通讯 <原创> |
|
WangFeng 发表于 2007-5-19 16:10:00 |
CP340 点到点通讯模块。 以前作要与智能仪表通讯,一般我们选择通过Profibus-DP,仪表的成本相应的要很多。 由于工程中PLC只与1~3块智能仪表进行通讯,主要读相关固定参数(如:温度等)和向下写固定参数。 CP340硬件接口有:RS232、RS485/RS422、TTY三种方式,一般我们选择RS485的,传输远且抗干扰强,但它属于半双工。如果与上位机进行通讯,则在进行读写操作时,需注意顺序,不能同时操作。 使用CP340的协议:3964(R)、ASCII、Printer。 要实现MODBUS协议,ASCII是可行的。波特率最大只能到9600,比起其它方式要慢些。
CP340设置:ASCII协议;消息结束以延时方式 I Set 4ms;9600,8,1,E;硬件流量控制 None;接收缓冲区设置 1 防止重写;接口两线RS485.
MODBUS协议需要进行CRC校验,也就是说PLC侧需单独编制CRC检验程序, VB检验程序为:
Public Function crc(message$) As Long
On Error Resume Next
Dim crc16&
Dim crch%
Dim c%
Dim crcl%
Dim Bit%
crc16& = 65535
For c% = 1 To Len(message$)
crc16& = crc16& Xor AscB(Mid$(message$, c%, 1))
For Bit% = 1 To 8
If crc16& Mod 2 Then
crc16& = (crc16& \ 2) Xor 40961
Else
crc16& = crc16& \ 2
End If
Next Bit%
Next c%
crch% = crc16& \ 256: crcl% = crc16& Mod 256
message$ = message$ & Chr(crcl%) & Chr(crch%)
crc = crc16&
End Function
PLC则CRC块 SCL源程序(转载请告知!)
***********************
FUNCTION CRC: VOID
TITLE = 'Modbus Crc'
VERSION : '1.0'
KNOW_HOW_PROTECT
AUTHOR : WangFeng
Name : '20060416'
Family : 'CRC'
VAR_TEMP
i: INT;
j: INT;
Crc16: DWORD;
Crc16_int: DINT;
END_VAR
VAR_INPUT
Crc_StrLen: INT;
DB_StratNO: INT;
MyDBx: BLOCK_DB;
END_VAR
VAR_IN_OUT
END_VAR
VAR_OUTPUT
CrcLower: BYTE;
CrcHight: BYTE;
END_VAR
BEGIN
Crc16 := 65535;
FOR i := 1 TO crc_strlen BY 1 DO
crc16 := crc16 XOR BYTE_TO_WORD(MyDBx.db[DB_StratNO + i - 1]);
crc16_int := DWORD_TO_DINT(crc16);
FOR j := 1 TO 8 BY 1 DO
IF ((crc16_int MOD 2) = 0) THEN
crc16:= DINT_TO_DWORD(crc16_int DIV 2);
ELSE
crc16:= DINT_TO_DWORD(crc16_int DIV 2);
crc16:= (crc16 XOR 40961);
END_IF;
crc16_int:= DWORD_TO_DINT(crc16);
END_FOR;
END_FOR;
crclower:= DWORD_TO_BYTE(crc16 AND 255);
crc16:= ROR(IN:=crc16,N:=8);
CrcHight:= DWORD_TO_BYTE(crc16);
END_FUNCTION
*******************
因程序中发送和接收的数据长度相对是固定的,则建两个单独的发送和接收的块,并按MODBUS协议格式定义数据。 新数据经CRC校验后,可通过CP340发送接收功能块FB2、FB3进行发送和接收。
以上实践中通过,稳定性很好。有兴趣的可以试试. WangFeng 070519 | |
|
|
| Re:S7-300_CP340通过MODBUS协议与智能仪表通讯 <原创> |
|
manxueting发表评论于2007-8-16 22:25:00 |
| 前辈,小女子在此有个c动作编程的问题。希望用编程实现。具体要求是:对象在高速\低速(均为二进制变量)的不同状态下显示不同的背景颜色,高速有效时颜色为绿色,低速时为黄色,除此之外为红色。今天下午我编写了这个程序,但调试了半天还有一个错误始终不能消除,请帮帮看看谢谢!
#i nclude "apdefap.h" long _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){GetTagBit("高速"); //Return-Type: BOOL GetTagBit("低速"); //Return-Type: BOOL if ("高速") {SetBackColor("NewPdl1.Pdl","圆1",RGB(0,255,64)); //Return-Type: BOOL } if ("低速") {SetBackColor2("NewPdl1.Pdl","圆1" ,RGB(255,255,0)); //Return-Type: BOOL } if(“均不”){SetBackColor3("NewPdl1.Pdl","圆1",RGB(255,0,0)); //Return-Type: BOOL }// WINCC:TAGNAME_SECTION_START// syntax: #define TagNameInAction "DMTagName"// next TagID : 1// WINCC:TAGNAME_SECTION_END// WINCC:PICNAME_SECTION_START// syntax: #define PicNameInAction "PictureName"// next PicID : 1// WINCC:PICNAME_SECTION_END}
error: line19:error(0040):<ident>expected before’<eof>’
请前辈看后尽快回复,谢谢 | |
|
|
| Re:S7-300_CP340通过MODBUS协议与智能仪表通讯 <原创> |
|
wangfeng发表评论于2007-8-10 9:20:00 |
| nbsp; 是在SCL中编写的。 编译成功能块调用就行。 简单的使用你可以用CP341,它支持MODBUS协议,但还需要硬件狗 | |
|
|
| Re:S7-300_CP340通过MODBUS协议与智能仪表通讯 <原创> |
|
manxueting发表评论于2007-8-9 12:41:00 |
|
|
|
| Re:S7-300_CP340通过MODBUS协议与智能仪表通讯 <原创> |
|
manxueting发表评论于2007-8-9 12:28:00 |
| 您好 我是贵公司s7-300的初学者,S7-300通过CP340通讯模块与适用于MODBUS协议的仪表连接,请问您上文中PLC侧CRC块SCL源程序填写在何处? | |
|
|
发表评论:
|
|
|