Schneider Modicon M221 PLCへの書き込みに問題があります。 LibModbusライブラリ(C言語)の周りにSwift wrapperを使用しています。 私はを読んでビットを登録しても問題はありません。と書かれているようには見えません。と書くことができますが、私はデバイスから「成功」応答を得ています。Modbus PLCにコイル(ビット)を書き込む
それはビット0使用して機能05.
スウィフト(4)コールに「真の」書き込みと同じくらい簡単です:スウィフト/にObjC SwiftLibModbusラッパーで、この関数への書き込み
@objc func writeToPLC() {
swiftLibModbus.writeBit(address: 0, status: true,
success: {
print("writeBit Success")
},
failure: { (error:NSError) in
print("Error in WriteBit")
})
}
:
:ライブラリ内のこれらのC関数への書き込みfunc writeBit(address: Int32, status: Bool, success: @escaping() -> Void, failure: @escaping (NSError) -> Void) {
modbusQueue?.async {
if modbus_write_bit(self.mb!, address, status ? 1 : 0) >= 0 {
DispatchQueue.main.async {
success()
}
} else {
let error = self.buildNSError(errno: errno)
DispatchQueue.main.async {
failure(error)
}
}
}
}
その後、
:
static int write_single(modbus_t *ctx, int function, int addr, int value){
int rc;
int req_length;
uint8_t req[_MIN_REQ_LENGTH];
req_length = ctx->backend->build_request_basis(ctx, function, addr, value, req);
rc = send_msg(ctx, req, req_length);
if (rc > 0) {
/* Used by write_bit and write_register */
uint8_t rsp[_MIN_REQ_LENGTH];
//printf("Print %s, %s, %d ", req, rsp, rc);
rc = _modbus_receive_msg(ctx, rsp, MSG_CONFIRMATION);
if (rc == -1)
return -1;
rc = check_confirmation(ctx, req, rsp, rc);
}
return rc;}
_FC_WRITE_SINGLE_COIL定数が_MIN_REQ_LENGTH定数が12
である0x05を
で実行しているとき、私は、コンソールに "writeBit成功" を得るが、少し状況は変わりません。
これはSchneiderの独自のものかどうか不思議に思っています。
誰もがこの分野での経験がありましたか?