如果你需要使用C35/C36/C37的RS485口做自由口協議收發(fā)用,可以使用Codesys自帶串口庫,如下是使用的教程。
首先要使用自帶串口庫,有一些參數需要我們在程序中設定,如下是codesys中的英文幫助說明。(沒(méi)有中文的,抱歉哈)
In order to configure the COM port a pointer on an array of ⇘ COM.PARAMETER is transmitted. The array contains pairs of parameter IDs and associated values corresponding to the configuration parameters. These constants depend on the platform and the implementation. The following constants are Windows specific in terms of their employment within the implementation of SysCom. The table indicates which member of the Windows structure DCB the parameter is assigned to. Id
| Name of CAA.Parameter_Constants
| corresponds to DCB value
| 0x00000001
| udiPort
| Port number(C35、C36、C37串口 應固定爲2)
| 0x00000002
| udiStopBits
| StopBits (停止位)
COM.ONESTOPBIT 0 1 stop bit
COM.ONE5STOPBITS 1 1.5 stop bits
COM.TWOSTOPBITS 2 2 stop bits
| 0x00000003
| udiParity
| Parity(奇偶校驗位)
COM.EVEN 0 even
COM.ODD 1 odd
COM.NONE 2 none
| 0x00000004
| udiBaudrate
| Baudrate 波特率 9600 19200 115200等等
| 0x00000005
| udiTimeout
| Timeout
| 0x00000006
| udiBufferSize
| Buffersize of the serial interface
| 0x00000007
| udiByteSize
| Number of data bits/BYTE, 4-8
| 0x00000008
| udiBinary
| binary mode, no EOF check
| 0x00000009
| udiOutxCtsFlow
| CTS handshaking on output
| 0x0000000A
| udiOutxDsrFlow
| DSR handshaking on output
| 0x0000000B
| udiDtrControl
| DTR Flow control
| 0x0000000C
| udiDsrSensitivity
| DSR Sensitivity
| 0x0000000D
| udiRtsControl
| Rts Flow control
| 0x0000000E
| udiTXContinueOnXoff
| XOFF continues Tx
| 0x0000000F
| udiOutX
| XON/XOFF out flow control
| 0x00000010
| udiInX
| XON/XOFF in flow control
| 0x00000011
| udiXonChar
| Tx AND Rx XON character
| 0x00000012
| udiXoffChar
| Tx AND Rx XOFF character
| 0x00000013
| udiXonLim
| Transmit XON threshold
| 0x00000014
| udiXoffLim
| Transmit XOFF threshold
|
爲了配置COM端口,需要用戶去配置com.parameter指針數組中的參數。該數組包含參數ID和對(duì)應于配置參數的關聯值。
這(zhè)些常量依賴于平台實現。以下常量是Windows在syscom實現過(guò)程中的特定用途。該表指示將(jiāng)參數分配給Windows結構DCB成(chéng)員。
首先在程序中,需要先對(duì)串口進(jìn)行參數初始化。
在全局變量中變量
VAR_GLOBAL
aCom1Params: ARRAY[1..7] OF COM.PARAMETER;
udiListLength: USINT;
Frist: BOOL := 1;
END_VAR
進(jìn)行參數初始化賦值
IF Frist THEN
aCom1Params[1].udiParameterId := COM.CAA_Parameter_Constants.udiPort;
aCom1Params[1].udiValue := 2;
aCom1Params[2].udiParameterId := COM.CAA_Parameter_Constants.udiStopBits;
aCom1Params[2].udiValue := COM.STOPBIT.ONESTOPBIT;//停止位
aCom1Params[3].udiParameterId := COM.CAA_Parameter_Constants.udiParity;
aCom1Params[3].udiValue := COM.PARITY.NONE;//檢驗位
aCom1Params[4].udiParameterId := COM.CAA_Parameter_Constants.udiBaudrate;
aCom1Params[4].udiValue := 19200;//波特率
aCom1Params[5].udiParameterId := COM.CAA_Parameter_Constants.udiTimeout;
aCom1Params[5].udiValue := 0;
aCom1Params[6].udiParameterId := COM.CAA_Parameter_Constants.udiByteSize;
aCom1Params[6].udiValue := 8;
aCom1Params[7].udiParameterId := COM.CAA_Parameter_Constants.udiBinary;
aCom1Params[7].udiValue := 0;
udiListLength := SIZEOF(aCom1Params)/SIZEOF(COM.PARAMETER);
Frist:=0;
END_IF
運行上述程序即完成(chéng)串口初始化,因爲涉及到codesys串口庫,所以在工程中添加Serial_Communication庫。
打開(kāi)串口,生成(chéng)COM連接的句柄。(生成(chéng)的句柄在讀和寫的操作中,需要調用到。)
如下是串口讀寫的操作指令,COM.Open和COM.Write
建立發(fā)送數組和接收緩存數組,將(jiāng)地址指針賦值到讀和寫的輸入端,即可完成(chéng)讀寫操作。
如下是與串口工具的調試過(guò)程截屏:
接收緩存區全是0
串中工具發(fā)送數據。
每隔1秒去讀緩存區,讀到報文後(hòu)讀的庫會顯示收到的報文字節長(cháng)度。
這(zhè)是寫的數組,裡(lǐ)邊存了發(fā)送的值。
以上是串口工具接收到PLC發(fā)的報文。
|